拥有发布者和N个消费者,如果消费者使用auto.offset.reset=latest
,那么他们会在订阅之前错过发布到主题的所有消息...已知消费者auto.offset.reset=latest
在订阅之前不会重播主题中存在的消息...
所以我需要:
auto.offset.reset=latest
消费者并让他们明确地使用所有现有消息,以防他们即将订阅带有现有消息的主题... 此案例的最佳做法是什么?
我猜消费者必须检查现有消息的主题,如果有消息则消费它们然后启动auto.offset.reset=latest
消费。这听起来对我来说是最好的方式......
答案 0 :(得分:0)
如果高级消费者开始使用,则会执行以下操作:
寻找其消费者群体的承诺抵消
一个。如果找到有效的抵消,则从那里继续
湾如果未找到有效的偏移量,请根据auto.offset.reset
因此,如果没有提交有效的偏移量,auto.offset.reset
仅触发。这种行为是有意和必要的,以便在发生故障时至少提供一次处理保证。
因此,您是否想从头开始阅读主题,您可以使用新的消费者group.id
并设置auto.offset.reset = earliest
,也可以使用seekToBeginning()
在启动时明确修改偏移量你开始poll()
循环。
答案 1 :(得分:0)
我们使用Eureka提供的服务发现功能(任何其他服务发现应用程序可以完成工作)+别名来执行选项(1)。基本上,发布者不会注册自己(并开始处理请求或发布通知),直到至少有一个订阅者可用。