记录一下线上卡夫卡rebalanced的原因,以及排查过程,我们线上使用的版本是0.10.1.1,rebalanced就是重平衡,触发重平衡的原因如下:
- 消费者组内成员发生变更,这个变更包括了增加和减少消费者。注意这里的减少有很大的可能是被动的,就是某个消费者崩溃退出了
- 主题的分区数发生变更,kafka目前只支持增加分区,当增加的时候就会触发重平衡
- 订阅的主题发生变化,当消费者组使用正则表达式订阅主题,而恰好又新建了对应的主题,就会触发重平衡
通过卡夫卡的线程日志,找到了卡夫卡源码中对应的心跳线程,发现是心跳线程HeartbeatThread中的【kafka-coordinator-heartbeat-thread】,只有协调者死了的时候,才会打印这个日志Marking the coordinator {} dead for group
于是我开始找,是什么地方导致这个协调者死了,追踪源码,发现卡夫卡心跳线程,这里,session超时了,所以会让卡夫卡认为消费者死掉了,触发了rebalanced
找到原因了,那么就可以解决了,通过修改session.timeout.ms来解决超时问题就可以,这个只是我这里的问题解决了,旧版本是在主线程里面心跳的,0.10.1.1改为线程跑了,找了半天,淦