外部检查点(Flink 1.2)
在 1.2 之前,在作业终止/取消/持续故障之后保持状态/保留检查点的唯一方法是通过手动触发的保存点。版本 1.2 引入了持久检查点。
持久检查点的行为与常规定期检查点非常相似,但以下区别除外:
- 他们将元数据保存到持久存储(如保存点)。
- 当拥有的工作永久失败时,它们不会被丢弃。此外,它们可以配置为在取消作业时不被丢弃。
因此它与保存点非常相似; 实际上,保存点只是带有更多信息的外部化检查点。
重要提示 :目前,Flink 的检查点协调员仅保留最后一个成功完成的检查点。这意味着每当新检查点完成时,最后完成的检查点将被丢弃。这也适用于外部化检查点。
组态
存储有关[外化]检查点的元数据的地方是在 flink-conf.yaml
中配置的(并且不能通过代码覆盖):
# path to the externalized checkpoints
state.checkpoints.dir: file:///tmp/flink-backend/ext-checkpoints
请注意,此目录仅包含还原检查点所需的检查点元数据。实际的检查点文件仍存储在其配置的目录中(即 state.bachend.fs.checkpointdir
属性)。
用法
你需要使用流环境的 getCheckpointConfig()
方法在代码中显式启用外部检查点:
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// enable regular checkpoints
env.enableCheckpointing(5000); // every 5 sec.
// enable externalized checkpoints
env.getCheckpointConfig()
.enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
可用的 ExternalizedCheckpointCleanup
模式是:
RETAIN_ON_CANCELLATION
:最后一个检查点及其元数据保留在取消作业上; 事后清理是你的责任。DELETE_ON_CANCELLATION
:取消时删除最后一个检查点,这意味着只有在应用程序失败时才可用。
要从外部化检查点继续,请使用保存点语法。例如:
flink run -s /tmp/flink-backend/ext-checkpoints/savepoint-02d0cf7e02ea app.jar