这是我参与「第四届青训营 」笔记创作活动的第3天
今天我们学习了# Exactly Once 语义在 Flink 中的实现,主要内容为以下四个部分:
- 数据流和动态表
- Exactly-Once 和 Checkpoint
- 端到端 Exactly-Once 实现
- Flink 案例讲解
数据流和动态表
传统SQL和流处理
数据流和动态表的转换
实时流查询特点:
- 查询从不终止
- 查询结果会不断更新,并且会产生一个新的动态表
- 结果的动态表也可转换成输出的实时流
动态表到实时流的转换
- Append-only Stream: Append-only 流(只有 INSERT 消息)
- Retract Stream: Retract 流(同时包含 INSERT 消息和 DELETE 消息)
Exactly-Once 和 Checkpoint
不同数据处理保证的语义
Checkpoint
- Checkpoint barrier 的下发
制作快照的时间点
快照制作的开始
每一个source算子接收到JM发送的CheckPoint Barrier标识状态快照制作的开始
Barrier Alignment
快照制作和数据处理的解耦
CheckPoint 的结束
所有算子都告知JM状态完成后,整个CheckPoint就结束了
端到端 Exactly-Once 实现
端到端 Exactly-Once的语义
两阶段提交协议(2PC)
Coordinator:协作者,同步和协调所有节点处理逻辑的中心节点
Participant:参与者,被中心节点调度的其他执行处理逻辑的业务节点
两阶段提交协议在 Flink 中的应用
Flink 中协作者和参与者的角色分配
协作者(JobManager)发起阶段一提交
各算子 Checkpoint 的制作
提交阶段及 Checkpoint 的制作完成
Flink案例
个人总结
通过本节课,我知道了数据流和动态表可以相互转换,并且了解了处理无限流数据的算子是可以有状态的,Flink可以通过CheckPoint机制实现故障前后状态的快照制作和恢复。