Flink,RocksDBStateBackend中的setDbStoragePath方法是做什么的?
Flink, what does method setDbStoragePath do in RocksDBStateBackend?
我正在使用带有 RocksDBStateBackend 的 flink 1.11,代码如下所示:
RocksDBStateBackend stateBackend = new RocksDBStateBackend("hdfs:///flink-checkpoints", true);
stateBackend.setDbStoragePath(config.getString("/tmp/rocksdb/"));
env.setStateBackend(stateBackend);
我的问题是:
- 我的理解是,当设置
DbStoragePath
时,Flink会将所有检查点和状态放在本地磁盘中(在我的例子中是/tmp/rocksdb
),然后再存储到hadoop hdfs:///flink-checkpoints
。那正确吗?如果正确,我是否应该始终设置 DbStoragePath
以获得更好的性能?
- 因为 Flink 不会删除旧的检查点,所以我有一个工作是定期清理旧的检查点。但是我不确定如果我设置增量检查点这样做是否安全?
DbStoragePath
是RocksDB在本地磁盘上保存工作状态的位置。默认情况下,将使用 tmp 目录。理想情况下,这应该是最快的可用磁盘——例如 SSD。通常这是通过 state.backend.rocksdb.localdir
.
配置的
如果您使用的是增量检查点,则会将 DbStoragePath
中的 SST 文件复制到 state.checkpoints.dir
。否则完整的快照将写入检查点目录并且 DbStoragePath
不涉及。
Flink 会自动删除旧检查点,除非在取消使用保留检查点的作业之后。如何安全地删除一个增量的、保留的检查点并不明显——您需要以某种方式知道是否仍然从最新的检查点引用这些 SST 文件中的任何一个。您可以在用户邮件列表上寻求建议。
我正在使用带有 RocksDBStateBackend 的 flink 1.11,代码如下所示:
RocksDBStateBackend stateBackend = new RocksDBStateBackend("hdfs:///flink-checkpoints", true);
stateBackend.setDbStoragePath(config.getString("/tmp/rocksdb/"));
env.setStateBackend(stateBackend);
我的问题是:
- 我的理解是,当设置
DbStoragePath
时,Flink会将所有检查点和状态放在本地磁盘中(在我的例子中是/tmp/rocksdb
),然后再存储到hadoophdfs:///flink-checkpoints
。那正确吗?如果正确,我是否应该始终设置DbStoragePath
以获得更好的性能? - 因为 Flink 不会删除旧的检查点,所以我有一个工作是定期清理旧的检查点。但是我不确定如果我设置增量检查点这样做是否安全?
DbStoragePath
是RocksDB在本地磁盘上保存工作状态的位置。默认情况下,将使用 tmp 目录。理想情况下,这应该是最快的可用磁盘——例如 SSD。通常这是通过 state.backend.rocksdb.localdir
.
如果您使用的是增量检查点,则会将 DbStoragePath
中的 SST 文件复制到 state.checkpoints.dir
。否则完整的快照将写入检查点目录并且 DbStoragePath
不涉及。
Flink 会自动删除旧检查点,除非在取消使用保留检查点的作业之后。如何安全地删除一个增量的、保留的检查点并不明显——您需要以某种方式知道是否仍然从最新的检查点引用这些 SST 文件中的任何一个。您可以在用户邮件列表上寻求建议。