当前位置: 首页 > 知识库问答 >
问题:

Kafka再平衡算法是否平衡了主题?

巫马越彬
2023-03-14

Kafka再平衡算法是否适用于不同主题?

假设我有5个主题,每个主题都有10个分区,同一消费者组中有20个消费者应用程序实例,每个实例都订阅了这5个主题。

Kafka会尝试在20个实例中平衡50个分区吗?

还是它只在一个主题内保持平衡,因此10个第一个实例可能(或可能)接收所有50个分区,而其他10个实例可能保持空闲?

我知道,在过去,Kafka并没有在不同的主题之间取得平衡,但现在的版本呢?

共有2个答案

萧波峻
2023-03-14

您可以选择RoundRobin作为分区赋值器,而不是默认的范围赋值,以获取所有实例。

范围分配:

Range assignor处理每个主题,它将根据消费者的总数将分区划分为几个范围。然后,所有消费者都将按照字典顺序进行排序,每个消费者将进行一系列的分区。

对于您的情况,每个主题有10个分区,总共有20个消费者。然后协调器将为前10个消费者中的每一个分配1个分区。在这种情况下,您将得到10个空闲消费者。

每个主题都会发生同样的事情,所以你会看到前10个消费者被分配了5个分区(每个主题1个),其他10个将处于空闲状态。

循环分配:

Round Robin assignor将列出消费者组订阅的所有主题的所有分区。每个消费者将轮流使用分区。

对于您的情况,coordinator将列出所有分区,如:

t1p1, t1p2, t1p3 ... t5p9, t5p10

所有20个消费者将按此顺序进行分区,因此最终您将获得:

Consumer1: t1p1, t3p1, t5p1
Consumer2: t1p2, t3p2, t5p2
.
.
.
Consumer 10: t2p10, t4p10

它可能比范围赋值器更平衡。

濮阳鸿祯
2023-03-14

消费者实例到分区的分配取决于消费者配置分区。分配策略。它的默认值是class org。阿帕奇。Kafka。客户。消费者RangeSignator但是你也可以选择RoundRobinAsignatorStickyAssignator,或者你甚至可以通过扩展抽象类AbstractPartitionAssignator来建立自己的策略。

我认为就你的情况而言,循环分配策略将导致更平衡的分配。战略范围和循环赛之间的差异如下图所示。

在您的情况下(每个主题有10个分区和20个消费者实例),Range策略将导致10个实例空闲。然而,使用RoundRobin策略将使所有实例保持忙碌,因为它遵循以下原则:分区将均匀分布,分配之间的最大差异应该是一个分区。

请注意,消费者对主题分区的分配不同于重新平衡。当

>

新的消费者加入了ConsumerGroup

消费者更改其主题订阅

订阅主题中的更改,例如分区的增加/减少。

在重新平衡期间,整个消费组的消费将暂停,并且根据您选择的策略再次进行分配。

 类似资料:
  • 有人能告诉我Kafka消费者的再平衡算法是什么吗?我想了解分区计数和消费者线程是如何影响这一点的。 非常感谢。

  • 当我们的kafka主题中有多个分区时,分区重新平衡是一件常见的事情吗? 这并不一定意味着我们的应用程序存在延迟或问题? 我一直看到分区被撤销和重新分配的日志。

  • 我知道在你的流中的任何时间点都可能发生再平衡。当它发生时,由于没有提交给定偏移量的最新偏移量,可能会发生事件的重新处理。 Kafka流是否允许在重新平衡发生之前完成任何飞行中处理?我的意思是,你的应用程序正在消耗一个记录(在你的过程方法内部),发生一个再平衡事件。该处理是否立即中止或允许处理方法完成? 一个具体的例子是 最后一次计算是否会在状态存储中结束并转发到接收器主题?因此,这意味着当重新平衡

  • 我有4个单一分区和应用程序的三个实例的主题。我试图通过编写一个自定义的PartitionGrouper来实现可伸缩性,它将创建如下3个任务: 第一个实例-topic1,分区0,topic4,分区0 第二个实例-主题2,分区0 第三实例-桌面3,分区0 我将NUM_STANDBY_REPLICAS_CONFIG配置为1,因为它将在本地维护状态(也可以消除invalidstatestore异常)。 上

  • 我用Kafka-斯特里姆齐算子在库伯内特斯上运行Kafka。我正在使用增量粘性再平衡策略,通过以下配置我的消费者: 每次我在我的消费者组中缩放消费者时,该组中的所有现有消费者都会生成以下异常 线程“main”组织中出现异常。阿帕奇。Kafka。常见的错误。RebalanceInProgressException:由于使用者正在进行自动分区分配的重新平衡,因此无法完成偏移量提交。您可以通过调用pol

  • 在消费者之间重新平衡分区的代价有多大。我期待着每隔几秒钟就有一个新的消费者结束或加入同一个消费者群体。所以我只想知道一个再平衡操作的开销和延迟。 假设使用者C1具有分配给它的分区P1、P2、P3,并且它正在处理来自分区P1的消息M1。现在消费者C2加入了这个群体。C1和C2之间的分区是如何划分的。是否有可能拒绝C1的(可能需要一些时间将其消息提交给Kafka)对M1的提交,而M1将被视为一个新的消