Yai*_*hen 2 stream-processing rocksdb apache-flink
我是 flink 的新手,对状态后端配置有一些困惑。
据我所知,RocksDB 将应用程序的所有状态保存在文件系统上。我使用 s3 来存储状态,因此我将state.checkpoints.dir和state.savepoints.dir都配置为指向我的 s3 存储桶。现在我看到还有另一个与 RocksDB 存储相关的选项,名为state.backend.rocksdb.localdir。这是什么目的?(我看到我不能使用 s3)另外,如果 RocksDB 使用本地机器存储来做某事,当我使用 Kubernetes 并且我的 pod 突然失败时会怎么样?我应该使用持久存储吗?
另一件事,我不确定我是否正确理解了所有国家的事情。检查点是否保存了我的所有状态?例如,当我使用 AggregationFunction 并且应用程序失败时,当应用程序恢复时,每个键的聚合值是否会恢复?
Flink 的每个状态后端将其工作状态保存在每个工作线程本地的某个地方,同时将检查点保存在持久的地方,例如 S3。使用基于堆的状态后端,工作状态作为对象存储在 JVM 堆上,而使用 RocksDB,工作状态作为序列化字节存储在本地磁盘上(具有内存中、堆外缓存)。出于性能原因,您不想将 S3(甚至网络附加存储)用于state.backend.rocksdb.localdir
. 如果可以,请使用本地 SSD 存储。
Flink 不依赖于本地 RocksDB 存储在故障中幸存,就像它不期望堆上的状态在故障中幸存一样,因此您可以安全地使用临时存储作为rocksdb.localdir
. 当状态确实需要恢复时,最新的检查点就足够了。(但是本地磁盘上的副本可以用作优化,避免需要从 DFS 读取:有关详细信息,请参阅state.backend.local-recovery上的文档。
在恢复期间,如果应用程序失败,AggregationFunction 中每个键的聚合值将被恢复。检查点包括一切,包括源和接收器、窗口、计时器、ProcessFunctions、RichFunctions 等保存的状态。
归档时间: |
|
查看次数: |
1468 次 |
最近记录: |