Exactly once 语义在flink中的实现|青训营笔记

85 阅读2分钟

一、数据流和动态表(如何在源源不断的数据流入中保证运行) A.处理对象:实时流、不断有动态流入 B.传统SQL和流处理的异同:有三点。ex:流处理查询不断更新结果、永不终止 C.在流上定义表,动态数据可以生成静态表 D.连续查询:不终止、结果不断更新、形成新的动态表(流批结合) E.查询产生仅追加数据的动态表(多增加多一条记录) F.RETRACT信息的产生 G.不同数据处理保证的语义 ①AT-MOST-ONCE:出故障后啥也不干 ②AT-LEAST-ONCE:保证每条数据至少被处理一次 ③AEXACTLY-ONCE:保证每条数据只被消费一次 二、excatly-once和checkpoint 出故障时:flink如何从故障中恢复 ①制作快照的时间点:状态恢复的时间点 ②chandy-lamport算法 三、端到端的EXACTLY-ONCE实现(FLINK本身的checkpoint机制如何和外部存储结合实现端到端的不重语义) 两阶段提交协议:为了协调每节点都能同时执行或者回滚某事务性操作,引入一个中心点来处理所有节点 ①中心点-写作者 ②被中心点调节-参与者

A.预提交阶段 ①协作者发commit消息 ②参与者收到消息后-执行-但是不提交 ③执行结果:成功\失败,都会提交

B.提交阶段 ①协作者向参与者发送commiti消息 ②收到commit消息的参与者释放执行事务所需资源,并且结束执行 ③完成第二步后,参与者发送ack给协作者 ④收到ack后,标识该事务完成并回滚

两阶段提交总结 A事务开启 B预提交阶段 c提交阶段

账单计算服务:FLINK解决方案 优点: ①严格意义上的端到端的EXACTLY-ONCE语义:下游不重不丢 ②增强的去重能力:在更长时间维度对数据进行去重