apache-flink - Flink,RocksDBStateBackend 中的 setDbStoragePath 方法是做什么的?
问题描述
我正在使用带有 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
。
如果您使用增量检查点,则将 SST 文件从DbStoragePath
复制到state.checkpoints.dir
. 否则,完整快照将写入检查点目录并且DbStoragePath
不涉及。
Flink 会自动删除旧的检查点,除非取消使用保留检查点的作业。如何安全地删除增量保留的检查点并不明显——您需要以某种方式知道是否仍从最新的检查点引用这些 SST 文件。您可能会在用户邮件列表中寻求建议。
推荐阅读
- c# - C# WPF - 矩形 MouseEnter 和 MouseLeave 事件无法正常工作
- angular - 如何将 stimulsoft js 添加到 webpack angular 5(框架 jhipster)
- python - OpenGL - 一些相交和一些非相交多边形的镶嵌
- tensorflow - tensorflow gpu 仅在 CPU 上运行
- facebook - 没有使用 FB api 在页面列表中获取新的 facebook 页面
- google-cloud-platform - 在 GCP 的编辑后端服务中,“协议”和“命名端口”和“端口号”有什么区别?
- javascript - TypeScript:强制将变量识别为一种类型而不进行强制转换
- linux - Linux,将网页内容另存为文本
- android - 在启动画面中显示 Android 权限
- c++ - 命名参数习语和(抽象)基类