数据算法结构|青训营笔记

61 阅读1分钟

这是我参与「第四届青训营」笔记创作的第3天
Exacly Once 语义在Flink中的实现

  1. 数据流和动态表
  • 流式数据是随处可见的
  • 传统的SQL和流处理

截屏2022-07-27 10.35.01.png

  • 动态表:随时间变化
  • 数据库表:Insert, Update, Delete DML语句的stream结果 -连续查询:查询不终止&查询结果不断更新,产生新的动态表
  • 不同数据处理保证语义
    • at-most once:出现故障的时候啥也不做,数据处理不保证任何语义,处理时延低
  • at least once:保证每条数据均至少被处理一次,一条数据可能存在重复消费
  • exactly once:最严格的语义处理,从输出结果来看,每条数据均被消费一次且仅消费一次
  1. Exactly—Once和Checkpoint截屏2022-07-27 13.34.55.png
  • source:读数据流
  • 状态恢复时间点:需要等待所有的处理逻辑消费完成,source保留状态及之前的数据
  • 简单的快照制作算法:暂停处理输入的数据➡️等待后续所有处理算子消费当前已经输入的数据➡️所有算子复制自己的状态并保存到远端可靠存储➡️回复对输入数据的处理
  • Chandy-Lamport 算法:

截屏2022-07-27 13.45.13.png 3. 端到端Exactly-Once 实现

  • Checkpoint 能保证每条数据都对各个有状态的算子更新一次,sink输出算子仍然可能下发重复的数据
  • exactly-once语义需要特殊的sink算子实现
  • 两阶段提交协议:coordinator+participant

截屏2022-07-27 14.00.32.png

  • 事务开启
  • 预提交阶段
  • 提交阶段
  1. Flink案例讲解
  • 账单计算服务