当前位置: 首页 > 知识库问答 >
问题:

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

夹谷成龙
2023-03-14

我知道Apache Flink中有三种状态后端:MemoryStateBend、FSStateBend和RockSDBStateBend。

MemoryStateBindend将检查点存储到本地RAM中,FSStateBindend将检查点存储到本地文件系统中,RockSDBStateBindend将检查点存储到RocksDB中。我对RocksDBStateBend有一些问题。

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

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

共有2个答案

施阳曜
2023-03-14

RocksDB可以与Flink支持的任何文件系统一起使用https://ci.apache.org/projects/flink/flink-docs-stable/ops/filesystems/

如果您正在运行Flink,可能需要检查点,然后从中恢复。

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

因此,您可能应该编写如下内容:newrocksdbstatebend(“s3://my bucket”,true) 并将其分配给执行环境。

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

缪志新
2023-03-14

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

几点:

>

  • Flink对工作状态(始终是本地的)和状态快照(检查点和保存点)进行了强有力的区分,前者是本地的(为了可靠性,它们应该存储在分布式文件系统中)。

    RocksDBStateBend使用本地磁盘作为工作状态。其他两个状态后端在Java堆上保持其工作状态。

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

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

    <代码>状态。后端。rocksdb。localdir控制每个本地RocksDB存储其工作状态的位置。

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

  •  类似资料:
    • 我正在使用Apache Flink 1.10.0从RabbitMQ拉数据流,现在我在内存中使用默认检查点配置。现在为了在任务管理器重启时恢复,我需要在文件系统中存储状态和检查点,所有演示都应该使用“hdfs://namenode: 4000/......”,但是现在我没有HDFS集群,我的Apache Flink在kubernetes中运行集群,如何将我的检查点存储在文件系统中? 我阅读了Apac

    • 我试图检查/保存我在EMR上运行的flink状态到AWS上的s3存储桶。请注意: 实例(主节点和核心节点)正确设置了IAM角色,以访问s3 bucket及其内部的所有目录/文件(AmazonS3FullAccess策略附加到该角色,没有任何内容覆盖它) jobmanager日志:

    • 我有多个Kafka主题(多租户),我运行同一个作业运行多次基于主题的数量,每个作业消耗来自一个主题的消息。我已将文件系统配置为状态后端。 假设有3个作业正在运行。这里的检查站是如何工作的?这3个作业是否都将检查点信息存储在同一路径中?如果任何作业失败,该作业如何知道从何处恢复检查点信息?我们过去常常在向flink集群提交作业时提供作业名称。这和它有什么关系吗?一般来说,Flink如何区分作业及其检

    • 使用数据库时,您可以执行< code>snapshot.exists()来检查某些数据是否存在。根据文件,没有类似的储存方法。 https://firebase.google.com/docs/reference/js/firebase.storage.Reference 检查某个文件是否存在于Firebase存储中的正确方法是什么?

    • 我只是做了将我的文件夹初始化为git存储库,然后使用添加了一个远程存储库。现在我想删除这个并添加一个新的存储库。我怎么做?

    • 与这个问题类似,我正在尝试断开我的hg存储库与一个死的远程位置的连接,同时保持本地版本控制。 的汞当量是什么?