这是我参与「第四届青训营 」笔记创作活动的第4天主要学习了Exactly Once 语义在 Flink 中的实现。
Exactly Once 语义在 Flink 中的实现
数据流和动态表
传统SQL和流处理
- 处理数据的有界性
- 处理数据的完整性
- 执行时间
数据流和动态表转换
连续查询
- 查询从不终止
- 查询结果不断更新,产生新的动态表
追加数据的动态表
小结
- 数据流与动态表之间的转换
- 数据流的查询不会终止
- 查询可能有状态来更新查询结果
不同数据处理保证的语义
- At-most-once:出现故障之后啥也不错,不保证处理语义,处理时延低
- At-least-once:保证每条数据均至少被处理一次,但可能重复处理
- Exactly-Once :严格处理一次,仿佛未发生故障
Exactly-Once 和Chckpoint
状态快照与恢复
简单的快照算法:
- 暂停输入数据
- 等待所有后续处理算子消费当前已输入的数据
- 等待2处理完后,所有算子复制保存自己的状态
- 恢复对输入数据的处理
Chandy - Lamport 算法
作业性能:
- 各个算子在完成快照后可以正常处理数据不用等下游算子
- 在快照制作中需要暂停处理数据,仍然会增加延迟
- 快照保存到远端也有可能极为耗