我有一个Flink流媒体程序,它从Kafka的主题中读取数据。在程序中,auto.offset.reset设置为"最小"。当在IDE/InIntellij 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));
如果您想始终从头开始读取,则需要在流上下文中禁用检查点。
同时在消费者属性层面禁用它:
enable.auto.commit=false或auto.commit.enable=false(取决于卡夫卡版本)
另一种方式:您可以为故障转移保留ckeckpointing,但在需要从头开始读取时生成新的group.id(只是有时清理zookeeper)