系列文章目录
1、为什么要学Checkpoint机制
2、Flink怎么实现容错
3、Checkpoint机制的执行流程
4、重启策略Restart Strategy
5、状态后端State Backend
6、开源Flink案例
文章目录
前言
本文通过案例方式详解-Flink-Checkpoint机制
1、为什么要学Checkpoint机制
因为Flink是流式(实时)计算程序,我们工作中希望Flink程序能够7x24小时运行,同时遇到一些问题/bug以后,能够自动恢复程序的运行。
2、Flink怎么实现容错
Flink由于是实时运行的程序,因此不仅要对中间计算的数据进行容错,还需要对程序进行容错。也就是Flink中的容错分为如下两类:
- 状态后端:对中间计算的数据进行容错
- 重启策略:对程序进行容错,让程序能够自动恢复
3、Checkpoint机制的执行流程
步骤如下:
Flink中Checkpoint执行流程:
1- JobManager中的检查点协调器会将barrier栅栏发送给到source算子
2- source算子接收到栅栏以后,先暂停对数据的处理工作,将算子运行的状态数据先保存到TaskManager上形成State状态数据;同时会向检查点协调器上报数据,在检查点协调器中获得到的数据称之为Checkpoint数据。数据上报完以后,才会恢复对数据的处理。
3- 栅栏会随着数据从source算子一直流动到最后的sink算子
4- 每个算子拿到栅栏以后的处理过程与source算子一样。也就是先暂停对数据的处理,在TaskManager上保存State状态数据,以及向检查点协调器汇报Checkpoint数据。然后才会继续处理数据
5- 直到所有的算子将数据汇报完成,那么这个过程才算结束。
4、重启策略Restart Strategy
重启策略,能够让Flink程序在挂了之后进行自动重启。保证任务容错。既可以在代码中设置,也能够在配置文件中设置,一般推荐使用代码进行设置。
官网链接如下:
https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/ops/state/task_failure_recovery/
Flink有如下的几种重启策略。
- 不重启策略:一般不用
- 固定延迟重启策略:频繁使用
- 失败率重启策略:频繁使用
- 指数延迟重启策略:较少使用
官网文档如下:
4.1 不重启策略
Flink程序不重启,如果遇到异常就挂了。
代码中配置:
env.set_restart_strategy(RestartStrategies.no_restart())
配置文件flink-conf.yaml中的配置:
restart-strategy: none
4.2 固定延迟重启策略
允许Flink程序固定可以重启几次。每次重启的时间间隔是多少。这些参数是自己指定的。
代码中配置:
env = StreamExecutionEnvironment.get_execution_environment()
env.set_restart_strategy(RestartStrategies.fixed_delay_restart(
3, #重启的次数
10000 #延迟时间,这里配置的是10000毫秒
))
如果重启的次数超过了3次,那么不会再给你重启
配置文件flink-conf.yaml中的配置:
restart-strategy: fixed-delay #配置固定延迟重启
restart-strategy.fixed-delay.attempts: 3 #重启的次数
restart-strategy.fixed-delay.delay: 10 s #重启的间隔时间
4.3 失败率重启策略
在一定的时间范围内,重启的次数在允许范围内,那么会一直给你重启。
代码中配置:
env.set_restart_strategy(RestartStrategies.failure_rate_restart(
3, #间隔时间内重启的次数
300000, #时间间隔
10000 #延迟时间,这里配置的是10000毫秒
))
如果在300000毫秒统计时间以内,重启次数小于等于3次,那么会持续的给你进行重启;如果超过,不会再重启。
配置文件flink-conf.yaml中配置:
restart-strategy: fail