有关对多个主题使用@KafkaListener autoStartup =“ false”的问题

时间:2019-01-16 09:32:12

标签: apache-kafka spring-kafka

具有以下

@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

1 个答案:

答案 0 :(得分:2)

没有这样的保证。

请参见answers to this question

  

Kafka仅向您保证分区内消息的顺序。 ...

     

关于您的具有两个主题的用例,主题的订阅顺序与消息顺序之间没有关系,即使...