外部检查点(Flink 1.2)

在 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