Flink - RocksDB 中的 localdir 配置是什么?

Flink - What is localdir configuration in RocksDB?

我是flink新手,对state后端配置有些迷惑

据我所知,RocksDB 将应用程序的所有状态保存在文件系统上。 我使用 s3 来存储状态,所以我配置了 state.checkpoints.dirstate.savepoints.dir 指向我的 s3 存储桶。 现在我看到还有另一个与 RocksDB 存储相关的选项,叫做 state.backend.rocksdb.localdir。这是什么目的?(我看到我不能为此使用 s3) 另外,如果 RocksDB 使用本地机器存储来做某事,当我使用 Kubernetes 并且我的 pod 突然失败时会怎样?我应该使用持久存储吗?

另一件事,我不确定我是否正确理解了所有状态。 检查点是否保存了我所有的状态?例如,当我使用 AggregationFunction 并且应用程序失败时,当应用程序恢复时,是否恢复了每个键的聚合值?

Flink 的每个状态后端都将其工作状态保存在每个 worker 本地的某个地方,同时将检查点持久保存在某个持久的地方,例如 S3。对于基于堆的状态后端,工作状态作为对象存储在 JVM 堆上,而对于 RocksDB,工作状态作为序列化字节存储在本地磁盘上(具有内存中的堆外缓存)。出于性能原因,您不想为 state.backend.rocksdb.localdir 使用 S3(甚至网络附加存储)。如果可以,请使用本地 SSD 存储。

Flink 不依赖本地 rocksdb 存储在故障中幸存,就像它不期望堆上的状态在故障中幸存一样,因此您可以安全地使用临时存储作为 rocksdb.localdir。当确实需要恢复状态时,最新的检查点就足够了。 (但本地磁盘上的副本可以用作优化,避免需要从 DFS 读取:有关详细信息,请参阅 state.backend.local-recovery 上的文档。

在恢复期间,如果您的应用程序失败,AggregationFunction 中每个键的聚合值将被恢复。检查点包括所有内容,包括源和汇保持的状态、windows、计时器、ProcessFunctions、RichFunctions 等