【问题标题】:Reset consumer offset to the beginning from Kafka Streams从 Kafka Streams 将消费者偏移量重置为开头
【发布时间】:2017-12-13 04:48:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: java stream apache-kafka offset consumer


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 这是我已经知道的,见上...这里的关键字是程序化的。
      • 重置工具是一个程序,它是开源的,所以答案是肯定的,您可以通过编程方式重置消费者偏移量和 Streams 状态存储。
      猜你喜欢
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多