【问题标题】:Question about using the @KafkaListener autoStartup = "false" for multiple topics关于将@KafkaListener autoStartup = "false" 用于多个主题的问题
【发布时间】:2019-06-10 08:35:57
【问题描述】:

以下

@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 的所有预先存在的消息之前,侦听器未处理那里。

所以看起来消息是从主题属性数组中按顺序处理的,并且在处理现有消息之前不会处理任何新消息。

处理消息的顺序 主题 1 消息 1 主题 1 消息 2 ... 主题 1 消息 10 主题 2 消息 1 主题 2 消息 2 ... ...此时向主题 1 发送了消息 11 ... 主题 2 消息 10 topic1 消息 11

【问题讨论】:

    标签: apache-kafka spring-kafka


    【解决方案1】:

    没有这样的保证。

    answers to this question

    Kafka 只为您提供分区内消息排序的保证。 ...

    关于你的用例有两个主题,订阅顺序与主题和消息顺序之间没有关系,即使是因为......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 2022-06-14
      • 1970-01-01
      相关资源
      最近更新 更多