SavePoint是一个重量级的Checkpoint,你可以把它当做在某个时间点程序状态全局镜像,以后程序在进
行升级,或者修改并发度等情况,还能从保存的状态位继续启动恢复。可以保存数据源offset,
operator操作状态等信息,可以从应用在过去任意做了savepoint的时刻开始继续消费。
Checkpint和SavePoint 概念:
Checkpoint 是 自动容错机制 ,
Savepoint 程序全局状态镜像 。
目的: Checkpoint 是程序自动容错,快速恢复 。
Savepoint是 程序修改后继续从状态恢复,程序升级 等。
用户交互:Checkpoint 是 Flink 系统行为 。
Savepoint是用户触发。 状态文件保留策略:
Checkpoint默认程序删除,可以设置CheckpointConfig中的参数进行保留 。
Savepoint会一直保存,除非用户删除 。
SavePoint
用户手动执行,是指向Checkpoint的指针,不会过期,在集群升级/代码迁移等情况下使用。
注意:为了能够在作业的不同版本之间以及 Flink 的不同版本之间顺利升级,强烈推荐程序员通过
uid(String) 方法手动的给算子赋予 ID,这些 ID 将用于确定每一个算子的状态范围。如果不手动给各算
子指定 ID,则会由 Flink 自动给每个算子生成一个 ID。只要这些 ID 没有改变就能从保存点
(savepoint)将程序恢复回来。而这些自动生成的 ID 依赖于程序的结构,并且对代码的更改是很敏感
的。因此,强烈建议用户手动的设置 ID。
savepoint的使用
1:在flink-conf.yaml中配置Savepoint存储位置 不是必须设置,但是设置后,后面创建指定Job的Savepoint时,可以不用在手动执行命令时指定 Savepoint的位置 state.savepoints.dir: hdfs://namenode:9000/flink/savepoints
2:触发一个savepoint【直接触发或者在cancel的时候触发】
停止程序:bin/flink cancel -s [targetDirectory] jobId [-yid yarnAppId]【针对on yarn 模式需要指定-yid参数】
3:从指定的savepoint启动
job bin/flink run -s savepointPath [runArgs]