gpt4 book ai didi

apache-kafka - Kafka消费者再平衡算法

转载 作者:行者123 更新时间:2023-12-01 23:43:29 24 4
gpt4 key购买 nike

有人可以告诉我 Kafka 消费者的再平衡算法是什么吗?我想了解分区计数和消费者线程如何影响这一点。

谢谢,

最佳答案

好的,目前有 2 种重新平衡算法 - RangeRoundRobin 。它们也称为分区分配策略。

为了简单起见,假设我们有一个主题 T1有 10 个分区,我们还有 2 个具有不同配置的消费者(为了使示例更清晰)- C1num.streams设置为1C2num.streams设置为2 .

以下是 Range 的工作方式策略:

范围按数字顺序排列可用分区,并按字典顺序排列消费者线程。所以在我们的例子中,分区的顺序将是 0, 1, 2, 3, 4, 5, 6, 7, 8, 9消费者线程的顺序将是 C1-0, C2-0, C2-1 。然后将分区数除以消费者线程数,以确定每个消费者线程应拥有多少个分区。在我们的例子中,它并没有平分,所以线程 C1-0将获得一个额外的分区。最终的分区分配如下所示:

C1-0获取分区0, 1, 2, 3
C2-0获取分区4, 5, 6
C2-1获取分区7, 8, 9

如果有 11 个分区,这些使用者的分区分配将会发生一些变化:

C1-0将得到分区 0, 1, 2, 3
C2-0将得到分区 4, 5, 6, 7
C2-1将得到分区 8, 9, 10

就是这样。

相同的配置不适用于 RoundRobin策略,因为它需要平等num.streams在订阅该主题的所有消费者中,我们假设两个消费者都有 num.streams现在设置为2。与 Range 相比的一个主要区别这里的策略是你无法预测重新平衡之前的分配是什么。以下是 RoundRobin 的使用方式策略:

首先,在实际分配之前必须满足两个条件:

a)每个主题在消费者实例中都有相同数量的流(这就是为什么我上面提到每个消费者的线程数量不同是行不通的)
b) 组内每个消费者实例的订阅主题集都是相同的(我们这里有一个主题,所以现在这不是问题)。

当这两个条件得到验证时 topic-partition对按照 hashcode 进行排序,以减少一个主题的所有分区都分配给一个消费者的可能性(如果有多个主题要消费)。

最后,所有 topic-partition对以循环方式分配给可用的消费者线程。例如,如果我们的主题分区最终会像这样排序:T1-5, T1-3, T1-0, T1-8, T1-2, T1-1, T1-4, T1-7, T1-6, T1-9消费者线程是 C1-0, C1-1, C2-0, C2-1那么作业将是这样的:

T1-5转到C1-0
T1-3转到C1-1
T1-0转到C2-0
T1-8转到C2-1
此时,不再剩下消费者线程,但仍然有更多主题分区,因此消费者线程的迭代重新开始:
T1-2转到C1-0
T1-1转到C1-1
T1-4转到C2-0
T1-7转到C2-1
再说一遍:
T1-6转到C1-0
T1-9转到C1-1

此时,所有主题分区均已分配,并且每个使用者线程的分区数量几乎相等。

希望这有帮助。

关于apache-kafka - Kafka消费者再平衡算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28574054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com