Flink 中的 RocksDBStateBackend:它是如何工作的?
RocksDBStateBackend in Flink: how does it works exactly?
我已经阅读了 Flink 官方关于 State Backends 的文档,here。特别是,我对 RocksDBStateBackend.
感兴趣
我不明白,如果我启用这种后端,RocksDB 将可以通过 Flink 集群中的另一个节点从 TaskManagers 访问吗?
到目前为止,我对 RocksDBStateBackend 的理解是,任务管理器会将状态存储在它们的内存中,即 JVM 进程的内存中。之后,他们是否会将状态发送到 RocksDB 中存储?如果是,RocksDB 在 Flink 集群中的什么位置?它在物理上在哪里?
RocksDB 是一个嵌入式数据库。如果您使用 RocksDB 作为 Flink 的状态后端,那么每个任务管理器都有一个 RocksDB 的本地实例,它在 JVM 中作为本机 (JNI) 库运行。使用 RocksDB 时,您的状态在本地磁盘上以序列化字节的形式存在,并带有内存中(堆外)缓存。
checkpoint时,RocksDB的SST文件会从本地磁盘复制到存储checkpoint的分布式文件系统中。如果启用了本地恢复选项,则还会保留本地副本以加快恢复速度。但仅依赖本地副本并不安全,因为如果节点出现故障,本地磁盘可能会丢失。这就是检查点总是存储在分布式文件系统上的原因。
RocksDB 的替代方案是使用一种基于堆的状态后端,在这种情况下,您的状态将作为对象存在于 JVM 堆上。
我已经阅读了 Flink 官方关于 State Backends 的文档,here。特别是,我对 RocksDBStateBackend.
感兴趣我不明白,如果我启用这种后端,RocksDB 将可以通过 Flink 集群中的另一个节点从 TaskManagers 访问吗?
到目前为止,我对 RocksDBStateBackend 的理解是,任务管理器会将状态存储在它们的内存中,即 JVM 进程的内存中。之后,他们是否会将状态发送到 RocksDB 中存储?如果是,RocksDB 在 Flink 集群中的什么位置?它在物理上在哪里?
RocksDB 是一个嵌入式数据库。如果您使用 RocksDB 作为 Flink 的状态后端,那么每个任务管理器都有一个 RocksDB 的本地实例,它在 JVM 中作为本机 (JNI) 库运行。使用 RocksDB 时,您的状态在本地磁盘上以序列化字节的形式存在,并带有内存中(堆外)缓存。
checkpoint时,RocksDB的SST文件会从本地磁盘复制到存储checkpoint的分布式文件系统中。如果启用了本地恢复选项,则还会保留本地副本以加快恢复速度。但仅依赖本地副本并不安全,因为如果节点出现故障,本地磁盘可能会丢失。这就是检查点总是存储在分布式文件系统上的原因。
RocksDB 的替代方案是使用一种基于堆的状态后端,在这种情况下,您的状态将作为对象存在于 JVM 堆上。