https://www.zhihu.com/people/bigdata-qingniu/zvideos?page=3
1.FlinkKafkaConsumer容错
flink读取kafka如何保存offset?
flink读取kafka数据,如果程序出错了,从什么位置开始消费??
- 配置了ck,也配置了恢复策略,那么从上一次checkpoint成功保存的offset开始消费;
- 如果没有使用ck,也没有恢复策略,那么从kafka内部的_consumer_offset topic中获取
- 如果没有使用ck,但是启用了恢复策略,那么从kafka内部的_consumer_offset topic中获取
1.1 理解FlinkKafkaSource的容错性(影响出错时数据消费的位置)
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutrionEnvironment();
env.enableCheckpointing(5000);
- 如果flink启用了ck,那么flink kafka consumer会周期性的checkpoint kafka偏移量到快照中;
- 由于Source是DataStream,所以必须是Operator State
- 通过实现CheckpointedFunction接口
- ListState<Tuple2<KafkaTopicPartition,Long>>
- 保证仅一次消费
- 如果作业失败,Flink将流程需恢复到最新检查点的状态,并从检查点中存储的偏移量开始重新消费kafka中的记录()
- Flink 会将offset保存在快照,并且当checkpoint完成后,会在kafka内部的_consumer_offset中也保存一份,但是程序恢复只从ck快照中读取
2.FlinkKafkaProducer容错
Kafka 0.10