Flink学习(十九) 容错机制
主要内容:
一致性检查点(checkpoint)
从检查点恢复到状态
Flink检查点算法
保存点(savepoint)
一致性检查点(checkpoint)

Flink故障恢复机制的核心,就是应用状态的一致性检查点。有状态流应用的一致性检查点,其实就是所有任务的状态,在某个时间点的一份拷贝(可以理解为一份快照),这个时间点,应该是所有任务都恰好处理完一个相同的输入数据的时候。
从检查点恢复状态
1、 在执行流应用程序期间,Flink会定期保存状态的一致性检查点。如果发生故障,Flink将会使用最近的检查点来一致恢复应用程序的状态,并重新启动处理流程。

2、遇到故障之后,第一步就是重启应用,这里在代码中可以设置重启策略。

//设置重启策略 fixedDelayRestart(尝试的次数,两次尝试之间的延迟ms )
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3,500)) //失败率重启
env.setRestartStrategy(RestartStrategies.failureRateRestart(3,org.apache.flink.api.common.time.Time.seconds(300),org.apache.flink.api.common.time.Time.seconds(10)))
3、第二部就是从checkpoint中读取状态,将状态重置,从检查点重新启动应用程序之后,其内部状态与检查点完成时的状态完全相同。

4、第三步,开始消费并处理检查点到发生故障之间的所有数据。这种检查点的保存和恢复机制可以为应用程序状态提供“精确一次”(Exactly-once)的一致性,因为所有算子都会保存检查点并恢复其所有状态。这样一来,所有的输入流就都会被重置到检查点完成时的位置。

检查点的实现算法
1、一种简单的想法:暂停应用,保存状态到检查点,在重新恢复应用
2、Flink的改进实现:基于Chandy-Lamport算法的分布式快照,将检查点的保存和数据处理分离开,不暂停整个应用。
检查点分界线(Checkpoint Barrier):Flink的检查点算法用到了一种称为分界线(barrier)的特殊数据形式,用来把一条流上的数据按照不同的检查点分开。分界线之前到来的数据导致的状态更改,都会被包含在当前分界线所属的检查点中;而基于分界线之后的数据导致的所有更改,就会包含在之后的检查点中。
算法流程:
1、

2、

3、

4、

5、

6、

7、

