Flink CheckPoint和SavePoint

一、Flink程序恢复机制

简介:程序恢复一般用于网络IO导致流计算出问题,flink自动重启计算,类似于玩游戏时,死亡再复活,一般结合checkpoint使用,如果不用checkpoint,就好比死了之后装备掉落就没了,有了checkpoint,死了之后装备还在!

程序出错未必都是代码问题,由于网络波动程序出错还能自己恢复;

三种恢复策略

在这里插入图片描述

1. 不复活

  • 如果没有开启Checkpoint,Flink即使用不恢复策略;
env.setRestartStrategy(RestartStrategies.noRestart());

  
  
  • 1

2. 固定延迟 (Fixed Delay)

  • 原理:每隔一段时间,尝试恢复一次;超过尝试次数,判定作业失败;

  • 如果开启了Checkpoint,Flink会自动开启程序恢复,并且使用的恢复策略就是固定延迟策略,其默认最大尝试次数为INTEGER.MAX_VALUE

env.setRestartStrategy(
RestartStrategies.fixedDelayRestart(3,Time.seconds(3)));

  
  
  • 1
  • 2

3. 失败率

  • 原理: 在一定时间范围内,尝试恢复的次数超过阈值,判定作业失败;
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
env.setRestartStrategy(RestartStrategies.failureRateRestart(
  3, // max failures per interval
  Time.of(5, TimeUnit.MINUTES), //time interval for measuring failure rate
  Time.of(10, TimeUnit.SECONDS) // delay
));

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

实战演示

在这里插入图片描述
不配置恢复:
在这里插入图片描述
配置后:出错之后 再次重试3次;
在这里插入图片描述


程序恢复相当于给flink程序多增加几条命,但是一旦挂了重启,相当于装备掉落了; 所以一般结合checkpoint一起使用;

保存点(SavePoint)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
(1)Save point和Check point的算法是一样的,用的是barrier对齐算法;而且save point可以认为是比check point多一些额外元数据的检查点。
(2)save point 与 check point 的作用不同

  • checkPoint用于task故障自动重启:某个task挂了,会自动重启task;如果手动cancel job,checkPoint目录也会被删掉。
  • savePoint用于给Job做备份,如果想要手动cancel job,就需要使用savePoint

(3)save point 与check point的启动不同

  • checkpoint是flink自动做的,检查点是jobManager自动发出的,会定时发出checkPoint任务进行存盘
  • savepoint是手动做的;

(4)实际开发中checkPoint和savePoint都需要做

比如要修改已经上线的流计算应用,比如某个地方空指针,增加校验逻辑,只要不修改状态的逻辑,那么可以将程序从保存点启动。

如何从sp或者cp恢复任务?

Checkpoint演示

在这里插入图片描述
(1) IDEA中开发wordcount程序,并且开启checkpoint
在这里插入图片描述
(2)启动程序
由于在windows IDEA下开发的,因此需要导入hdfs的依赖;
直接操作hdfs会有权限问题,hdfs目录文件有用户组的;用hdfs命令修改ck目录权限即可;
执行代码,在端口输入 hello world,会打印hello 1 word 1

(3)查看checkpoint目录文件
在这里插入图片描述
在代码中设置的目录是存放Job的目录;Job启动后,会在此目录下创建一个以JobID命名的目录;也就是说一个Job对应一个CheckPoint目录;
在JobID目录下,有三个目录:

  • chk-7 :此目录后缀每隔一段时间更新一次;时间间隔是代码中设定的;
  • shared
  • taskowned

(3) 关闭flink程序,然后重新启动,再次输入hello word,会发现是重新开始计算的,因为没有用特定的方式恢复


savePoint使用演示

1.第一次打包提交job
在这里插入图片描述
或者命令行提交:
在这里插入图片描述
2. 输入hello word,让程序执行

3.手动设置savepoint,保存状态
在这里插入图片描述
在这里插入图片描述
4.查看savepoint 文件
在这里插入图片描述
5.在输入一些数据,让程序往前推进
6.手动cancel 任务
在这里插入图片描述

  • 手动cancel任务会发现checkpoint目录被删除,因为ck的作用是任务挂了自己重启使用的;如果正常cancel任务,就会把ck删除;所以手动cancel不能够从ck恢复
  • 如果从IDEA 中终止任务,不会删除ck,是因为这种场景下相当于遇到了异常,还没来得及删除JVM就停了

7.从savepoint恢复任务
在这里插入图片描述
在这里插入图片描述
8 再次输入一些数据,会从保存点的结果状态继续执行

ckp

在这里插入图片描述

(1) 设置cancel任务不删除
在这里插入图片描述
(2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值