可能是消息队列Kafka版客户端版本过低或者Consumer没有独立线程维持心跳。
问题现象
使用消息队列Kafka版时,消费客户端频繁出现Rebalance。
可能原因
可能导致故障的原因包括:
- v0.10.2之前版本的客户端:Consumer没有独立线程维持心跳,而是把心跳维持与poll接口耦合在一起。其结果就是,如果用户消费出现卡顿,就会导致Consumer心跳超时,引发Rebalance。
- v0.10.2及之后版本的客户端:如果消费时间过慢,超过一定时间(
max.poll.interval.ms
设置的值,默认5分钟)未进行poll拉取消息,则会导致客户端主动离开队列,而引发Rebalance。
解决方案
首先您需要了解以下几点信息:
session.timeout.ms
:心跳超时时间(可以由客户端自行设置)。max.poll.records
:每次poll返回的最大消息数量。- v0.10.2之前版本的客户端:心跳是通过poll接口来实现的,没有内置的独立线程。
- v0.10.2及之后版本的客户端:为了防止客户端长时间不进行消费,Kafka客户端在v0.10.2及之后的版本中引入了
max.poll.interval.ms
配置参数。