【问题标题】:Wait for kafka consumer to poll before writing messages to kafka spring boot在将消息写入kafka spring boot之前等待kafka消费者轮询
【发布时间】:2019-09-02 10:02:32
【问题描述】:

我有以下问题。 我想启动一个从kafka读写的spring boot应用程序 使用@KafkaListener。

我想:

  1. 将 kafka 消费者初始化为最新的偏移量。
  2. 向 kafka 写消息
  3. 然后使用在步骤 1 中创建的消费者从 kafka 读取这些消息

我面临以下问题第 2 步有时会在 kafka 消费者有时间执行第一次 poll() 操作之前运行。 这意味着它会忽略这些消息,因为它会在最晚之前考虑它们。

在使用 spring-kafka 时是否有保证消费者在应用程序启动之前轮询。

【问题讨论】:

  • 如果你在同一个线程中消费和生产。然后您可以简单地强制KafkaTemplate 同步发送,这意味着发送将阻塞,直到消息发送完毕。例如。 kafkaTemplate.send("key", "value").get().send(..) 返回一个 Future,您可以通过调用 .get(). 来阻止它

标签: spring-boot spring-kafka


【解决方案1】:

通常,在同一个应用程序中拥有 producerconsumer 是错误的架构。因此,确实不能保证其中一个在另一个开始工作时存在。

无论如何,您的应用程序有一个技巧可以尽可能晚地开始生成。

为此,您需要考虑实现SmartLifeCycle 并将用于发送的逻辑逻辑放入其start() 实现中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2018-09-29
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    相关资源
    最近更新 更多