我有一个Kafka spout拓扑,有点像下面
SpoutConfig spoutConfig = new SpoutConfig(zkBrokerHosts, "some-topic","", "some-id");
spoutConfig.scheme = new SchemeAsMultiScheme(new StringScheme());
...
builder.setSpout("kafkaSpout",new KafkaSpout(spoutConfig),1);
当然它运作正常。
考虑到我的拓扑失败并再次运行它的情况,我希望KafkaSpout从该主题的最新偏移中读取而不是消费者已阅读的最后偏移量。
有没有选择?我试过了
spoutConfig.startOffsetTime=System.currentTimeMillis();
但似乎并没有按照我的意愿行事。并且都没有kafkaConfig.forceStartOffsetTime(-2);
如果您有任何想法,请告诉我。
答案 0 :(得分:7)
试试kafkaConfig.forceStartOffsetTime(-1)
。最新Kafka偏移量为-1
,最早可用偏移量为-2
。
编辑:
此外,您可以强制使用相同的选项从任何所需的偏移开始使用spout - 只需将数字偏移量作为唯一参数传递。
忽略Time
中的“forceStartOffsetTime
”,参数名称有点令人困惑。卡夫卡的抵消是数字,与任何时间概念都没有关系。 -1
只是一种特殊的方式告诉Kafka鲸鱼从Kafka本身收集最新的偏移量(同上-2
以获得最早的可用偏移量。)