【发布时间】:2016-08-09 21:31:24
【问题描述】:
拥有 Publisher 和 N 个 Consumer,如果消费者使用 auto.offset.reset=latest,那么他们会错过在订阅之前发布到某个主题的所有消息……众所周知,具有 auto.offset.reset=latest 的消费者不会重播订阅前主题中存在的消息...
所以我需要:
- 让发布者等待所有订阅者开始消费消息,然后开始发布。不知道如何在不利用 Zookeeper 的情况下做到这一点。 Kafka 是否提供了这样做的方法?
- 另一种方法是让
auto.offset.reset=latest消费者明确消费所有现有消息,以防他们即将使用现有消息订阅主题...
这种情况的最佳做法是什么?
我猜消费者必须检查现有消息的主题,如果有的话就消费它们,然后启动auto.offset.reset=latest消费。这听起来对我来说是最好的方式......
【问题讨论】:
-
使用
auto.offset.reset=earliest有什么坏处吗? -
如果您最早使用,您需要记忆或保留最后一个偏移量,以便知道您上次停止的位置,对吗?我刚刚意识到这两个选项都是完全错误的,唯一的方法是记住最后一个偏移量......
-
是的,你是对的。您只需要每次都跟踪偏移量。你介意说说你的用例吗,比如你在哪里使用 Kafka,以及你使用的是哪个处理引擎,比如 spark 或storm?还有是批处理还是流式处理?
标签: apache-kafka