我已经在这里阅读了Flink关于State Backends的官方文档。特别是,我对RocksDBStateBackend很感兴趣。
我不明白,如果我启用这种后端,RocksDB将可以通过Flink集群内的另一个节点从TaskManagers访问吗?
到目前为止,我对RocksDBStateBackend的理解是,任务管理器将状态存储在他们的内存中,即JVM进程的内存中。之后,他们会把状态发送到RocksDB内部存储吗?如果是,RocksDB在Flink的集群中在哪里?它在哪里?
在检查点设置期间,RocksDB中的SST文件会从本地磁盘复制到存储检查点的分布式文件系统中。如果启用了本地恢复选项,则还会保留一个本地副本,以加快恢复速度。但是,只依赖本地副本是不安全的,因为如果节点发生故障,本地磁盘可能会丢失。这就是为什么检查点总是存储在分布式文件系统中的原因。
RocksDB的另一种选择是使用一个基于堆的状态后端,在这种情况下,您的状态将作为JVM堆上的对象存在。