Kafka分区再平衡

3
假设某个消费者组有5个消费者,并订阅了一个包含10个分区的主题。 如果该主题现在增加了10个分区,则会触发重新平衡。 为什么 Kafka 要重新分配之前已分配的分区,而不是只将新创建的分区分配给消费者组呢?
1个回答

3
由于Kafka分区分配器的工作方式,消费者重新平衡总是一个“停止世界”的操作,在此期间,所有分区首先从消费者中释放,然后被重新分配。
话虽如此,有StickyAssignor,它试图保留先前的分配,而默认的分配器RangeAssignor不提供任何保证。
要使用StickyAssignor,请在您的消费者配置中将partition.assignment.strategy设置为org.apache.kafka.clients.consumer.StickyAssignor

在查看 StickAssignor JavaDoc、TheOldRebalanceListener 和 TheNewRebalanceListener 时,似乎仍然会从消费者中撤销现有分区。不过当可能的时候,它们会重新分配给同样的消费者。 - Ronak Kalyani
是的,正如我所说,目前所有的分配器在重新分配之前都会撤销所有的分区。有一个正在进行中的 KIP 旨在改善这种情况(https://cwiki.apache.org/confluence/display/KAFKA/KIP-345%3A+Introduce+static+membership+protocol+to+reduce+consumer+rebalances),但在那之前,StickyAssignor 可能是您最好的选择。 - Mickael Maison

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接