消费者再平衡如何在卡夫卡工作?

时间:2014-11-28 04:01:54

标签: message-queue producer-consumer apache-kafka kafka-consumer-api

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

2 个答案:

答案 0 :(得分:41)

取决于“阻止”的含义。如果您的意思是“触发重新平衡时现有连接已关闭”,则答案为是。不幸的是,目前Kafka的再平衡算法并不完美。

以下是消费者再平衡期间发生的事情。

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

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

同时consumer2也运行分区分配算法,并尝试在Zookeeper中声明其分区。仅当consumer1释放这些分区的所有权时,声明才会成功。声明成功时consumer2开始抓取,或者如果在指定的重试次数内未能声明分区,则会获得rebalance failed after n retries例外。

正如您所注意到的那样,不仅仅关闭连接并释放分区consumer1的所有权不再拥有,它会不必要地关闭所有连接,并仅使用较少量的分区重新启动。添加分区的相同故事(当我们通过通配符过滤器和新主题消费时) - 所有连接都关闭然后再次打开而不是仅仅打开新的连接。

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

答案 1 :(得分:1)

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

有关更多信息,请参见:From Eager to Smarter in Apache Kafka Consumer Rebalances