本文主要参考 唐云《flink checkpoint 轻量级分布式快照》,严禁转载,违者必究
checkpoint
是flink的一个执行操作,动作是去 保存分布式状态的快照
state
是 checkpoint 的数据构成
keyed state:
只能用于 keyedstream的函数和操作中,例如keyed udf, window state
已经分区/划分好的,每个key只能属于某个keyed state
operator state:
又称为:none-keyed state, 每个 orerator state仅与一个operator的实例绑定
常见的operator state是source state,比如是 source的offset
State的存储
HeapKeyedStateBackend的存储格式:
支持异步的checkpoint: CopyonWriteStateTable<K,N,S>[] ,整体相当于一个map
仅支持同步checkpoint: Map<N,Map<K,S>>, 嵌套的Map
MemoryStateBackend使用时,checkpoint序列化数据阶段默认有5MB的限制
RocksDBKeyedStateBackend的存储格式:
每个state都存储在一个单独的 columnFamily内
keyGroup,Key和NameSpace进行序列化存储在DB作为Key
checkpoint执行过程:
Exactly once 与 barrier对齐
为实现 Exactly Once, flink 通过一个input buffer来缓存对齐阶段收到的数据,等对齐完成之后再进行处理
如果是 At least Once, 则无需缓存收集的数据,会对后续直接处理,所以导致restore时,数据可能会处理多次
flink的checkpoint机制只能保证计算过程的exactly once,端对端的exactly once的实现,还需要依赖source和sink.
基于RockDb的增量Checkpoint:
作业恢复:
SavePoint:
用户通过命令触发,由用户管理其创建和删除
标准化的格式存储,允许作业升级或者配置变更
恢复时,需要提供用于恢复作业状态的savepoint地址。
Externalized checkpoint:
checkpoint完成时,在用户给定的外部存储中保存
作业失败时,checkpoint保留下来了
恢复时,用户提供checkpoint的地址
Keyed State改并发
Operator state 改并发
参考 《flink checkpoint 轻量级分布式快照》唐云