Flink - [07] 容错机制
题记部分
一、一致性检查点

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

(1)遇到故障之后,第一步就是重启应用

(2)第二步是从checkpoint中读取状态,将状态重置。从检查点重新启动应用程序后,其内部状态与检查点完成时的状态完全相同。

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

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

JobManager会向每个Source任务发送一条带有新检查点ID的信息,通过这种方式来启动检查点

数据源将它们的状态写入检查点,并发出一个检查点barrier,状态后端在状态写入检查点之后,会返回通知给source任务,source任务就会向JobManager确认检查点完成。

分界线对齐:barrier向下游传递,sum任务会等待所有输入分区的barrier到达,对于barrier已经到达的分区,继续到达的数据会被缓存,而barrier尚未到达的分区,数据会被正常处理。

当收到所有输入分区的barrier时,任务就将其状态保存到状态后端的检查点中,然后将barrier继续向下游转发

向下游转发检查点barrier后,任务继续正常的数据处理

Sink任务向JobManager确认状态保存到checkpoint完毕,当所有任务都确认已成功将状态保存到检查点时,检查点就真正完成了

五、保存点(Savepoints)
(1)Flink还提供了可以自定义的镜像保存功能,就是保存点(savepoints)
(2)原则上,创建保存点使用的算法与检查点完全相同,因此保存点可以认为就是具有一些额外元数据的检查点
(3)Flink不会自动创建保存点,因此用户(或者外部调度程序)必须明确地触发创建操作
(4)保存点是一个强大的功能。除了故障恢复外,保存点可以用于:有计划的手动备份,更新应用程序,版本迁移,暂停和重启应用,等等。
— 业精于勤荒于嬉,行成于思毁于随 —
Flink - [07] 容错机制的更多相关文章
- Apache Flink - 数据流容错机制
Apache Flink提供了一种容错机制,可以持续恢复数据流应用程序的状态.该机制确保即使出现故障,程序的状态最终也会反映来自数据流的每条记录(只有一次). 从容错和消息处理的语义上(at leas ...
- Flink原理(五)——容错机制
本文是博主阅读Flink官方文档以及<Flink基础教程>后结合自己理解所写,若有表达有误的地方欢迎大伙留言指出. 1. 前言 流式计算分为有状态和无状态两种情况,所谓状态就是计算过程中 ...
- Flink 容错机制与状态
简介 Apache Flink提供了一种容错机制,可以持续恢复数据流应用程序的状态. 该机制确保即使出现故障,经过恢复,程序的状态也会回到以前的状态. Flink 主持 at least once 语 ...
- Flink资料(2)-- 数据流容错机制
数据流容错机制 该文档翻译自Data Streaming Fault Tolerance,文档描述flink在流式数据流图上的容错机制. ------------------------------- ...
- Flink学习(三)状态机制于容错机制,State与CheckPoint
摘自Apache官网 一.State的基本概念 什么叫State?搜了一把叫做状态机制.可以用作以下用途.为了保证 at least once, exactly once,Flink引入了State和 ...
- 总结Flink状态管理和容错机制
本文来自8月11日在北京举行的 Flink Meetup会议,分享来自于施晓罡,目前在阿里大数据团队部从事Blink方面的研发,现在主要负责Blink状态管理和容错相关技术的研发. 本文主要内容如 ...
- Flink状态管理和容错机制介绍
本文主要内容如下: 有状态的流数据处理: Flink中的状态接口: 状态管理和容错机制实现: 阿里相关工作介绍: 一.有状态的流数据处理# 1.1.什么是有状态的计算# 计算任务的结果不仅仅依赖于输入 ...
- 关于 Flink 状态与容错机制
Flink 作为新一代基于事件流的.真正意义上的流批一体的大数据处理引擎,正在逐渐得到广大开发者们的青睐.就从我自身的视角看,最近也是在数据团队把一些原本由 Flume.SparkStreaming. ...
- 【大数据面试】Flink 04:状态编程与容错机制、Table API、SQL、Flink CEP
六.状态编程与容错机制 1.状态介绍 (1)分类 流式计算分为无状态和有状态 无状态流针对每个独立事件输出结果,有状态流需要维护一个状态,并基于多个事件输出结果(当前事件+当前状态值) (2)有状态计 ...
- [白话解析] Flink的Watermark机制
[白话解析] Flink的Watermark机制 0x00 摘要 对于Flink来说,Watermark是个很难绕过去的概念.本文将从整体的思路上来说,运用感性直觉的思考来帮大家梳理Watermark ...
随机推荐
- 【位运算】codeforces 1775 C. Interesting Sequence
题意 输入一个正整数 \(T(1 \leq T \leq 2000)\),代表 \(T\) 组测试用例.对于每个测试用例: 输入两个整数 \(n, m(0 \leq n, m \leq 10^{18} ...
- 金Gien乐道 | 8月热点回顾
中电金信2023年中工作会议:加快推进以"源启"为基石的业务模式转型 8月12日,中电金信2023年中工作会议在上海召开.会议贯彻落实中国电子2023年中工作会议精神,总结上半 ...
- Dockerr安装Oracle以及使用DBeaver连接
拉取镜像 pull container-registry.oracle.com/database/free:latest 创建容器 说明一下我现在的最新版本是23 docker run -d --na ...
- 【NAS】Docker Gitea+SakuraFrp+绿联DPX4800标 搭建私有代码托管平台
本文主要分享 Gitea的一些设置,和Https的实现. Gitea的一些设置 映射 网络 HTTPS的实现 先准备好一个域名,建议准备一个1Panel 创建一个AC账户然后点击申请证书,手动解析. ...
- shell中字符串比较和模糊比较说明
shell字符串比较说明 1 完全比较方法(完全匹配) if [ "$soure" == "$dest" ]; then echo "is ==&qu ...
- Error: Application Server not specified
在IDEA中tomcat不能运行,点开Edit Configuration发现如下图情况:tomcat图标猫上有个红叉,且下面有警告提示:Error: Application Server not s ...
- Not all slots covered! Only 5461 slots are available. Set checkSlotsCoverage = false to avoid this check
Not all slots covered! Only 5461 slots are available. Set checkSlotsCoverage = false to avoid this c ...
- Qt编写的项目作品10-本地摄像头综合应用示例
一.功能特点 同时支持 QCamera.ffmpeg.v4l2 三种内核解析本地摄像头. 提供函数 findCamera 自动搜索环境中的所有本地摄像头设备,搜索结果信号发出. 支持自动搜索和指定设备 ...
- 小洋的Python入门笔记😀
小洋的python入门笔记 起因:发现自己前三年做的Python项目很多都是现做先学的,修改理解语法错误多依仗对C/C++的理解,对python缺乏一个系统的学习.趁此有空,补上! 特别鸣谢:B站找到 ...
- k8s集群部署项目完整过程记录
将k8s-web项目制作成镜像 构建 study/k8s-web:1.0 镜像 构建java环境并上传jar包 docker pull java:8u111 mkdir /usr/dockerfile ...