Kafka消费者投票行为和秩序

问题描述 投票:1回答:1

让我们说,我的消费者从一个经纪人有多个主题和每个主题有多个分区的投票。我在同一个消费者组中总共有5个消费者。如果我的每个消费者都进行轮询,那么返回的数据顺序是什么?

例如我的第一个消费者被分配到以下分区。

topicA -分区0

专题A-分区1

主题B - 分区0

专题C----分区 3

topicD----分区 5

我的问题是,在单次投票中,我是否会收到该主题分区的所有可用消息,然后再依次进入下一个主题分区? 例如,在单次投票循环中,我收到的消息是这样的。

在一个投票循环中,我按顺序收到了这个...

行为A

topicA--分区1--收到来自偏移量1000...2000的信息。

topicA - 分区0 - 收到来自偏移量500...700的信息

topicB - 分区0 - 收到来自偏移量100...150的消息

topicC - 分区3 - 收到来自偏移量5500...6000的信息。

topicD--分区5--收到来自偏移量0...100的信息。

或在那单1个投票循环中,是否可以收到这个消息顺序?那同样分区和主题将被拆分(topicA分区1,topicA-分区0,topicC-分区3)。

行为B

topicA--分区1--收到来自偏移量1000...1499的信息。

topicA--分区0--收到来自偏移量500...520的信息。

topicA--分区1--收到来自偏移量1500...2000的信息。

topicB - 分区0 - 收到来自偏移量100...150的消息 - 与行为A相同,没有分割。

topicC - 分区3 - 收到来自偏移量5500...5799的信息。

topicA - 分区0 - 收到来自偏移量521...700的信息

topicD - 分区5 - 收到来自偏移量0...100的消息 - 与行为A相同,没有拆分

topicC - 分区3 - 收到来自偏移量5800...6000的信息。

我想知道这个行为,它是否能保证和一致地成为行为A或B,或者可以配置。我搜索了一下,但在文档或之前的问题中都没有找到。我自己也测试过,似乎总是行为A,但我想确认一下。谢谢,并提前感谢任何帮助。

java apache-kafka kafka-consumer-api
1个回答
0
投票

不幸的是,有了多个分区,消息的顺序就不会被保留。https:/kafka.apache.org082documentation :

Kafka只提供一个分区内的消息的总排序,而不是一个主题中不同分区之间的排序。每个分区的排序与按键分割数据的能力相结合,对于大多数应用来说已经足够了。然而,如果您需要对消息进行总的排序,可以通过一个只有一个分区的主题来实现,尽管这将意味着只有一个消费者进程。

© www.soinside.com 2019 - 2024. All rights reserved.