同一主题的 2 个 kafka 消费者的分区结构

Partition structure for 2 kafka consumers on same topic

如果我创建

这 2 个 Consumer 实例(在 diff group Id)是否具有相似的分区结构,或者可能不同?

也就是说,如果我这样做 .assignment() 我会在两个

得到相同的结果吗

我的实际问题陈述,我将在其中使用此验证

在我的应用程序中,我在特定状态下获得代理的偏移量(这是通过我的第一个 kafka 消费者对象完成的)。

稍后,我将创建第二个 kafka 消费者对象,并使用它来迭代主题,从较早的偏移量中寻找。

(所以如果问题中提到的假设是错误的,我的逻辑就会失败)

让我把这个弄清楚。

Kafka有主题,消费者可以订阅。每个主题都有分区(您可以在创建它们时定义)。当给定主题有多个分区时,每个主题分区都会分配给一个消费者组中的一个消费者。如果您的消费者数量多于分区数量,那么这些额外的消费者就会闲置。

如果你想让你的两个Kafka消费者分别消费消息,你必须将它们添加到两个不同的消费者组中。如果您在消费者组中有一个 Kafka 消费者,则所有分区都分配给该消费者。

所以如果你想让两个消费者获得相同的结果,你可以将他们添加到两个不同的消费者组中。

假设您在创建消费者对象后订阅的主题中有 10 个分区。当您创建第一个消费者对象并开始执行poll操作时,这10个分区将全部分配给这个消费者对象。

当您创建第二个消费者对象时,消费者组协调器会意识到其他消费者已加入该组,因此会触发重新平衡。根据使用的分区分配策略,一些分区将分配给第二个消费者。在默认情况下,分区的 5 个将从第一个消费者那里获取并分配给第二个消费者。现在每个消费者都有 5 个分区。

因此分区结构会在创建第二个消费者和第二个消费者的轮询操作后发生变化

编辑 1: 如果您对两个消费者都执行 .assignment() ,则在您开始从两个消费者消费之后。你会得到相同的结果。

EDIT2::如果您有两个不同的消费者组 ID,并且两个组中只有 1 个消费者,那么是的,分区结构将是相同的。

如果一个consumer group下有多个consumer,但是他们在consumer group下的consumer个数相同(比如每个consumer group有3个consumer),并且使用的consumer partition strategy也一样,那么分区结构将相同。

如果你在两个组中都有多个消费者,但每个消费者组中的消费者数量不同(比如第一个消费者组有 2 个消费者,第二个消费者组有 3 个消费者),那么你可以猜到分区结构是不同。