当一个新的消费者/经纪人加入或退出时,Kafka会触发一个重新平衡操作。Kafka正在重新平衡一次封锁行动。Kafka的消费者是否在进行再平衡行动时受阻?
gj3fmq9x1#
取决于你所说的“封锁”是什么意思。如果您的意思是“当触发重新平衡时,现有连接是否关闭”,那么答案是“是”。不幸的是,目前Kafka的再平衡算法并不完善。以下是消费者再平衡过程中发生的事情。假设我们有一个包含10个分区(0-9)和一个使用者(让我们命名)的主题 consumer1 )消耗它。当第二个消费者出现时( consumer2 )重新平衡任务会触发这两个任务( consumer1 获取事件, consumer2 进行初始再平衡)。现在 consumer1 关闭所有现有的连接(甚至那些即将重新打开的连接),并释放zookeeper中所有10个分区的分区所有权。然后运行分区分配算法,决定应该声明哪些分区,并再次声明zookeeper中的分区所有权。如果索赔成功 consumer1 开始取他的新分区。同时 consumer2 同时运行分区分配算法,并尝试在zookeeper中声明他的分区。只有当 consumer1 释放这些分区的所有权。当索赔成功时 consumer2 开始获取,或者如果它在给定的重试次数内无法声明分区,则会得到一个 rebalance failed after n retries 例外。正如您所注意到的,不再只是关闭连接和释放分区的所有权 consumer1 不再拥有,它会不必要地关闭所有连接,并用较少的分区重新启动。添加分区的情况也一样(当我们使用通配符过滤器并出现新主题时)-所有连接都关闭,然后再次打开,而不是只打开新的连接。所以我希望这能回答你的问题-当重新平衡开始时,抓取停止。
consumer1
consumer2
rebalance failed after n retries
nwnhqdif2#
上述公认的回答(来自serejja)过去是正确的。Kafka从2.3版(发布日期2019年6月)及更高版本开始实施“增量合作再平衡”。因此,现在没有必要让所有的消费者停止处理(stop the world event)来重新平衡fe组的工作。当新用户出现在组中或某个用户脱机时。有关更多信息,请参阅:在ApacheKafka消费者再平衡中从渴望变为聪明
2条答案
按热度按时间gj3fmq9x1#
取决于你所说的“封锁”是什么意思。如果您的意思是“当触发重新平衡时,现有连接是否关闭”,那么答案是“是”。不幸的是,目前Kafka的再平衡算法并不完善。
以下是消费者再平衡过程中发生的事情。
假设我们有一个包含10个分区(0-9)和一个使用者(让我们命名)的主题
consumer1
)消耗它。当第二个消费者出现时(consumer2
)重新平衡任务会触发这两个任务(consumer1
获取事件,consumer2
进行初始再平衡)。现在consumer1
关闭所有现有的连接(甚至那些即将重新打开的连接),并释放zookeeper中所有10个分区的分区所有权。然后运行分区分配算法,决定应该声明哪些分区,并再次声明zookeeper中的分区所有权。如果索赔成功
consumer1
开始取他的新分区。同时
consumer2
同时运行分区分配算法,并尝试在zookeeper中声明他的分区。只有当consumer1
释放这些分区的所有权。当索赔成功时consumer2
开始获取,或者如果它在给定的重试次数内无法声明分区,则会得到一个rebalance failed after n retries
例外。正如您所注意到的,不再只是关闭连接和释放分区的所有权
consumer1
不再拥有,它会不必要地关闭所有连接,并用较少的分区重新启动。添加分区的情况也一样(当我们使用通配符过滤器并出现新主题时)-所有连接都关闭,然后再次打开,而不是只打开新的连接。所以我希望这能回答你的问题-当重新平衡开始时,抓取停止。
nwnhqdif2#
上述公认的回答(来自serejja)过去是正确的。Kafka从2.3版(发布日期2019年6月)及更高版本开始实施“增量合作再平衡”。因此,现在没有必要让所有的消费者停止处理(stop the world event)来重新平衡fe组的工作。当新用户出现在组中或某个用户脱机时。
有关更多信息,请参阅:在ApacheKafka消费者再平衡中从渴望变为聪明