我正在使用kafka消费者组管理来处理我的消息。
我的邮件的处理时间互不相同。因此,我将最大记录间隔为20,将最大轮询间隔设置为20分钟。我正在使用5个分区和5个使用者实例,这些实例的默认配置值不同于上述两个。
但是我仍然间歇性地收到以下错误:
[Consumer clientId=consumer-3, groupId=amc_dashboard_analytics] Attempt to heartbeat failed since group is rebalancing
理解是,除非达到消费者配置文档中所写的最大轮询间隔之前未调用轮询,否则不会发生重新平衡。但是对我而言,重新平衡仅发生在20分钟之前。
在运行了几个小时之后,所有分配的消费者都只是说“由于组正在重新平衡而导致心跳失败”,并且不再再次加入(理想情况下应该再次加入)。
我在这里想念什么吗?任何线索都将有所帮助。
答案 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
中发送给代理。这种情况的一些可能原因是: