【问题标题】:How is message sequence preserved for topic with many partitions?如何为具有多个分区的主题保留消息序列?
【发布时间】:2017-04-15 20:37:50
【问题描述】:

我想要任何关于 Kafka 在将消息写入具有多个分区的主题时如何维护消息序列的信息/解释。 例如我有多个消息生产者,每个消息生产者按顺序生成消息,并在 Kafka 主题上写入超过 1 个分区。在这种情况下,消费者组将如何消费消息。

【问题讨论】:

    标签: apache-kafka kafka-consumer-api kafka-producer-api


    【解决方案1】:

    Kafka 只提供一个分区内的记录的总排序,而不是一个主题中不同分区之间的总排序。即使在一个分区内,如果启用重试并且 max.in.flight.requests.per.connection 大于 1,您仍然可能遇到乱序事件。

    解决方法是创建一个只有一个分区的主题,尽管这意味着每个消费者组只有一个消费者进程。

    【讨论】:

      【解决方案2】:

      Kafka 将根据提供给生产者的消息密钥将消息存储在分区中。如果没有给出,则消息将以循环方式写入分区。要保持对某个主题的排序,您需要确保排序后的序列具有相同的键,或者该主题只有一个分区。

      【讨论】:

      • 谢谢你的回复那么在这种情况下消费者组如何工作他们如何管理偏移量,假设我正在发送 13 条没有密钥的消息到一个有 5 个分区的主题,如果我不是错误则消息分发将或多或少与 3 条消息-Part1、3 条消息-Part2、3 条消息-Part3、2 条消息-Part4、2 条消息-Part5 相同。
      • 您从 Kafka 获得的保证是,每个分区中的每条消息都将仅发送给每个组中的一个消费者。组中的每个消费者都被分配了一些分区,并将获得发送给它的消息。因此,以您给出的示例为例,如果消费者组中有两个消费者,其中一个可能会获得分区 1-3,而另一个可能会获得分区 4-5。然后,第一个消费者将收到 9 条消息,第二个消费者将收到 4 条消息。
      • 以上面的例子为例,我们在一个消费者组中有 2 个消费者,如果我将一个 spark 流直接 api 消费者添加到同一个消费者,一个消费者将获得分区 1-3 和另一个分区 4-5组,这个消费者将通过什么机制帮助读取火花流数据。
      猜你喜欢
      • 2020-06-27
      • 2015-07-01
      • 1970-01-01
      • 2023-02-20
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多