Flink Checkpoints 翻译

英文原址

https://ci.apache.org/projects/flink/flink-docs-master/ops/state/checkpoints.html

概述

Checkpoints 保存了流插入屏障时的位置及所有节点处理完该屏障的状态,Flink 能够从 Checkpoints 恢复所有节点状态并从流的对应位置继续消费数据,从而具备状态容错能力。因此,Flink 应用程序也能做到无故障执行。

保留 Checkpoints

Checkpoints 默认不保留,仅用来恢复失败的程序。程序取消后,它们将被删除。你也可以设置保留 Checkpoints,一旦设置后,当程序失败或被取消,系统不会自动删除 Checkpoints,这样,当你的任务失败,你可以通过Checkpoints 恢复。

CheckpointConfig config = env.getCheckpointConfig();
config.enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);

ExternalizedCheckpointCleanup 用来配置当我们取消任务时系统如何处理 Checkpoints

  • ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION: 取消任务时系统保留 Checkpoints。 注意,在你取消任务时要主动清理这些 Checkpoints。
  • ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION: 取消任务时系统删除 Checkpoints。Checkpoints 状态只有在任务失败时可用。

目录结构

和 savepoints 类似, 一个 checkpoint 由一个 meta 数据文件和一些增量数据文件组成. 所有文件存储在配置项 state.checkpoints.dir 所配置的路径中。该配置项可以在配置文件中配置,也可以在任务代码里单独配置。

当前 checkpoint 目录层级如下:

/user-defined-checkpoint-dir
    /{job-id}
        |
        + --shared/
        + --taskowned/
        + --chk-1/
        + --chk-2/
        + --chk-3/
        ...

shared 目录存放多个 checkpoints 共享的一些状态,taskowned 目录存放JobManager 永远不会删除的状态,剩下的路径用来存放单独的 checkpoint 私有数据。

注意: 这个目录结构不是公开的 API ,以后的版本可能会修改

在配置文件中进行全局配置

state.checkpoints.dir: hdfs:///checkpoints/

在代码中配置

env.setStateBackend(new RocksDBStateBackend("hdfs:///checkpoints-data/"));

与 Savepoints 的区别

  • 使用状态后端的底层数据格式,可支持增量
  • 不支持修改并行度

从保存的 checkpoint 恢复

$ bin/flink run -s :checkpointMetaDataPath [:runArgs]

你可能感兴趣的:(Flink Checkpoints 翻译)