一、为什么需要容错
二、state
三、State Backend类型
四、重启策略
当task发生故障时,flink需要重启出错的task以及其它受影响的task,以使用作业恢复到正常执行状态。重启策略可以2种配置
1)配置文件 flink-conf.yaml
restart-strategy.fixed-delay.attempts:3
restart-strategy.fixed-delay.delay:5
2)基于代码配置
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(
5, //尝试重启次数
org.apache.flink.api.common.time.Time.of(5,TimeUnit.SECONDS)));//超时时间
补充:
//1、异常退出,不用重启,默认为该策略
env.setRestartStrategy(RestartStrategies.noRestart());
//2、固定重启次数策略
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(
5, //尝试重启次数
org.apache.flink.api.common.time.Time.of(5,TimeUnit.SECONDS)));//超时时间
//3、频率重启次数(5分钟内,重记了5次,还有异常就退出,否则重新计算)
env.setRestartStrategy(RestartStrategies.failureRateRestart(
5, //尝试重启次数
org.apache.flink.api.common.time.Time.of(5,TimeUnit.MINUTES),
org.apache.flink.api.common.time.Time.of(5,TimeUnit.SECONDS)));//重启之间的时间间隔
//4、基于Checkpoint行为
env.enableCheckpointing(5000);
五、恢复机制
1、默认会状态丢失重新计算
2、打开checkpoint失败恢复状态继续跑
env.enableCheckpointing(5000);//状态存在内存中
#如果要保留cp的内容,需要指定存储方式,如下保存到文件中
env.setStateBackend(new FsStateBackend("file:flink/cpdir",false));//将cp结果保存到文件
3、打开保留checkpoint文件选项,基于checkpoint升级作业
1)修改flink-conf.yaml
state.backend: filesystem
#配置checkpoint&savepoint
state.checkpoints.dir: file:///tmp/chkdir
state.savepoints.dir: file:///tmp/spdir
3配置失败重启策略
restart-strategy: fixed-delay
restart-strategy.fixed-delay.attempts: 3
restart-strategy.fixed-delay.delay: 2 s
#配置checkpoint保存个数
state.checkpoints.num-retained: 2
#配置local recovery for this state backend(任务恢复的方式)
state.backend.local-recovery: true
2)提交任务->(程序异常关闭或手动关闭任务)关闭任务-->恢复任务
bin/flink run -m localhost:4000 -c java类名 jar包路径
#停止flink任务
bin/flink cancel 任务ID
bin/flink run -m localhost:4000 -s checkpoint目录(file:///tmp/chkdir/任务ID/chk-364) -c java类名 jar包路径
4、触发savepoint,基于savepoint升级作业
bin/flink savepoint flink作业ID #创建savepoint
#停止以前的作业,然后从savepoint启动
bin/flink run -m localhost:4000 -s savepoint的目录(file:///flink/savepoint/xxxx) -c 类名 jar包目录
六、运算拓扑变化升级