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

时间:2016-06-14 22:48:10

标签: apache-kafka

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

所以我需要:

  1. 让发布商等到所有订阅者开始使用消息然后开始发布。 Dunno如何在不利用Zookeeper的情况下做到这一点。卡夫卡是否提供了这样做的手段?
  2. 另一种方式是拥有auto.offset.reset=latest消费者并让他们明确地使用所有现有消息,以防他们即将订阅带有现有消息的主题...
  3. 此案例的最佳做法是什么?

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

2 个答案:

答案 0 :(得分:0)

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

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

    一个。如果找到有效的抵消,则从那里继续

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

  2. 设置偏移量

    因此,如果没有提交有效的偏移量,auto.offset.reset仅触发。这种行为是有意和必要的,以便在发生故障时至少提供一次处理保证。

    因此,您是否想从头开始阅读主题,您可以使用新的消费者group.id并设置auto.offset.reset = earliest,也可以使用seekToBeginning()在启动时明确修改偏移量你开始poll()循环。

答案 1 :(得分:0)

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