Flink 保证 ExactlyOnce 

1、使用执行ExactlyOnce 的数据源,比如 kafka

2、使用FlinkConsumer,开启CheckPointing,偏移量会保存通过CheckPointing 保存到StateBackend中,并且默认会将偏移量写入kafka的特殊 topic中,即 __consumer_offsets

3、FlinkKafkaConsumer的setCommitOffsetsOnCheckpoints 参数默认为true,即将偏移量写入到kafka特殊的 Topic中,目的是为了监控或重启任务没有指定savePoint时可以接着以前的偏移量继续消费。

4、并且设置CheckpointingMode.EXACTLY_ONCE

5、存储系统支持覆盖(Redis、Hbase、ES) 使用幂等性,将原来的数据覆盖

6、Barrier(隔离带)可以保证一个流水线中的所有算子都处理完成了在对该条数据做CheckPoint。

7、存储系统不支持覆盖

要支持事务,成功了提交事务和偏移量,如果失败可以回滚且不更新偏移量

posted on 2020-08-16 17:55  风清_云淡  阅读(755)  评论(0编辑  收藏  举报