Hi~朋友,关注置顶防止错过消息
Checkpoint和State的关系
Checkpoint是从source触发到下游所有节点的一次全局操作。
State就是Checkpoint的持久化备份的数据。
Flink State
关于Flink State的分类和特点,点击Flink状态管理。
Statebackend分类
Flink内置了三种Statebackend,MemoryStateBackend和FsStateBackend运行时都是存放在Java Heap中,只有Checkpoint时FsStateBackedn才会将数据以文件格式持久化到远程存储上,RocksDBStateBackend则是使用RocksDB对State进行存储。
对于HeapKeyedStateBackend来说,有两种实现:
对于MemoryStateBackend使用HeapKeyedStateBackend时,Checkpoint序列化数据阶段最多只能保存5M数据。
对于RocksDBKeyedStateBackend,每个State都会存储在一个单独的column family中,其中keyGroup、key和namespace(默认是VOID,通常使用window时会有值)进行序列化存储在DB作为key。
Checkpoint机制
5. 同样的,Sink节点在完成自己的Checkpoint以后,会通知Checkpoint Coordinator备份数据的地址(state handle)。
EXACTLY_ONCE
通过Flink的Checkpoint机制我们仅能做到计算过程中的EXACTLY_ONCE,Source和Sink的EXACTLY_ONCE还是需要数据源本身和Sink的支持。
Flink为了实现EXACTLY_ONCE,需要通过一个input buffer将在对齐阶段收到的数据缓存起来,等到对齐完以后(上游的Barrier全部到来)再将数据发往下游进行处理。
RocksDB增量Checkpoint