代码中设置体现:
val env = StreamExecutionEnvironment.getExecutionEnvironment
env.setParallelism(1)
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
//开启checkpoint 传入参数代表每隔多久进行checkpoint
env.enableCheckpointing(60000)
env.getCheckpointConfig.setCheckpointingMode(CheckpointingMode.AT_LEAST_ONCE)
env.getCheckpointConfig.setCheckpointTimeout(100000)
//checkpoint失败的时候,是否将整个job给消灭掉 默认是true 是消灭了
env.getCheckpointConfig.setFailOnCheckpointingErrors(false)
//当前最大同时进行checkpoint的数量 (可能间隔太小 处理时间又长)默认是1
env.getCheckpointConfig.setMaxConcurrentCheckpoints(1)
//两个checkpoint的最小时间间隔
env.getCheckpointConfig.setMinPauseBetweenCheckpoints(100)
//开启checkpoint外部持久化 本身checkpoint如果job失败了,外部的checkpoint是会被清理的
//开启后,即使是job任务失败了,必须手动的清理才会清掉
//DELETE_ON_CANCELLATION 手动取消就没了
//RETAIN_ON_CANCELLATION 即使手动了 也要留着
env.getCheckpointConfig.enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION)
Flink学习(十九) 容错机制的更多相关文章
- Storm学习笔记 - 消息容错机制
Storm学习笔记 - 消息容错机制 文章来自「随笔」 http://jsynk.cn/blog/articles/153.html 1. Storm消息容错机制概念 一个提供了可靠的处理机制的spo ...
- 总结Flink状态管理和容错机制
本文来自8月11日在北京举行的 Flink Meetup会议,分享来自于施晓罡,目前在阿里大数据团队部从事Blink方面的研发,现在主要负责Blink状态管理和容错相关技术的研发. 本文主要内容如 ...
- Flink状态管理和容错机制介绍
本文主要内容如下: 有状态的流数据处理: Flink中的状态接口: 状态管理和容错机制实现: 阿里相关工作介绍: 一.有状态的流数据处理# 1.1.什么是有状态的计算# 计算任务的结果不仅仅依赖于输入 ...
- 强化学习(十九) AlphaGo Zero强化学习原理
在强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)中,我们讨论了MCTS的原理和在棋类中的基本应用.这里我们在前一节MCTS的基础上,讨论下DeepMind的AlphaGo Zero强化学 ...
- Spring学习(十九)----- Spring的五种事务配置详解
前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...
- Scala学习十九——解析
一.本章要点 文法定义中的二选一.拼接.选项和重复在Scala组合子解析器中对应|.~.opt和rep 对于RegexParsers而言,字符串字面量和正则表达式匹配的是词法单元 用^^来处理解析结果 ...
- MYSQL数据库学习十六 安全性机制
16.1 MYSQL数据库所提供的权限 16.1.1 系统表 mysql.user 1. 用户字段 Host:主机名: User:用户名: Password:密码. 2. 权限字段 以“_priv”字 ...
- python学习(十九)常见的第三方库
原文链接:http://www.limerence2017.com/2017/12/28/python19/#more 介绍几个python中常见的第三方库. Pillow Pillow简称PIL,是 ...
- JavaWeb---总结(十九)Session机制
一.术语session session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session.有时候我们可 ...
- Android学习十九:ContentProvider初步
一.Content Provider基本概念 1.ContentProvider为存储和获取数据提供了统一的接口.ContentProvide对数据进行封装.不用关心数据存储的细节.使用表的形式来组织 ...
随机推荐
- Lummmax 雷曼克斯 翔龙 X15 专业对讲机常用功能
Lummmax 雷曼克斯 翔龙 X15 专业对讲机常用功能 工作模式切换 ESC/M 在频率模式 (VFO) 与信道模式之间切换 编辑信道 在频率模式 (VFO) 下,输入目标频率并进行相关设置之后, ...
- 【转载】FISCO BCOS 区块链浏览器的部署
https://www.cnblogs.com/linbin524/p/11101801.html 前提 前面我们已经通过底层部署.sdk调测.自定义智能合约编写与部署.联合单元测试调测,已经初步对F ...
- Qt/C++编写推流综合应用示例(文件推流/桌面推流/本地摄像头/网络摄像头/转发推流/视频分发)
一.功能特点 1.1 文件推流 指定网卡和监听端口,接收网络请求推送音视频等各种文件. 实时统计显示每个文件对应的访问数量.总访问数量.不同IP地址访问数量. 可指定多种模式,0-直接播放.1-下载播 ...
- Qt编写地图综合应用49-地图类型(街道图、卫星图)
一.前言 地图类型主要是两种,街道图和卫星图,平时我们看到的默认的都是街道图,无论是街道图还是卫星图,都是一张张图片文件组成的,级别越高,图片越是清晰,一般都会支持到19级的地图,相当于精确到20米内 ...
- Qt编写安防视频监控系统56-数据库分页
一.前言 在视频监控系统中也需要对日志记录进行查询显示,有时候查询到的记录并不能一页显示完,最好的做成翻页显示,如果所有记录都在一页显示通过滚动条查看,不是很符合用户习惯,比如搜索引擎的记录也都是分页 ...
- OpenCV4.1.0中的GPU版本的SURF特征点提取类的命名空间、所在头文件和类名
OpenCV4.1.0中的GPU版本的SURF特征点提取类的命名空间.所在头文件和类名情况如下: 类名:cv::cuda::SURF_CUDA 所在的命名空间:cv::cuda 所在头文件:$\bui ...
- MySQL数据库建库时SQL语句中数据库名、表名用引号的问题以及COLLATE utf8_general_ci的含义
一.MySQL数据库建库时SQL语句中数据库名.表名用引号的问题解释:在创建MySQL数据库和表时,数据库名.表名和字段名外面的符号 ` 不是单引号,而是英文输入法的反单引号,同键盘~同一位置.为了避 ...
- 树莓派cm4更新bootloader(eeprom)
cm4不能在系统里通过 rpi-eeprom-update 指令进行升级,也不能通过 update 进行更新,只能通过recovery模式进行更新. 以下为Windows的升级方式. Setp 1:下 ...
- CH32V203F6P6-TSSOP20测试之02---点灯成功
一.问题思考 直接用官方提供的例程,为何下载程序后没有什么响应,难道自己设计的电路有什么不妥? 于是,对于电路进行具体分析,结果发现: 第一.官方的BOOT0采用杜邦线连接,在芯片手册好像找不到关于B ...
- 记录一下vue的插件
2022.1.25今天记录下下载文件的插件 js-file-download 以防遗忘 首先npm install js-file-download --save 其次引入import file ...