java - 来自多个主题 Kafka 的消息顺序

标签 java apache-kafka kafka-consumer-api

我正在开发一个使用 Apache Kafka 的软件。我有一个消费者订阅了多个主题,我想知道是否有从这些主题接收消息的订单。我在计算机上尝试了一些组合,但我需要确定这一点。 示例

  • 消费者子主题1和主题2
  • Producer1 就 topic1 写一些内容
  • Producer2 在 topic2 上写一些内容
  • Producer1 就 topic1 写一些内容
  • 当消费者轮询时,它会收到一个记录列表,其中首先包含来自他订阅的第一个主题的消息,然后包含来自另一个主题的消息。

我想知道是否总是这样,即消息按照我订阅的主题的顺序排列。 谢谢

[编辑]我想指定我有两个主题,每个主题有一个分区,并且只有一个生产者和一个消费者。我需要首先读取第一个主题的所有消息,然后读取另一个主题的消息

最佳答案

Kafka 只保证分区内消息的排序。这意味着即使只有一个主题但有多个分区,您也无法保证消息的接收顺序与发送顺序相同。

关于两个主题的用例,主题的订阅顺序和消息排序之间没有关系,即使集群有多个节点,主题分区领导者将位于不同的代理上,并且客户端通过不同的代理接收消息连接。顺便说一句,即使只有一个代理拥有所有主题/分区,您也无法获得您所描述的保证。

关于java - 来自多个主题 Kafka 的消息顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44567524/

相关文章:

java - 卡夫卡高级消费者

apache-kafka - 删除未使用的 kafka 消费者组

java - 请解释 "x = x++;"中的++ 运算符发生了什么。增量在哪里完成?

apache-spark - 如何从属性文件设置 Kafka 参数?

apache-spark - 当我们在 Apache Spark 中使用时,找不到 Set([TOPIC NAME,0])) 的领导者

apache-spark - 来自 Kafka Consumer 的 Spark Streaming

apache-kafka - 合并kafka流中的记录

java - 在 Lucene 4.4.0 中搜索词干和精确词

java - 如何确定哪个接口(interface)属于每个网络目标 - Java?

Java执行.exe文件