从Kafka Streams重新开始消费者偏移

时间:2017-07-09 10:16:30

标签: java stream apache-kafka offset consumer

我正在使用Kafka流,并希望将一些消费者偏移从Java重置为开头。 KafkaConsumer.seekToBeginning(...)听起来是正确的做法,但我与Kafka Streams合作:

KafkaStreams streams = new KafkaStreams(builder, props);
...
streams.start();

我想这取决于具体的流管道,我定义这将在引擎盖下创建几个消费者。我可以访问这些吗?或者是否有其他方法可以通过编程方式重置偏移量?

2 个答案:

答案 0 :(得分:3)

基于Hans Jespersens的回答,我成功地使用了这段代码来完成脚本在Java代码中所做的事情:

import kafka.tools.StreamsResetter;

StreamsResetter resetter = new StreamsResetter();
String[] args = {"--application-id", APP_ID, "--bootstrap-servers", KAFKA_SERVERS, "--input-topics", TEST_TOPIC_NAME, "--zookeeper", ZOOKEEPER};
resetter.run(args);

该类是我在maven中导入的kafka核心库的一部分:

    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka_2.12</artifactId>
        <version>${kafka.version}</version>
    </dependency>

答案 1 :(得分:1)

由于您使用的是Kafka Streams,因此您不仅要重置消费者偏移,还要重置Streams内部状态存储。

幸运的是,Kafka提供了一个Streams应用程序重置工具。

请参阅https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Streams+Application+Reset+Tool