以下是
@KafkaListener(id = "id1", autoStartup = "false", topics = { "topic1", "topic2" } spring.kafka.consumer.auto-offset-reset=earliest
假设在运行.start之前每个主题中都有多条消息
什么时候 KafkaListenerEndpointRegistry.getListenerContainer("id1").start();
是否有一个保证,来自topic1的所有消息都将在topic2之前得到处理(这就是我看到的),以及如果消息在topic2得到处理的同时被发送到topic1会发生什么。
+++++++++++++++++++++++++++++++++++++++++++++++++
编辑
运行了下面的测试,每个主题都有一个分区。在测试运行之前,topic1中有10条消息,topic2中有10条消息。运行代码并让10个topic1消息得到处理,但是当topic2消息得到处理时,我向topic1发送了更多的消息,但是侦听器没有处理这些消息,直到来自topic2的所有先前存在的消息都得到处理。
因此,似乎是按照topics属性数组中的顺序处理消息,并且在处理现有消息之前,不会处理任何新消息。
在topic1消息1 topic1消息2中处理的消息的顺序。。。主题1消息10主题2消息1主题2消息2。。。此时已将消息11发送到主题1。。。主题2消息10主题1消息11
1条答案
按热度按时间xjreopfe1#
没有这样的保证。
请参阅此问题的答案。
kafka只保证消息在分区内排序。。。
关于两个主题的用例,主题的订阅顺序和消息顺序之间没有关系,即使是因为。。。