卡夫卡消费群重新平衡

时间:2020-03-19 08:19:32

标签: apache-kafka kafka-consumer-api

我正在使用kafka消费者组管理来处理我的消息。

我的邮件的处理时间互不相同。因此,我将最大记录间隔为20,将最大轮询间隔设置为20分钟。我正在使用5个分区和5个使用者实例,这些实例的默认配置值不同于上述两个。

但是我仍然间歇性地收到以下错误:

[Consumer clientId=consumer-3, groupId=amc_dashboard_analytics] Attempt to heartbeat failed since group is rebalancing

理解是,除非达到消费者配置文档中所写的最大轮询间隔之前未调用轮询,否则不会发生重新平衡。但是对我而言,重新平衡仅发生在20分钟之前。

在运行了几个小时之后,所有分配的消费者都只是说“由于组正在重新平衡而导致心跳失败”,并且不再再次加入(理想情况下应该再次加入)。

我在这里想念什么吗?任何线索都将有所帮助。

1 个答案:

答案 0 :(得分:0)

重新平衡的另一个原因是session.timeout.ms到期而没有发送心跳信号。您可以考虑增加此使用者配置。

来自Kafka文档:

heartbeat.interval.ms :两次心跳之间的预期时间 使用Kafka的群组管理工具时的消费者协调员。 心跳用于确保消费者的会话保持活动状态 并在新消费者加入或退出时促进平衡 组。该值必须设置为低于session.timeout.ms,但是 通常应将其设置为不大于该值的1/3。有可能 调整甚至更低以控制正常的预期时间 重新平衡。 (默认值:3000)


session.timeout.ms :用于检测客户端故障的超时时间 使用Kafka的群组管理工具。客户端定期发送 向经纪人表明其活力的心跳。如果没有心跳 在此会话期满之前由经纪人收到 超时,则代理会将该客户端从组中删除, 开始重新平衡。请注意,该值必须在允许范围内 代理配置中配置的范围 group.min.session.timeout.ms和group.max.session.timeout.ms。 (默认值:10000)

您可以检查此link以获得更多信息。

即使通过单独的线程以固定的时间间隔发送心跳,在某些情况下,心跳也无法在session.timeout.ms中发送给代理。这种情况的一些可能原因是:

  • 网络问题
  • 在消费者或经纪人方面停止世界垃圾收集