使用消息队列Kafka版时消费客户端频繁出现Rebalance

使用消息队列Kafka版时消费客户端频繁出现Rebalance

更新时间:2020-07-22 15:01:52

问题描述

使用消息队列Kafka版时,消费客户端(Consumer)频繁出现Rebalance。

问题原因

可能导致故障的部分原因如下:

  • 开源版本为v0.10的消息队列Kafka版有一定的概率会触发频繁Rebalance。
  • 消息队列Kafka版的Consumer没有独立线程维持心跳,而是把心跳维持与poll接口耦合在一起。其结果就是,如果用户消费出现卡顿,就会导致Consumer心跳超时,引发Rebalance。

解决方案

 首先您需要了解以下几点信息:

  • session.timeout.ms:配置控制心跳的超时时间,可以由客户端自行设置。
  • max.poll.records:控制每次poll返回的最大消息数量。
  • 消息队列Kafka版的心跳是通过poll接口来实现的,没有内置的独立线程。

 

为了避免心跳超时,引发Rebalance,请参考以下步骤进行调整:

  1. 检查消息队列Kafka版实例的开源版本。如果实例的开源版本是v0.10,建议您将实例版本升级到稳定的v0.10.2。详情请参见升级实例服务版本
  2. 参考以下说明调整参数值:
    • session.timeout.ms:适当提高该参数值,但不要超过30s,建议设置为25s。
    • max.poll.records:降低该参数值,建议远远小于<单个线程每秒消费的条数> * <消费线程的个数> * <session.timeout.ms>的积。
  3. 尽量提高客户端的消费速度。

适用于

  • 消息队列Kafka版

如果您的问题仍未解决,您可以在阿里云社区免费咨询,或提交工单联系阿里云技术支持。