一、业务需求
上游数据存储到kafka中,使用flume来采集数据,传输至hdfs等多种flumeSink。在此过程中,若kafka的数据生产速度高于了flume的消费速度,就会产生数据积压。为了对此过程进行监控,需要定时来监控kafka的生产与消费的状态。
二、知识积累
知识参考:https://blog.csdn.net/yxgxy270187133/article/details/53666760
- 查询kafka topic的offset的范围
- 查看topic=pz_test_topic,broker=${ip_port}的offset的最小值
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list ${ip_port} -topic pz_test_topic --time -2
输出:pz_test_topic:0:1000
- 查看offset的最大值
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list ${ip_port} -topic pz_test_topic --time -1
输出:pz_test_topic:0:1982
可见,topic:pz_test_topic有一个分区partition:0,且 offset范围为:[1000,1982]
- 设置consumer group的offset
- 启动zookeeper client
/zookeeper/bin/zkCli.sh
- 设置consumer group:testgroup topic:pz_test_topic partition:0的offset为1000:
set /consumers/testgroup/offsets/pz_test_topic/0 1000
- 注意如果kafka设置了zookeeper root,比如为/kafka,那么命令应该改为:
set /kafka/consumers/testgroup/offsets/pz_test_topic/0 1000
重启相关的应用程序,就可以从设置的offset开始读数据了
- 手动更新kafka存在zookeeper中的偏移量
有时候需要手动将某个topic的偏移量设置成某个值,需要更新Zookeeper中的数据。Kafka内置为我们提供了修改偏移量的类:kafka.tools.Upd