【问题标题】:Kafka consumer poll behavior and orderKafka消费者投票行为和顺序
【发布时间】:2020-09-13 02:26:15
【问题描述】:

假设我的消费者正在从具有多个主题且每个主题具有多个分区的代理进行轮询。我在同一个消费组中总共有 5 个消费者。如果我的每个消费者都进行民意调查,返回的数据顺序是什么?

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

topicA - 分区 0

topicA - 分区 1

topicB - 分区 0

topicC - 分区 3

topicD - 分区 5

我的问题是,在单次 1 轮询中,我会在按顺序移动到下一个主题/分区之前收到来自该主题/分区的所有可用消息吗?含义例如:

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

行为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】:

不幸的是,在多个分区中,消息的顺序不会被保留。 来自 Apache 文档https://kafka.apache.org/082/documentation/

Kafka 仅提供分区内消息的总顺序, 不在主题的不同分区之间。按分区排序 结合按键对数据进行分区的能力足以 大多数应用程序。但是,如果您需要对消息进行总排序 这可以通过只有一个分区的主题来实现,不过 这意味着只有一个消费者进程。

【讨论】:

  • 不,我要问的是,如果同一个主题和分区将在同一个投票中被打破
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 2019-07-06
  • 1970-01-01
相关资源
最近更新 更多