gpt4 book ai didi

apache-kafka - 消费者 'group_name' 组永远重新平衡

转载 作者:行者123 更新时间:2023-12-05 03:51:40 25 4
gpt4 key购买 nike

我正在使用 Kafka:2.11-1.0.1。该应用程序包含主题“X”的并发度为 5 且分区数为 5 的消费者。

当应用程序重新启动并且消息在分区分配之前发布到主题“X”时,主题“X”的 5 个消费者找到组协调器并向组协调器发送加入组请求。期望得到组协调器的响应,但没有收到响应。

我检查了 Kafka 服务器日志,但我找不到相关日志,发现 DEBUG 日志级别。

当我运行 describe consumer group 命令时,会进行以下观察:

  1. 消费者群体正在重新平衡
  2. 有些滞后的老消费者
  3. 具有一些随机名称的新消费者。随着时间的推移,新的消费者数量不断增加。

在主题“X”上发布了新消息,但消费者未收到。

heartbeat 和 session.time.out 设置为默认值。

如果在主题“X”及其消费者的分区分配之前发布消息,则会出现此问题。

我的疑问是:为什么重新平衡没有完成,新消费者开始消费新产生的消息?

最佳答案

应用程序在消费者组中有以下消费者

  • 消费者 A 收听主题 1。 Topic1 有 1 个分区。max.poll.interval.time.ms=这个消费者 4 小时。
  • 消费者 B 收听主题 2。 Topic2 有 5 个分区。消费者 B 并发 = 5。max.poll.interval.time.ms=此消费者 1 小时。

应用程序重启时发生的情况以及其中一个主题是否已发布消息

  • 当应用程序重新启动一个消费者实例 (consumerA1)创建并订阅 topic1。 ConsumerA1找到组坐标(GC)并发送加入组请求。
  • ConsumerA1 得到 GC 的响应并成为领导者。直到这一步没有其他消费者初始化。
  • ConsumerA1 分配分区并向 GC 发送 SyncGroup 请求。新的作业生成发生。这样第一次rebalance就完成了。
  • topic1 上的消息已经发布,consumerA1 获取这条消息并开始处理。完成此消息的处理重要的时间。 (比如 2 小时)
  • 现在有 5 个消费者实例一一初始化,并且都订阅了 topic2。这些消费者找到 GC 并发送加入组请求。但 GC 不回应他们。
  • 当 consumerA1 向 GC 发送心跳时,GC 响应重新平衡正在进行,但 consumerA1 不会撤销分区,因为它正在处理消息。
  • 根据再平衡协议(protocol)(Nice article on rebalancing),GC 等待所有消费者发送加入组请求。在这种情况下,GC 等待来自 consumerA1 的加入组请求。最长等待时间为 max.poll.interval.time.ms,即在本例中为 4 小时。

根本原因:

Group Coordinator 在应用程序重启后没有等待所有消费者初始化,因此首先发生了不必要的重新平衡,因此 consumerA1 从分区中获取消息并开始处理它。

解决方案:为了避免这种不必要的初始重新平衡,kafka 提供了一种配置,其中组协调器等待消费者加入新的消费者组。 Documentation

group.initial.rebalance.delay.ms

检查了我的 kafka server.properties ,它被设置为 0。尝试使用默认值,即 3 秒。避免了初始重新平衡,GC 在应用程序重新启动时等待 3 秒,此时所有其他消费者都已初始化。所有消费者都发送了加入组请求,因为所有 GC 都收到了来自所有消费者的请求。 GC 立即响应,重新平衡成功进行并完成。

关于apache-kafka - 消费者 'group_name' 组永远重新平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62718765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com