36

当添加或关闭新的消费者/代理时,Kafka 会触发重新平衡操作。Kafka Rebalancing 是阻塞操作吗?重新平衡操作正在进行时,Kafka 消费者是否被阻塞?

4

2 回答 2

52

取决于您所说的“被阻止”是什么意思。如果您的意思是“触发重新平衡时是否关闭了现有连接”,那么答案是肯定的。不幸的是,当前 Kafka 的再平衡算法并不完美。

这是消费者重新平衡期间发生的事情。

假设我们有一个包含 10 个分区 (0-9) 的主题,并且有一个消费者(让我们命名它consumer1)使用它。当第二个消费者出现时(consumer2),重新平衡任务为他们两个触发(consumer1获取一个事件,consumer2进行初始重新平衡)。现在consumer1关闭所有现有连接(即使是那些即将重新打开的连接)并释放 Zookeeper 中所有 10 个分区的分区所有权。

然后它运行分区分配算法并决定应该声明哪些分区并再次在 Zookeeper 中声明分区所有权。如果声明成功,则consumer1开始获取他的新分区。

同时consumer2运行分区分配算法,并尝试在 Zookeeper 中声明他的分区。consumer1只有在释放这些分区的所有权时,声明才会成功。当声明成功consumer2开始获取时,或者如果它未能在给定的重试次数内声明分区,则会出现rebalance failed after n retries异常。

正如您所注意到的,它不仅关闭连接并释放consumer1不再拥有的分区的所有权,还不必要地关闭了他的所有连接并仅使用较少数量的分区重新启动。添加分区的情况相同(当我们使用通配符过滤器并出现新主题时) - 所有连接都已关闭然后再次打开,而不是仅打开新连接。

所以我希望这能回答你的问题 - 重新平衡开始时获取停止。

于 2014-12-02T12:25:30.007 回答
4

过去接受的回复(来自 serejja)是正确的。Kafka从 2.3 版(发布日期 2019 年 6 月)及更高版本开始实施“增量合作再平衡” 。所以现在不需要所有消费者停止处理(“停止世界事件”)来重新平衡组 fe 中的工作。当新的消费者出现在组中或某些消费者下线时。

有关更多信息,请参阅:Apache Kafka 消费者再平衡中的从渴望到更聪明

于 2020-10-07T09:48:16.953 回答