1.kafka的指标说明

lua kafka的包 kafka largest_zookeeper


Brokers Spread:看作broker使用率,如kafka集群9个broker,某topic有7个partition,则broker spread: 7 / 9 = 77%

lua kafka的包 kafka largest_默认值_02


Brokers Skew:partition是否存在倾斜,如kafka集群9个broker,某topic有18个partition,正常每个broker应该2个partition。若其中有3个broker上的partition数>2,则broker skew: 3 / 9 = 33%

lua kafka的包 kafka largest_kafka_03


Brokers Leader Skew:leader partition是否存在倾斜,如kafka集群9个broker,某topic14个partition,则正常每个broker有2个leader partition。若其中一个broker有0个leader partition,一个有4个leader partition,则broker leader skew: (4 - 2) / 14 = 14%

lua kafka的包 kafka largest_lua kafka的包_04


由于kafka所有读写都在leader上进行, broker leader skew会导致不同broker的读写负载不均衡,配置参数 auto.leader.rebalance.enable=true 可以使kafka每5min自动做一次leader的rebalance,消除这个问题。

另一个比较关心的问题是Lag为什么有时是负数?

Lag代表consumer的消费能力,计算公式为Lag = Consumer Offset - LogSize,Kafka Manager先从zk获取LogSize,再从kafka __consumer_offsets topic读取Offset。两步操作存在一个时间gap,因此吞吐很大的topic上会出现Offset > LogSize的情况。导致Lag负数。

如下图:

lua kafka的包 kafka largest_lua kafka的包_05


2.kafka常用指令:

1.创建Topic 。

关于创建主题,大家也可以去了解kafka的工作原理,创建主题的命令可用下面的命令操作。

bin/kafka-topics.sh

指定对topic的操作比如创建–create,查看topic为–list

–topic 指定topic的名字

–zookeeper 指定zookeeper的连接地址,格式为host:port

–partitions 指定partition的数量,默认为1

–replication-factor 指定partition的备份数,默认为1

–replica-assignment手动分配replica到broker上,格式为

<broker_id_for_part1_replica1 : broker_id_for_part1_replica2,

broker_id_for_part2_replica1 : broker_id_for_part2_replica2, …>

下图为创建主题的两个例子。

lua kafka的包 kafka largest_kafka_06


lua kafka的包 kafka largest_zookeeper_07


3.重新分配partition ,可以采用下面的命令:

bin/kafka-reassign-partitions.sh

–zookeeper 指定zookeeper的连接地址,格式host:port

–broker-list 指定partition需要重新分配到哪些节点,格式为”0,1,2”

–topics-to-move-json-file 指定JSON文件的地址,文件内容是需要重新分配的topic列表。这个选项和manual-assignment-json-file选项需要指定其中

的一个。文件内容的格式为

{“topics”: [{“topic”: “test”},{“topic”: “test1”}], “version”:1 }

–manual-assignment-json-file 指定JSON文件的地址,文件内容是手动分配的策略。这个选项和topics-to-move-json-file选项需要指定其中的一个。文件内容的格式为

{“partitions”:

[{“topic”: “test”, “partition”: 1, “replicas”: [1,2,3] }], “version”:1 }

–status-check-json-file 指定JSON文件的地址,文件内容是partition和partition需要分配到的新的replica的列表。这个JSON文件可以从模拟执行的结果得到。

–execute 如果使用这个选项,那么会执行真实的重新分配分区的操作。如果不指定这个选项,默认会进行模拟执行。

例子如下图所示。

lua kafka的包 kafka largest_默认值_08


5.手动均衡Topic,让partition选择preferred replica作为leader

bin/kafka-preferred-replica-election.sh

–zookeeper 指定zookeeper的连接地址,格式host:port

–path-to-json-file 指定需要重新进行leader选举的partition列表文件所在的地址,文件内容的格式为

{“partitions”: [{“topic”: “test”,“partitions”: 1},{“topic”: “test”, “partitions”: 2}]}

默认值为所有存在的partition 。

例子如下图所示。

lua kafka的包 kafka largest_zookeeper_09


6.从一个Topic读消息,把消息重放到另一个Topic 。命令格式如下:

bin/kafka-replay-log-producer.sh

–async 如果设置该选项,则异步发送消息

–batch-size <Integer: batch size> 每次批量发送的消息数,默认值200

–broker-list hostname:port 指定broker列表,格式host:port

–compression-codec <Integer: compression docec> 如果设置该选项,则消息经过压缩后再发送,默认值0。(0:none, 1:gizp, 2:snappy)

–delay-btw-batch-ms<Long: ms> 两次批量发送的间隔时间,默认值0

–inputtopic 消息消费的源Topic

–messages <Integer: count> 需要发送的消息数,默认值-1,即发送所有消息

–outputtopic 消息发送至的目标Topic

–reporting-interval <Integer: size> 打印过程信息的时间间隔,默认值5000

–threads <Integer: threads> 发送消息的线程数,默认值1

–zookeeper 指定zookeeper的连接地址,格式host:port,默认值为127.0.0.1:2181

例子如下图所示。

lua kafka的包 kafka largest_默认值_10


7.查看Consumer的消费和积压信息。命令格式如下:

bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker

–broker-info 显示broker的信息

–group 必须,指定consumer group的名字

–topic 指定topic的名字

–zkconnect 必须,指定zookeeper的连接地址,格式host:port

例子如下图所示。

lua kafka的包 kafka largest_zookeeper_11