【发布时间】:2020-06-30 08:35:05
【问题描述】:
我正在使用 kafka 消费者组管理来处理我的消息。
我的消息的处理时间各不相同。因此,我将最大轮询间隔设置为 20 分钟,最大记录为 20。我使用 5 个分区和 5 个消费者实例,默认配置值与上述两个不同。
但我仍然间歇性地收到以下错误:
[Consumer clientId=consumer-3, groupId=amc_dashboard_analytics] Attempt to heartbeat failed since group is rebalancing
理解是,除非在达到消费者配置文档中所写的最大轮询间隔之前未调用轮询,否则不会发生重新平衡。但对我来说,重新平衡只发生在 20 分钟之前。
同样经过几个小时的运行,所有分配的消费者只是离开说“尝试心跳失败,因为组正在重新平衡”并且不再加入(理想情况下应该再次加入)。
我在这里遗漏了什么吗?任何线索都会有所帮助。
【问题讨论】:
-
心跳是检查所有消费者是否仍在运行的基本机制。如果由于组正在重新平衡而导致心跳失败,
-
这表明您的消费者实例发送下一个心跳的时间过长,被认为已死,因此触发了重新平衡
-
@DeV 但是为什么发送心跳需要时间。我读到的是消费者继续在与最大轮询间隔处理线程分开的并行线程中发送心跳。
-
消费者加入或离开群组时也会发生重新平衡。
-
@Nobita 我添加了一些无法向代理发送心跳的可能原因。你可以看看我的回答。
标签: apache-kafka kafka-consumer-api