检查点
概览
检查点通过允许恢复状态和相应的流位置使Flink中的状态容错,从而为应用程序提供与无故障执行相同的语义。
有关如何为程序启用和配置检查点的信息,请参阅检查点。
保存检查点
默认情况下,检查点不会保存,仅用于从失败中恢复作业。取消程序时会删除它们。但是,您可以配置要保存的定期检查点。根据配置 ,当作业失败或取消时,_不会_自动清除这些_保存的_检查点。这样,如果您的工作失败,您将有一个检查点可以从中恢复。
CheckpointConfig config = env.getCheckpointConfig();
config.enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
该ExternalizedCheckpointCleanup
模式配置取消作业时检查点发生的情况:
-
ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION
:取消作业时保存检查点。请注意,在这种情况下,您必须在取消后手动清理检查点状态。 -
ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION
:取消作业时删除检查点。只有在作业失败时,检查点状态才可用。
目录结构
与保存点类似,检查点由元数据文件和一些其他数据文件组成,具体取决于状态后台。元数据文件和数据文件存储在state.checkpoints.dir
配置文件中配置的目录中,也可以为代码中的每个作业指定。
通过配置文件全局配置
state.checkpoints.dir: hdfs:///checkpoints/
在构造状态后台时为每个作业配置
env.setStateBackend(new RocksDBStateBackend("hdfs:///checkpoints-data/");
保存点的差异
检查点与保存点有一些差异。他们
- 使用状态后台特定(低级)数据格式,可以是增量式的。
- 不支持Flink特定函数,如重新缩放。
从保存的检查点恢复
通过使用检查点的元数据文件,可以从检查点恢复作业,就像从保存点恢复一样(请参阅 保存点恢复指南)。请注意,如果元数据文件不是自包含的,则JobManager需要访问它所引用的数据文件(请参阅 上面的目录结构)。
$ bin/flink run -s :checkpointMetaDataPath [:runArgs]