Flink-Checkpoint机制详解:(第41天)

发布于:2024-07-25 ⋅ 阅读:(121) ⋅ 点赞:(0)

系列文章目录

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

网站公告

今日签到

点亮在社区的每一天
去签到