这篇文章主要介绍“Flink的checkpoint与savepoint的区别是什么”,在日常操作中,相信很多人在Flink的checkpoint与savepoint的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flink的checkpoint与savepoint的区别是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
checkpoint 用于flink应用发生故障时从checkpoint中进行恢复,例如当应用发生异常时崩溃,此时JVM不会关掉,而是尝试从检查点进行重启,可以自定义应用的重启策略。当重启失败时,而又想从检查点保存的状态接着运行,执行
flink run -s hdfs://master:8020/flink/checkpoint03/s1/savepoint-0b3f0b-ed13f369aadc -c flink.ceshi /opt/flink_path/sbt-solr-assembly.jar
不同的状态后端,其算子状态和检查点的保存位置都不相同。
Savepoint(保存点):是一种特殊的checkpoint,只不过不像checkpoint定期的从系统中去触发的,它是用户通过命令触发,存储格式和checkpoint也是不相同的,会将数据按照一个标准的格式存储,不管配置什么样,Flink都会从这个checkpoint 恢复
Savepoint 是用户以手工命令的方式触发 Checkpoint,并将结果持久化到指定的存储路径中,其主要目的是帮助用户在升级和维护集群过程中保存系统中的状态数据,避免因为停机运维或者升级应用等正常终止应用的操作而导致系统无法恢复到原有的计算状态的情况,从而无法实现从端到端的 Exactly-Once 语义保证。
1)配置 Savepoints 的存储路径
在 flink-conf.yaml 中配置 SavePoint 存储的位置,设置后,如果要创建指定 Job 的 SavePoint,可以不用在手动执行命令时指定 SavePoint 的位置。
state.savepoints.dir: hdfs:/hadoop101:9000/savepoints
2)在代码中设置算子ID
为了能够在作业的不同版本之间以及 Flink 的不同版本之间顺利升级,强烈推荐通过手动给算子赋予 ID,这些 ID 将用于确定每一个算子的状态范围。如果不手动给各算子指定 ID,则会由 Flink 自动给每个算子生成一个 ID,而这些自动生成的 ID 依赖于程序的结构,并且对代码的更改时很敏感的。因此,强烈建议手动设置 ID。
stream.flatMap(_.split(" ")) .uid("flapMap-001") // 每个算子都指定一个uid,便于从保存点中恢复出算子的状态 .map((_, 1)) .uid("map=001") .keyBy(0) .sum(1) .uid("sum-001") .print()
3)触发 SavePoint
//先启动Job [root@hadoop101 bin]# ./flink run -c com.bjsxt.flink.state.TestSavepoints -d /home/Flink-Demo-1.0-SNAPSHOT.jar //手动触发SavePoint,然后取消作业 [root@hadoop101 bin]# ./flink savepoint 6ecb8cfda5a5200016ca6b01260b94ce [root@hadoop101 bin]# ./flink cancel 6ecb8cfda5a5200016ca6b01260b94ce
4)从保存点中恢复作业
flink run \ -s hdfs://hadoop101:9000/savepoints/savepoint-6ecb8c-e56ccb88576a \ -c com.bjsxt.flink.state.TestSavepoints \ -d /home/Flink-Demo-1.0-SNAPSHOT.jar
到此,关于“Flink的checkpoint与savepoint的区别是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。