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对数据进行封装.不用关心数据存储的细节.使用表的形式来组织 ...
随机推荐
- 深入理解 HTTP 协议:从基础到实践全解析
在当今数字化时代,HTTP 协议如同互联网世界的"语言",支撑着无数网页浏览.数据传输和在线交互.无论你是初涉编程的新手,还是经验丰富的开发者,深入掌握 HTTP 协议都至关重要. ...
- R数据分析:网状meta分析的理解与实操
meta分析之前有给大家写过,但是meta分析只能比较两个方法.经常是被用来证明在现有研究中显示矛盾结果的干预方法到底有没有效的时候使用,通过证据综合得到某种干预到底有没有用的结论.但是如果我要证明好 ...
- Mplus数据分析:分段潜增长模型,看jama如何玩转纵向数据的轨迹
今天给大家介绍分段潜增长模型的原理和做法,之前我有给大家写增长混合和潜增长,它们的主要的局限在于轨迹都是连续的不能分段,在于对phasic的现象把握其实还是不够的,比如儿童认知的发展,按照理论,它是可 ...
- k3s 轻量级Kubernetes 安装实例
k3s是由Rancher开发的轻量级Kubernetes,支持嵌入式系统,边缘计算节点等 易于安装,所有组件都在一个小于100MB的二进制文件中,占用资源低 1.1.简单安装试例 curl -sfL ...
- TensorFlow 中 conv2d 的确切含义
在读: <TensorFlow:实战Google深度学习框架> 才云科技Caicloud, 郑泽宇, 顾思宇[摘要 书评 试读]图书https://www.amazon.cn/gp/pro ...
- 【WEB前端】【报错解决】This request has been blocked; the content must be served over HTTPS.
问题描述 部署WEB项目后,开启了强制HTTPS,产生如下错误: Mixed Content: The page at 'https://ask.mllt.vip/index.php/data1.ht ...
- Shell三元表达式
Shell三元表达式 shell能否实现三元表达式呢?像下面这样: int a = (b == 5) ? c : d; 实现方法: a=$([ "$b" == 5 ] & ...
- IDEA和GIT关于文件中LF和CRLF问题
问题描述:项目软件安装shell脚本上git仓库管理,但拉取后,上linux运行报错. 问题思考:根据描述信息可以查看到\r字样,初步判别为换行符导致 1.将脚本文件移动至notepad++中,通过视 ...
- 一个GLSL Shader的格式化算法(LALR解析器)
一个GLSL Shader的格式化算法(LALR解析器) 在进行OpenGL程序开发时,我需要自行解析`string`类型的Shader代码,抽取出里面的某些变量名和subroutine名. 由于找不 ...
- 鸿蒙OS高级技巧:打造个性化动态Swiper效果
前言 在鸿蒙OS的广阔天地中,开发者们有机会创造出令人惊叹的用户体验.最近,我着手设计一款具有独特滑动效果的Swiper组件,它在滑动时能够迅速进入视野,同时巧妙地将旧的cell隐藏到视线之外.本文将 ...