新版本(0.9+)的Kafka将consumer group的消费偏移量保存在一个特殊的topic里,在此之前的版本中都是保存在zookeeper里。
而新版本的kafka SDK并没有暴露出查询偏移量的方法,也就无从得知现在消费积压了多少任务,而我正需要监控这个事情。
经过各种谷歌,最终只能使用Kafka自带的一个工具来获取,方法如下:
1 |
bin/kafka-consumer-groups.sh --bootstrap-server "10.9.107.229:9092" --new-consumer --describe --group 你的消费组名称 |
它将打印消费组关联的所有topic以及partition的Offset信息,下面是个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
GROUP, TOPIC, PARTITION, CURRENT OFFSET, LOG END OFFSET, LAG, OWNER smzdm-1, test-bigpipe, 0, 4957648, 4957648, 0, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 1, 4962099, 4962099, 0, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 2, 4958944, 4958944, 0, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 3, 4959175, 4959175, 0, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 4, 4960354, 4960354, 0, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 5, 4960861, 4960861, 0, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 6, 4951609, 4951609, 0, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 7, 4961980, 4961980, 0, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 8, 4957978, 4957978, 0, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 9, 4963736, 4963736, 0, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 10, 4954817, 4954817, 0, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 11, 4955323, 4955323, 0, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 12, unknown, 0, unknown, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 13, unknown, 0, unknown, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 14, unknown, 0, unknown, rdkafka_/10.10.25.125 smzdm-1, test-bigpipe, 15, unknown, 0, unknown, rdkafka_/10.10.25.125 |
CURRENT OFFSET是消费到哪里,LOG END OFFSET是队列总OFFSET,后者减去前者就是堆积的消息个数。
最后
在搞监控的过程中,我发现之前使用的一个consumer group不见了(我换了新的consumer group在消费),也就是通过如下命令无法获取到之前的那个消费组:
1 |
bin/kafka-consumer-groups.sh --bootstrap-server "10.9.107.229:9092" --new-consumer --list |
经过谷歌发现,原来kafka会自动清理长时间没有动静(没有offset commit)的consumer group,导致备份的offset过期被丢弃了,具体见:stockoverflow。
Kafka服务端可以配置参数来控制这种长时间空闲的consumer group的过期时间,避免过了一阵子想继续消费,却发现offset不见了。
如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~
