首页 文章

使Kafka消费者在订阅之前使用现有消息

提问于
浏览
1

拥有Publisher和N个消费者,如果消费者使用 auto.offset.reset=latest ,那么他们会错过在订阅主题之前发布到主题的所有消息...已知的事实是,带有 auto.offset.reset=latest 的消费者不会重播该主题中存在的消息它订阅了......

所以我需要:

  • 让发布商等到所有订阅者开始使用消息然后开始发布 . Dunno如何在不利用Zookeeper的情况下做到这一点 . Kafka 是否提供了这样做的手段?

  • 另一种方法是拥有 auto.offset.reset=latest 消费者并让他们明确地使用所有现有消息,以防他们即将订阅带有现有消息的主题...

这种情况的最佳做法是什么?

我猜消费者必须检查现有消息的主题,如果有消息则消费它们,然后启动 auto.offset.reset=latest 消费 . 这听起来对我来说是最好的方式......

2 回答

  • 0

    我们使用Eureka提供的服务发现功能(任何其他服务发现应用程序将执行此操作)别名来执行选项(1) . 基本上,发布者不会注册自己(并开始处理请求或发布通知),直到至少有一个订阅者可用 .

  • 0

    如果高级别消费者开始使用,则会执行以下操作:

    • 寻找其消费者群体的承诺抵消

    一个 . 如果找到有效的偏移量,则从那里恢复

    湾如果未找到有效的偏移量,请根据 auto.offset.reset 设置偏移量

    因此,如果没有提交有效的偏移量, auto.offset.reset 仅触发 . 此行为旨在并且必须在发生故障时提供至少一次处理保证 .

    因此,如果您想从头开始阅读主题,您可以使用新的使用者 group.id 并设置 auto.offset.reset = earliest ,或者在启动 poll() 循环之前使用 seekToBeginning() 显式修改启动时的偏移量 .

相关问题