我们使用文件系统作为检查点状态后端。以下是我们的设置:
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setStreamTimeCharacteristic(timeCharacteristic);
env.getConfig().setAutoWatermarkInterval(Time.seconds(30).toMilliseconds());
env.enableCheckpointing(Time.seconds(30).toMilliseconds());
CheckpointConfig checkpointConfig = env.getCheckpointConfig();
checkpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
env.setStateBackend(new FsStateBackend(props.getProperty("backendstate.path")));
这在开发过程中工作正常,但是一旦我们部署到生产中,我们发现检查点文件很快占用磁盘空间。我在一个检查点目录中做了一个ls并找到了
chk-10 chk-104 chk-13 chk-18 chk-23 chk-28 chk-32 chk-37 chk-41 chk-46 chk-50 chk-55 chk-6 chk-64 chk-69 chk-73 chk-78 chk-82 chk-87 chk-91 chk-96 chk-100 ... hundreds of them
我想知道是否有办法删除旧的chk-x文件,或者我们必须手动删除它们?
答案 0 :(得分:1)
在部署期间,在" conf / flink-conf.yaml "中设置以下属性:将文件保存到您要保留的最大检查点数:
state.checkpoints.num-retained
理想情况下,它应该大于1,因为如果最后一个检查点损坏,它有助于恢复作业。
有关详情,请查看:Config Options
答案 1 :(得分:0)
你可以尝试这个
CheckpointConfig config = env.getCheckpointConfig();
config.enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
ExternalizedCheckpointCleanup模式配置取消作业时外化检查点会发生什么:
ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION :取消作业时保留外部化检查点。请注意,在这种情况下,您必须在取消后手动清理检查点状态。
ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION:取消作业时删除外部化检查点。只有在作业失败时,检查点状态才可用。
答案 2 :(得分:0)
Flink作业管理器必须能够访问存储文件的节点才能删除它们。 在同一台大机器上运行所有组件或使用DFS作为检查点存储。