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

55 阅读1分钟

这是我参与「第四届青训营 」笔记创作活动的第3天

01.数据流和动态表

流处理是一个无限元组序列;执行查询无法访问所有的数据;查询不断更新结果,永不中止 表和流可以动态转换

动态表:与表示批处理数据的静态表不同,动态表是随时间变化的。可以像查询静态批处理表一样查询它们 在任何时候,连续查询的结果在语义上与以批处理模式在输入表快照上执行的相同查询的结果相同 连续查询:查询从不中止;查询结果会不断更新,产生一个新的动态表

1.2传统SQL和流处理

image.png

1.4连续查询

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

1.6两个连续查询对比

image.png

查询运行中出现故障怎么办?

1.10不同数据处理保证的语义

  • At-most-once:出现故障的时候,啥也不做,数据处理不保证任何语义,处理时延低
  • At-least-once:保证每条数据均至少被处理一次,一条数据可能存在重复消费
  • Exactly-once:最严格的处理语义,从输出结果来看,每条数据均被消费且仅消费一次,仿佛故障从未发生

02.Exactly-Once和Checkpoint

2.1数据快照与恢复

image.png

2.2制作快照是时间点

状态恢复的时间点:需要等待所有处理逻辑消费完成source保留状态及之前的数据

image.png

2.4Checkpoint对作业性能的影响

image.png

03.端到端Exactuly-Once实现

3.1端到端Exactuly-Once语义

image.png

3.2两阶段提交协议

image.png

3.4Flink两阶段提交总结

image.png

04.总结

image.png