0

我有一个 Flink 流程序,它从 Kafka 的主题中读取数据。在程序中,auto.offset.reset 设置为“最小”。在 IDE/Intellij-IDEA 中测试时,程序总是可以从主题的开头读取数据。然后我建立了一个 flink/kafka 集群并将一些数据生成到 kafka 主题中。我第一次运行流作业时,它可以从主题的开头读取数据。但是在那之后我停止了流式作业并再次运行它,它不会从主题的开头读取数据。我怎样才能让程序总是从主题的开头读取数据?

    Properties properties = new Properties();
    properties.put("bootstrap.servers", kafkaServers);
    properties.put("zookeeper.connect", zkConStr);
    properties.put("group.id", group);
    properties.put("topic", topics);
    properties.put("auto.offset.reset", offset);

    DataStream<String> stream = env
            .addSource(new FlinkKafkaConsumer082<String>(topics, new SimpleStringSchema(), properties));
4

1 回答 1

0

如果您想始终从头开始阅读,则需要在流上下文中禁用检查点。

还要在消费者属性级别禁用它:

enable.auto.commit=false 或 auto.commit.enable=false (取决于 kafka 版本)

另一种方式:您可以继续 ckeckpointing 进行故障转移,但在需要从头开始读取时生成新的 group.id(有时只需清理 zookeeper)

于 2015-12-15T11:25:42.820 回答