場景: 在一個線程內,使用相同的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源碼.