Flink - Checkpoint使用详解4(保存多个Checkpoint、全局配置存储位置)
一、保存多个 Checkpoint
1,需求说明
(1)默认情况下,如果在任务中开启了 Checkpoint,则 Flink 只会保留最近成功生成的 1 份 Checkpoint 数据。当 Flink 程序故障重启时,可以从最近的这份 Checkpoint 数据来进行恢复。
(2)但有时我们希望能够保留多份 Checkpoint 数据,并能够根据实际需要选择其中一份进行恢复,这样会更加灵活。
- 例如:我们发现最近 2 个小时的数据处理有问题,希望将整个状态还原到 2 小时之前,这样就需要找到 2 个小时之前的 Checkpoint 数据进行恢复了。
2,实现方法
(1)Flink 可以支持保留多份 Checkpoint 数据,只需要在 Flink 的配置文件 flink-conf.yaml 中添加相关配置即可:

(2)例如我这里设置保存最近的 20 份 Checkpoint 数据。
提示:这个配置针对整个客户端有效,只要是在这个客户端上提交的任务,都会使用这个配置。
state.checkpoints.num-retained: 20
(3)提交一个任务测试一下,可用发现 hdfs 中确实保留了该任务最近的 20 份 Checkpoint 数据。

二、通过配置文件对 Checkpoint 保存地址进行全局配置
1,需求说明
在之前样例中我们都是在代码中设置 Checkpoint 后的状态数据的存储位置,如果每一个任务都要添加相关代码还是略显麻烦。其实我们也可以通过配置文件进行全局配置。
2,实现方法
(1)Flink 可以支持保留多份 Checkpoint 数据,只需要编辑 Flink 的配置文件 flink-conf.yaml:

(2)然后在里面添加如下配置即可,其中 hdfs 的路径根据需求自行调整。
state.checkpoints.dir: hdfs://192.168.121.128:9000/flink/checkpoints
(3)后续我们在任务代码中只需要开启 Checkpoint 即可,不需要再指定保存位置。
env.enableCheckpointing(1000*10)