从 Kafka Streams 重置消费者偏移量到开头

Reset consumer offset to the beginning from Kafka Streams

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

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

我想根据我定义的具体流管道,这会在后台创建多个消费者。我可以访问那些吗?或者是否有其他方法以编程方式重置偏移量?

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

幸运的是,Kafka 提供了一个 Streams Application Reset Tool。

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

基于 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);

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

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