添加RocksDB状态后端相关

This commit is contained in:
LingZhaoHui 2023-09-17 19:49:25 +08:00
parent 2a73aca5c7
commit 57e5042f21
Signed by: zeekling
GPG Key ID: D96E4E75267CA2CC

View File

@ -151,8 +151,6 @@ StateBackend实现类图在1.17版本中,部分状态后端已经过期,
![pic](https://pan.zeekling.cn//flink/basic/state/StateBackend_0003.png) ![pic](https://pan.zeekling.cn//flink/basic/state/StateBackend_0003.png)
## HashMapStateBackend ## HashMapStateBackend
在TaskManager的内存当中保存作业的状态后端信息如果一个TaskManager并行执行多个任务时所有的聚合信息都要保存到当前的TaskManager内存里面。数据主要以Java对象的方式保存在堆内存当中。Key/value 形式的状态和窗口算子会持有一个 hash table其中存储着状态值、触发器。 在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 ## ChangelogStateBackend