Exactly Once 语义在Flink中的实现|青训营笔记

63 阅读2分钟

Exactly Once 语义在Flink中的实现 这是我参加「第四届青训营 」笔记创作活动的第2天

1.传统SQL和流处理 特征:处理数据的有界性、处理数据的完整性和执行时间 将事件流转换为动态表,动态表随时间变化 连续查询:查询从不终止,结果不断更新,产生一张新的动态表。

2.快照制作 JM发送Checkpoint Barrier标识状态到每个source算子(开始制作快照); 各个source保存自己状态后,向所有的下游发送Checkpoint Barrier,同时告知JM; 算子会等所有的 Barrier到达后才开始快照制作

3.两阶段提交协议 预提交阶段:协作者向所有参与者发送一个commit消息;收到消息后执行事务,但不真正提交;事务成功执行,发送(vote yes);执行失败,发送(vote no)。 提交阶段:收到vote yes, 协作者向所有参与者发送一个commit消息;收到消息后结束执行,再发送一个ack消息给协作者,协作者收到所有参与者的ack消息后,标识事务成功完成。收到vote no,协作者向所有参与者发送一个rollback消息;收到消息后参与者回滚事务的执行操作,并释放事务所占的资源;再发送一个ack消息给协作者,协作者收到所有参与者的ack消息后,标识事务成功回滚。

4.Flink案例讲解 账单计算服务:从Kafka中读取账单消息,进行处理后写入到MySQL中。

步骤:

1.在上次记录的位点之后,从Kafka中读取固定大小的数据;
2.对该批数据进行去重和聚合计算;
3.处理完成后写入MySQL中,若全部写入成功,则记录下当前读取到的消息的终止位置;若处理或者写入失败,则不记录位点;
4.跳回步骤1