Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自多个主题的消息顺序卡夫卡_Java_Apache Kafka_Kafka Consumer Api - Fatal编程技术网

Java 来自多个主题的消息顺序卡夫卡

Java 来自多个主题的消息顺序卡夫卡,java,apache-kafka,kafka-consumer-api,Java,Apache Kafka,Kafka Consumer Api,我正在开发一个使用ApacheKafka的软件。我有一个消费者订阅了多个主题,我想知道是否有从这些主题接收消息的订单。我在我的电脑上尝试了一些组合,但我需要确定这一点。 范例 主题1和主题2的消费者子主题 生产商1在主题1上写点什么 生产商2在主题2上写点什么 生产商1在主题1上写点什么 当消费者进行民意调查时,它会收到一个记录列表,其中首先包含他订阅的第一个主题的消息,然后是另一个主题的消息 我想知道它是否总是这样,也就是说,消息的顺序和我订阅的主题一样。 谢谢 [编辑]我想指定两个主题各

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

  • 主题1和主题2的消费者子主题
  • 生产商1在主题1上写点什么
  • 生产商2在主题2上写点什么
  • 生产商1在主题1上写点什么
  • 当消费者进行民意调查时,它会收到一个记录列表,其中首先包含他订阅的第一个主题的消息,然后是另一个主题的消息
我想知道它是否总是这样,也就是说,消息的顺序和我订阅的主题一样。 谢谢


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

否。消息顺序只保留在分区中(甚至不保留在主题中)


如果您需要更强大的排序保证,则必须在应用程序中重新安排消息,例如使用时间戳(以及足够大的窗口缓冲区来捕获所有无序到达的消息)。最近,Kafka本身为所有消息添加了时间戳,对这一点的支持有所改进,但其原理保持不变。

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


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

为什么不先订阅第一个主题并进行投票,然后订阅另一个主题并进行另一次投票?如果没有这一点,我认为无法保证您接收来自这两个主题的消息的顺序。

Kafka代表了一个无限的消息队列,您将如何定义您已完成对来自topic1的所有消息的消费?我认为答案总是一样的。如果您认为这两个主题中的信息可能会层出不穷,那么当信息进入主题1时,从主题2获取信息的正确时机应该是什么。在一段时间后?(即,如果topic1中有X秒没有消息,我希望从topic2接收)。我不知道,但我只需要确保每次进行投票时,我收到的列表首先包含来自第一个主题的记录,然后是来自其他主题的记录。如果topic1或topic2上没有消息,则与此无关。我还没有看到背后的代码,但当我订阅带有列表的主题时,我假设每次我进行投票时,他都会从主题中进行投票。get(0)然后从主题中进行投票。get(1)等等。。很可能我错了,但是我到目前为止做的所有测试,我总是从第一个主题收到,然后从第二个主题收到