首页 > 解决方案 > Flink,RocksDBStateBackend 中的 setDbStoragePath 方法是做什么的?

问题描述

我正在使用带有 RocksDBStateBackend 的 flink 1.11,代码如下所示:

RocksDBStateBackend stateBackend = new RocksDBStateBackend("hdfs:///flink-checkpoints", true);
stateBackend.setDbStoragePath(config.getString("/tmp/rocksdb/"));
env.setStateBackend(stateBackend);

我的问题是:

  1. 我的理解是,当DbStoragePath设置好后,Flink 会将所有检查点和状态放在本地磁盘中(在我的情况下/tmp/rocksdb),然后再存储到 hadoophdfs:///flink-checkpoints中。那正确吗?如果它是正确的,我应该总是设置DbStoragePath更好的性能吗?
  2. 因为 Flink 不会删除旧的检查点,所以我有一个工作定期清理旧的检查点。但是如果我设置增量检查点,我不确定这样做是否安全?

标签: apache-flink

解决方案


DbStoragePath是 RocksDB 保持其工作状态的本地磁盘上的位置。默认情况下,将使用 tmp 目录。理想情况下,这应该是最快的可用磁盘——例如 SSD。通常这是通过 配置的state.backend.rocksdb.localdir

如果您使用增量检查点,则将 SST 文件从DbStoragePath复制到state.checkpoints.dir. 否则,完整快照将写入检查点目录并且DbStoragePath不涉及。

Flink 会自动删除旧的检查点,除非取消使用保留检查点的作业。如何安全地删除增量保留的检查点并不明显——您需要以某种方式知道是否仍从最新的检查点引用这些 SST 文件。您可能会在用户邮件列表中寻求建议。


推荐阅读