Apache flink 如何在ApacheFlink中将检查点存储到远程RocksDB中

Apache flink 如何在ApacheFlink中将检查点存储到远程RocksDB中,apache-flink,flink-streaming,rocksdb,checkpoint,Apache Flink,Flink Streaming,Rocksdb,Checkpoint,我知道在ApacheFlink中有三种状态后端:MemoryStateBackend、FsStateBackend和RocksDBStateBackend MemoryStateBackend将检查点存储到本地RAM中,FsStateBackend将检查点存储到本地文件系统中,RocksDBStateBackend将检查点存储到RocksDB中。我对RocksDBState后端有一些问题 据我所知,RocksDBStateBend的机制已经嵌入到ApacheFlink中。rocksDB是一种键值

我知道在ApacheFlink中有三种状态后端:MemoryStateBackend、FsStateBackend和RocksDBStateBackend

MemoryStateBackend将检查点存储到本地RAM中,FsStateBackend将检查点存储到本地文件系统中,RocksDBStateBackend将检查点存储到RocksDB中。我对RocksDBState后端有一些问题

据我所知,RocksDBStateBend的机制已经嵌入到ApacheFlink中。rocksDB是一种键值数据库。因此,如果我是对的,这意味着Flink将把所有检查点存储到嵌入式rocksDB中,它使用本地磁盘


如果是这样,我认为磁盘在某些情况下可能会耗尽,因为rocksDB中存储了检查点。现在我在想,是否可以配置远程rocksDB来存储这些检查点?如果可能的话,我们应该担心远程rocksDB崩溃吗?如果远程rocksDB崩溃,Flink的作业将无法继续工作,对吗?

rocksDB可以与Flink支持的任何文件系统一起工作

如果您正在运行Flink,您可能希望检查点并从中恢复

我会将存储外部化到节点之外。如果您使用的是像AWS这样的云提供商,那么S3是正确的选择

所以你可能应该写一些类似的东西:
newrocksdbstatebend(“s3://my bucket”,true)并将其分配给您的执行环境


请检查上述文档以正确配置文件系统。

没有将外部或远程RocksDB与Apache Flink一起使用的选项。RocksDB是一个嵌入式键值存储,每个任务管理器中都有一个本地实例

有几点:

  • Flink在工作状态(始终是本地的)和状态快照(检查点和保存点)之间做了很强的区分,工作状态始终是本地的(为了性能好),而状态快照(检查点和保存点)不是本地的(为了可靠性,它们应该存储在分布式文件系统中)

  • RocksDBState后端使用本地磁盘作为工作状态。其他两个状态后端将其工作状态保留在Java堆上

  • 检查点协调器将分散在所有任务管理器中的所有这些数据片段安排在一起,收集到存储在其他位置的完整检查点中。对于MemoryStateBackend,这些检查点存储在JobManager堆上;对于其他两个,它们位于分布式文件系统中

您希望将RocksDB配置为使用最快的可用本地文件系统。尽量使用本地连接的SSD,避免使用网络连接存储(如EBS)。不要尝试使用分布式文件系统(如S3)作为RocksDB的本地存储

state.backend.rocksdb.localdir
控制每个本地rocksdb存储其工作状态的位置

RocksDBStateBackend构造函数的参数控制检查点的存储位置。例如,在AWS上使用@ezequiel推荐的S3是显而易见的选择