Flink 及Exact-Once 语义|青训营笔记

77 阅读2分钟

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

  1. 概述
  • 大数据的实时性带来的价值更大→需要流式计算
  • FLink
    • Exactly once :精确一次的计算语义
    • check point :状态容错
    • Dataflow编程模型:window等高阶需求支持友好
    • 流批一体
  1. 整体架构
  • 分层
    • SDK层:SQL/Table,DataStream,Python(API)
    • 执行引擎层:提高了统一的DAG,用来描述数据处理的pipeline,调度层再把DAG图转化为分布式环境下的Task(Task通过suffle传输数据)
    • 状态存储层:负责存储算子的状态信息
    • 资源调度层:目前Flink可支持部署在多种环境
  • 总体
    • 核心组件
      • JobManger 负责协调
      • Taskmanger负责执行
    • Dispatcher 接受作业
    • Jobmaster 管理一个job的生命
    • ResourceManger 负责slot资源的管理和调度(一个slot只能运行同一个task的subtask)
  1. Exact-Once语义在Flink中的实现
  • 动态表:于表示批处理数据的静态表不同,动态表可随时间变化,可像查询静态表一样查询
  • 连续查询
    • 查询从不终止
    • 查询结果不断更新,产生一个新的动态表
    • 连续查询的结果在语义上与以批处理模式在输入表快照上执行的相同的查询的结果相同
  • retract消息的产生:先发一条retract消息,把待更新的消息的上一状态撤回
  • 查询故障处理
    • At-most-once:do noting
    • At-least-once:保证至少被处理一次,可能存在重复消费
    • Exactly-once:最严格的处理语义,从输出结果来看数据被消费且仅消费一次,仿佛事故从未发生
  1. 制作快照
  • 状态恢复时间点:需要等待所有处理逻辑消费完成source保留状态及之前的数据
  • 一个简单的快照制作算法
    • 暂停处理输入的数据
    • 等待后续所有处理算子消费当前已经输入的数据
    • 待2处理完后,作业所有算子复制自己的状态并保存到远端可靠存储
    • 恢复对输入数据的处理