检查点通过恢复状态和对应流位置来实现 Flink
状态容错,从而为应用程序提供与无故障执行相同的语义。
请参阅检查点以了解如何为你的应用程序启用和配置检查点。
默认情况下检查点不会持久化存储在外部系统中,只是用来从故障中恢复作业。当一个程序被取消时它们会被删除。但是,你可以配置检查点定期持久化存储在外部系统中,类似于保存点(savepoints
)。这些外部持久化的检查点将其元数据写入持久性存储中,即使在作业失败时也不会自动清除。这样,如果你的作业失败时,你会有一个检查点用于恢复作业。
CheckpointConfig config = env.getCheckpointConfig();
config.enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
ExternalizedCheckpointCleanup
模式配置当你取消作业时外部检查点如何操作:
(1) ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION
:作业取消时保留外部检查点。请注意,在这种情况下,你必须手动清除取消后的检查点状态。
(2) ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION
: 作业取消时删除外部检查点。检查点状态只有在作业失败时才可用。
与保存点类似,外部检查点由元数据文件组成,一些其他数据文件(取决于状态后端)。外部检查点元数据的目标目录是由配置属性state.checkpoints.dir
确定的,目前它只能通过配置文件来设置。
state.checkpoints.dir: hdfs:///checkpoints/
该目录包含恢复检查点所需的检查点元数据。对于MemoryStateBackend
,这个元数据文件是独立的(self-contained
),不需要其他文件。
FsStateBackend
和 RocksDBStateBackend
需要写到不同的数据文件中,只需将这些文件的路径写入元数据文件。这些数据文件存储在状态后端指定的路径上。
env.setStateBackend(new RocksDBStateBackend("hdfs:///checkpoints-data/");
外部检查点与保存点有一些差异。他们
Flink
部分功能(如重新调整)。作业可以通过使用检查点的元数据文件从外部检查点中恢复,就像从保存点恢复一样(请参阅保存点恢复)。请注意,如果元数据文件不是独立的,jobmanager
需要访问它所引用的数据文件(参见上面的目录结构)。
$ bin/flink run -s :checkpointMetaDataPath [:runArgs]
备注:
Flink版本:1.4
术语翻译:
术语 | 翻译 |
---|---|
Checkpoints | 检查点 |
Externalized Checkpoints | 外部检查点 |
savepoints | 保存点 |
原文:https://ci.apache.org/projects/flink/flink-docs-release-1.4/ops/state/checkpoints.html