具有以下
@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消息得到处理时,我向主题1发送了更多消息,但直到主题2的所有先前存在的消息都已被处理后,侦听器才对其进行处理。
因此,似乎是按照主题属性数组中的顺序对消息进行处理,并且只有在处理现有消息之后,才会处理任何新消息。
处理邮件的顺序 topic1讯息1 topic1讯息2 ... topic1讯息10 topic2讯息1 主题2消息2 ... ...这时向主题1发送了消息11 ... 主题2讯息10 topic1消息11
答案 0 :(得分:2)
没有这样的保证。
Kafka仅向您保证分区内消息的顺序。 ...
关于您的具有两个主题的用例,主题的订阅顺序与消息顺序之间没有关系,即使...