如何将检查点存储到apache flink中的远程rocksdb中

pbgvytdp  于 2021-06-26  发布在  Flink
关注(0)|答案(2)|浏览(451)

我知道apache flink中有三种状态后端:memoryStateBindend、fsstateBindend和rocksDBstateBindend。
memorystatebackend将检查点存储到本地ram中,fsstatebackend将检查点存储到本地文件系统中,rocksdbstatebackend将检查点存储到rocksdb中。我有一些关于rocksdbstatebackend的问题。
据我所知,rocksdbstatebend的机制已经嵌入到apacheflink中。rocksdb是一种键值db。如果我是对的,这意味着flink将把所有检查点存储到嵌入式rocksdb中,后者使用本地磁盘。
如果是这样,我认为磁盘在某些情况下可能会耗尽,因为rocksdb中存储了检查点。现在我在想,是否可以配置一个远程rocksdb来存储这些检查点?如果可能的话,我们应该担心远程rocksdb崩溃吗?如果远程rocksdb崩溃,flink的工作就不能继续工作了,对吧?

jogvjijk

jogvjijk1#

rocksdb可以使用flink支持的任何文件系统https://ci.apache.org/projects/flink/flink-docs-stable/ops/filesystems/
如果您运行的是flink,那么您可能需要检查点,并从中恢复。
我会将存储外部化到节点之外。如果您使用的是像aws这样的云提供商,那么s3是正确的选择。
所以你应该写下这样的话: new RocksDBStateBackend("s3://my-bucket", true); 把它分配给你的执行环境。
请检查以上文档以正确配置文件系统。

gudnpqoy

gudnpqoy2#

在apache flink中没有使用外部或远程rocksdb的选项。rocksdb是一个嵌入式键值存储,每个任务管理器中都有一个本地示例。
有几点:
flink对工作状态(始终是本地的)和状态快照(检查点和保存点)进行了很强的区分,后者不是本地的(为了可靠性,它们应该存储在分布式文件系统中)。
rocksDBStateBendback使用本地磁盘作为工作状态。另外两个状态后端将其工作状态保持在java堆上。
检查点协调器安排分散在所有任务管理器中的所有这些数据片段一起收集到存储在其他地方的完整检查点中。对于MemoryStateBendend,这些检查点存储在jobmanager堆上;对于另外两个,它们在一个分布式文件系统中。
您希望将rocksdb配置为使用最快的可用本地文件系统。尽量使用本地连接的SSD,避免使用网络连接存储(如ebs)。不要尝试使用分布式文件系统(如s3)作为rocksdb的本地存储。 state.backend.rocksdb.localdir 控制每个本地rocksdb存储其工作状态的位置。
rocksdbstatebackend构造函数的参数控制检查点的存储位置。e、 例如,在aws上使用@ezequiel推荐的s3是显而易见的选择。

相关问题