消费者再平衡如何在 Kafka 中工作?
Posted
技术标签:
【中文标题】消费者再平衡如何在 Kafka 中工作?【英文标题】:How does consumer rebalancing work in Kafka? 【发布时间】:2015-01-26 16:50:42 【问题描述】:当添加或关闭新的消费者/代理时,Kafka 会触发重新平衡操作。 Kafka Rebalancing 是阻塞操作吗?重新平衡操作正在进行时,Kafka 消费者是否被阻塞?
【问题讨论】:
【参考方案1】:过去接受的回复(来自 serejja)是正确的。 Kafka 从 2.3 版(发布日期 2019 年 6 月)及更高版本开始实施“增量合作再平衡”。所以现在不需要所有消费者停止处理(“停止世界事件”)来重新平衡组 fe 中的工作。当新的消费者出现在群组中或某些消费者下线时。
欲了解更多信息,请参阅:From Eager to Smarter in Apache Kafka Consumer Rebalances
【讨论】:
【参考方案2】:取决于您所说的“被阻止”是什么意思。如果您的意思是“触发重新平衡时是否关闭了现有连接”,那么答案是肯定的。遗憾的是,当前 Kafka 的再平衡算法并不完善。
这是消费者重新平衡期间发生的事情。
假设我们有一个包含 10 个分区 (0-9) 的主题,并且有一个消费者(我们将其命名为 consumer1
)正在使用它。当第二个消费者出现 (consumer2
) 时,他们都会触发重新平衡任务(consumer1
收到一个事件,consumer2
进行初始重新平衡)。现在consumer1
关闭所有现有连接(即使是那些即将重新打开的连接)并释放 Zookeeper 中所有 10 个分区的分区所有权。
然后它运行分区分配算法并决定应该声明哪些分区并再次在 Zookeeper 中声明分区所有权。如果声明成功,consumer1
开始获取他的新分区。
同时consumer2
也运行分区分配算法并尝试在 Zookeeper 中声明他的分区。只有当consumer1
释放这些分区的所有权时,声明才会成功。当声明成功时,consumer2
开始获取,或者如果在给定的重试次数内未能声明分区,您将收到 rebalance failed after n retries
异常。
正如您所注意到的,它不仅关闭连接并释放consumer1
不再拥有的分区的所有权,还不必要地关闭了他的所有连接并仅使用较少数量的分区重新启动。添加分区的情况相同(当我们使用通配符过滤器并出现新主题时) - 所有连接都已关闭然后再次打开,而不是仅打开新连接。
所以我希望这能回答你的问题 - 重新平衡开始时提取停止。
【讨论】:
非常详细的答案。你能解释一下为什么当有一个包含 3 个分区和一个消费者的主题时,为什么当我重新启动消费者时,消费者组需要大约一个小时才能重新平衡?以上是关于消费者再平衡如何在 Kafka 中工作?的主要内容,如果未能解决你的问题,请参考以下文章
了解同一消费者组内但订阅不同的 Kafka 消费者再平衡的性质
Kafka 消费者之消费方式工作流程消费者案例(订阅主题订阅分区)消费者组案例分区的分配以及再平衡offset 位移消费者事务数据积压(消费者如何提高吞吐量)