

# 检查点

> 译者：[flink.sojb.cn](https://flink.sojb.cn/)


## 概览

检查点通过允许恢复状态和相应的流位置使Flink中的状态容错，从而为应用程序提供与无故障执行相同的语义。

有关如何为程序启用和配置检查点的信息，请参阅[检查](https://flink.sojb.cn/dev/stream/state/checkpointing.html)点。

## 保存检查点

默认情况下，检查点不会保存，仅用于从失败中恢复作业。取消程序时会删除它们。但是，您可以配置要保存的定期检查点。根据配置 ，当作业失败或取消时，_不会_自动清除这些_保存的_检查点。这样，如果您的工作失败，您将有一个检查点可以从中恢复。



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



该`ExternalizedCheckpointCleanup`模式配置取消作业时检查点发生的情况：

*   **`ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION`**：取消作业时保存检查点。请注意，在这种情况下，您必须在取消后手动清理检查点状态。

*   **`ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION`**：取消作业时删除检查点。只有在作业失败时，检查点状态才可用。

### 目录结构

与[保存点](savepoints.html)类似，检查点由元数据文件和一些其他数据文件组成，具体取决于状态后台。元数据文件和数据文件存储在`state.checkpoints.dir`配置文件中配置的目录中，也可以为代码中的每个作业指定。

#### 通过配置文件全局配置



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



#### 在构造状态后台时为每个作业配置



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



### 保存点的差异

检查点与[保存](savepoints.html)点有一些差异。他们

*   使用状态后台特定（低级）数据格式，可以是增量式的。
*   不支持Flink特定函数，如重新缩放。

### 从保存的检查点恢复

通过使用检查点的元数据文件，可以从检查点恢复作业，就像从保存[点恢复一样](https://flink.sojb.cn/cli.html#restore-a-savepoint)（请参阅 [保存点恢复指南](https://flink.sojb.cn/cli.html#restore-a-savepoint)）。请注意，如果元数据文件不是自包含的，则JobManager需要访问它所引用的数据文件（请参阅 上面的[目录结构](#directory-structure)）。



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



