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

90 阅读1分钟

这是我参与「第四届青训营 」笔记创作活动的第4天主要学习了Exactly Once 语义在 Flink 中的实现。

Exactly Once 语义在 Flink 中的实现

数据流和动态表

image-20220729170920078.png

传统SQL和流处理

  • 处理数据的有界性
  • 处理数据的完整性
  • 执行时间

数据流和动态表转换

image-20220729175629140.png

连续查询

image-20220729175722232.png

  • 查询从不终止
  • 查询结果不断更新,产生新的动态表

image-20220729192331226.png

image-20220729192515785.png

image-20220729192524373.png

追加数据的动态表

image-20220729192846881.png

小结

  • 数据流与动态表之间的转换
  • 数据流的查询不会终止
  • 查询可能有状态来更新查询结果

不同数据处理保证的语义

  • At-most-once:出现故障之后啥也不错,不保证处理语义,处理时延低
  • At-least-once:保证每条数据均至少被处理一次,但可能重复处理
  • Exactly-Once :严格处理一次,仿佛未发生故障

Exactly-Once 和Chckpoint

状态快照与恢复

image-20220729193807557.png

简单的快照算法:

  1. 暂停输入数据
  2. 等待所有后续处理算子消费当前已输入的数据
  3. 等待2处理完后,所有算子复制保存自己的状态
  4. 恢复对输入数据的处理

Chandy - Lamport 算法

image-20220729215048500.png

image-20220729215335021.png

image-20220729221756203.png image-20220729215344404.png

image-20220729215455577.png

image-20220729221824903.png 作业性能:

  1. 各个算子在完成快照后可以正常处理数据不用等下游算子
  2. 在快照制作中需要暂停处理数据,仍然会增加延迟
  3. 快照保存到远端也有可能极为耗