diff --git a/basic/checkpoint.md b/basic/checkpoint.md index 55f3ccf..0a19187 100644 --- a/basic/checkpoint.md +++ b/basic/checkpoint.md @@ -151,8 +151,6 @@ StateBackend实现类图,在1.17版本中,部分状态后端已经过期, ![pic](https://pan.zeekling.cn//flink/basic/state/StateBackend_0003.png) - - ## HashMapStateBackend 在TaskManager的内存当中保存作业的状态后端信息,如果一个TaskManager并行执行多个任务时,所有的聚合信息都要保存到当前的TaskManager内存里面。数据主要以Java对象的方式保存在堆内存当中。Key/value 形式的状态和窗口算子会持有一个 hash table,其中存储着状态值、触发器。 @@ -253,6 +251,51 @@ restoreOperation实现类图如下所示,主要包含如下的实现类。 +### RocksDBIncrementalRestoreOperation + +主要实现从增量快照中恢复RocksDB数据。核心函数为restore()。主要区分为: + +- restoreWithRescaling:从多个增量的状态后端恢复,需要进行扩缩容。在这个过程中会创建一个临时的RocksDB实例用于关key-groups。临时RocksDB当中的数据在都会复制到实际使用的RocksDB的实例当中。 +- restoreWithoutRescaling:从单个远程的增量状态后端恢复,无需进行扩缩容。 + +````java +if (isRescaling) { + restoreWithRescaling(restoreStateHandles); +} else { + restoreWithoutRescaling(theFirstStateHandle); +} +```` + + + +#### restoreWithRescaling 实现原理 + +1. 选择最优的KeyedStateHandle。 +2. 初始化RocksDB实例。 +3. 将key-groups从临时RocksDB转换到Base RocksDB数据库。 + + + +#### restoreWithoutRescaling 实现原理 + + + + + +### RocksDBFullRestoreOperation + + + +### RocksDBHeapTimersFullRestoreOperation + + + +### RocksDBNoneRestoreOperation + + + + + ## ChangelogStateBackend