场景: 在一个线程内,使用相同的brokers和group id等配置,根据传入的topic数量N,分别定义N个consumer,按定义顺序先后调用consumers消费
现象: 程序启动后,kafka消费线程正常初始化,调用poll尝试消费,一直没有返回消息. 程序启动10分钟左右后,开始正常消费.
分析定位:
程序启动后,发现不消费
1>查看kafka debug日志
Sending Heartbeat request to coordinator 192.168.44.88:9191 (id: 2147483647 rack: null)
Attempt to heartbeat failed since group is rebalancing
2>使用kafka自带脚本查看消费组的情况
bin/kafka-consumer-groups.sh --bootstrap-server 192.168.44.88:9191 --describe --group sample-consumer-group
发现Warning: Consumer group 'sample-consumer-group' is rebalancing.
topic的LAG不为0,即有消息积压.
3>尝试更新kafka集群后和增加topic partitions后测试,发现问题依然存在,确认是程序问题.
4>尝试减少consumer和topic数量,只传入一个topic,消费正常.
传入3个topic和传入1个topic时,对于每个topic而言,都只有一个consumer消费一个topic,为什么前者不正常二后者正常? 为什么前者会导致 kafka group rebalancing?
比较测试条件差异,初步猜想是使用相同的group id 导致.
传入3个topic并分别让3个消费者使用不同的groupid消费后,发现消费正常,问题解决.
搜索资料,发现类似情况,参考
https://www.gonever.com/post/108
TODO:分析zookeeper数据和kakfa源码.