2.概述
分布式快照是整个 Flink 计算框架中非常核心的模块,Flink 的 checkpoint、状态存储都依赖于其分布式快照;不仅框架自身借助于 chandy-lamda 算法,实现了算子状态的快照和恢复,也对用户暴露了一套简洁的状态存储的 API,用户无需关心快照自身的容错/扩展/一致性,这些 Flink 都已对用户透明。
3.核心模块
Flink 的分布式快照存储部分设计抽象出了大致 5 个层次:
- 最底层是快照的物理存储,包括内存和文件系统两种形式
- 再上层是 CheckpointStreamFactory:封装了具体的存储交互,也就是内存/文件系统读写
- 再上层是 StateBackend:封装了工作状态的存储逻辑,包括内存和 RocksDB 两种形式
- 再上层是 KeyedStateBackend:封装了快照的读写细节,快照分区策略等
- 再上层是 State:封装了与 KeyedStateBackend 交互时状态的 val 序列化/反序列化 等逻辑
还有一个 StateContext 比较特殊,它不提供快照功能,只提供临时的状态读写,下面会讲到
核心模块的总体交互图: