可能是消息队列Kafka版开源版本过低或者Consumer没有独立线程维持心跳。

问题现象

消费客户端频繁出现Rebalance。

可能原因

可能导致故障的原因包括:

  • 开源版本为0.10的消息队列Kafka版有一定的概率会触发频繁Rebalance。
  • 消息队列Kafka版的Consumer没有独立线程维持心跳,而是把心跳维持与poll接口耦合在一起。其结果就是,如果用户消费出现卡顿,就会导致Consumer心跳超时,引发rebalance。
    • session.timeout.ms:心跳超时时间(可以由客户端自行设置)。
    • max.poll.records:每次poll返回的最大消息数量。

解决方案

  1. 检查消息队列Kafka版实例的开源版本。
    如果您的实例的开源版本是0.10,建议您将实例版本升级到稳定的0.10.2。详情请参见升级实例服务版本
  2. 调整参数。
    • session.timeout.ms:建议设置成25s,不超过30s。

    • max.poll.records:要小于(最好是远小于)“单个线程每秒消费的条数”x“消费线程的个数”x“session.timeout的秒数”。

  3. 提高客户端消费速度。