Flink中的RocksDBStateBackend:它到底是如何工作的



我已经在这里阅读了Flink关于State Backends的官方文档。特别是,我对RocksDBStateBackend很感兴趣。

我不明白,如果我启用这种后端,RocksDB将可以通过Flink集群内的另一个节点从TaskManagers访问吗?

到目前为止,我对RocksDBStateBackend的理解是,任务管理器将状态存储在他们的内存中,即JVM进程的内存中。之后,他们会把状态发送到RocksDB内部存储吗?如果是,RocksDB在Flink的集群中在哪里?它在哪里?

RocksDB是一个嵌入式数据库。如果您使用RocksDB作为Flink的状态后端,那么每个任务管理器都有一个RocksDB的本地实例,它作为JVM内的本地(JNI(库运行。当使用RocksDB时,您的状态在本地磁盘上以序列化字节的形式存在,并具有内存内(堆外(缓存。

在检查点设置期间,RocksDB中的SST文件会从本地磁盘复制到存储检查点的分布式文件系统中。如果启用了本地恢复选项,则还会保留一个本地副本,以加快恢复速度。但是,只依赖本地副本是不安全的,因为如果节点发生故障,本地磁盘可能会丢失。这就是为什么检查点总是存储在分布式文件系统中的原因。

RocksDB的另一种选择是使用一个基于堆的状态后端,在这种情况下,您的状态将作为JVM堆上的对象存在。

相关内容

  • 没有找到相关文章

最新更新