Savepoint与Checkpoint的区别

1、Checkpoint

自动触发:Checkpoint是Flink中用于容错的机制,通常由系统定期自动触发。它会保存作业的状态,在作业发生故障时,Flink可以通过恢复Checkpoint的状态来重新启动作业。

存储位置:Checkpoint的状态存储通常会写入到外部持久化存储中(例如HDFS、S3、NFS等),这也是Flink容错的一部分。

恢复:Flink在作业失败时会自动从最近的Checkpoint恢复,并继续执行,保证作业的精确一次语义。

保留策略:Flink会根据配置的检查点保留策略自动清理旧的检查点,保持系统的存储空间不被占满。

2、Savepoint

手动触发:与Checkpoint不同,Savepoint是由用户手动触发的,通常用于作业升级或故障恢复等特殊场景。Savepoint提供了更高的灵活性和控制性。

作业的持久保存:Savepoint是作业状态的持久化快照,可以作为一种“备份”,保存作业状态,以便以后进行恢复,尤其在进行作业重启、升级或迁移时使用。

存储位置:Savepoint的存储位置可以与Checkpoint相同,但通常会使用用户指定的位置,确保恢复时的准确性。

如何利用Savepoint进行作业的手动恢复

1、触发Savepoint

​ 可以通过Flink的命令行工具或者Flink的REST API来手动触发Savepoint。例如,使用flink savepoint命令,可以指定保存位置。

示例命令:

flink savepoint :job_id --target-directory /path/to/savepoint/directory

2、停止当前作业

​ 在恢复作业之前,通常需要停止当前的Flink作业。这可以通过Flink Web UI或命令行工具来完成:

flink cancel :job_id

3、从Savepoint恢复作业

​ 在Flink中恢复作业时,可以指定使用之前保存的Savepoint作为恢复点。通过指定Savepoint路径,可以从该状态恢复作业的执行。

​ 使用命令行进行恢复时,通常使用flink run命令,指定Savepoint路径:

flink run -s /path/to/savepoint/directory :job.jar

4、作业恢复后的行为

​ 作业从指定的Savepoint路径恢复后,Flink会加载保存的状态并从那里继续执行。这样,作业能够恢复到Savepoint保存时的精确状态,保证没有丢失任何数据。

​ Savepoint是用户主动触发的作业状态快照,主要用于作业的手动恢复或升级场景,而Checkpoint是Flink系统自动进行的容错机制,保证作业的容错性和高可用性。通过Savepoint,用户可以精准地控制作业状态的保存与恢复。