Apache kafka 使Kafka消费者在订阅之前使用现有消息
拥有Publisher和N个使用者,如果使用者使用Apache kafka 使Kafka消费者在订阅之前使用现有消息,apache-kafka,Apache Kafka,拥有Publisher和N个使用者,如果使用者使用auto.offset.reset=latest,则他们会错过订阅主题之前发布到主题的所有消息。。。已知的事实是,具有auto.offset.reset=latest的使用者在订阅主题之前不会重播主题中存在的消息 因此,我需要: 使发布服务器等待所有订阅服务器开始使用消息,然后开始发布。不知道如何在不使用Zookeeper的情况下做到这一点。卡夫卡提供了这样做的手段吗 另一种方法是让auto.offset.reset=latest使用者明确地使用
auto.offset.reset=latest
,则他们会错过订阅主题之前发布到主题的所有消息。。。已知的事实是,具有auto.offset.reset=latest
的使用者在订阅主题之前不会重播主题中存在的消息
因此,我需要:
auto.offset.reset=latest
使用者明确地使用所有现有消息,以防他们将要使用现有消息订阅主题我猜消费者必须检查主题中是否有现有消息,如果有,就使用它们,然后启动
auto.offset.reset=latest
consumption。对我来说,这似乎是最好的方法…如果高级消费者开始使用,它会执行以下操作:
auto.offset.reset
auto.offset.reset
仅在未提交有效偏移量的情况下触发。此行为旨在且有必要在发生故障时提供至少一次处理保证
因此,如果要从头开始阅读主题,可以使用新的使用者
组.id
并设置auto.offset.reset=earliest
,或者在启动seektobegining()
循环之前,使用seektobegining()
在启动时显式修改偏移量。如果启动高级使用者,它做了以下工作:
auto.offset.reset
auto.offset.reset
仅在未提交有效偏移量的情况下触发。此行为旨在且有必要在发生故障时提供至少一次处理保证
因此,如果您想从头开始阅读主题,您可以使用新的使用者
组.id
并设置auto.offset.reset=earliest
,或者在启动seektobegining()
循环之前,使用seektobegining()
显式修改启动时的偏移量。我们执行选项(1)使用Eureka提供的服务发现功能(任何其他服务发现应用程序都可以完成此工作)+别名。基本上,在至少有一个订阅者可用之前,发布者不会自行注册(并开始处理请求或发布通知)。我们使用Eureka提供的服务发现功能(任何其他服务发现应用程序都可以)执行选项(1)并使用别名。基本上,发布者在至少有一个订阅者可用之前不会注册自身(并开始处理请求或发布通知)。使用auto.offset.reset=earlime
?如果使用earlime,您需要记录或保存上次偏移,以便知道上次停止的位置,对吗?我刚刚意识到这两个选项都是完全错误的,唯一的方法是记住最后的偏移量…是的,你是对的。您只需要每次跟踪偏移。您是否介意告诉我们您的用例,例如您在哪里使用Kafka,以及您使用的是哪种处理引擎,如spark或storm?另外,无论是批处理还是流式处理?使用auto.offset.reset=earlime
,是否有任何危害?如果使用earlime,您需要记忆或保留上次偏移量,以便知道上次停止的位置,对吗?我刚刚意识到这两个选项都是完全错误的,唯一的方法是记住最后的偏移量…是的,你是对的。您只需要每次跟踪偏移。您是否介意告诉我们您的用例,例如您在哪里使用Kafka,以及您使用的是哪种处理引擎,如spark或storm?还有,是批量处理还是流式处理?