Fault-tolerance in Flink | 学习笔记(二)

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 快速学习 Fault-tolerance in Flink

开发者学堂课程【开源 Flink 极客训练营Fault-tolerance in Flink】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/760/detail/13340


Fault-tolerance in Flink


5.异步全局一致性快照算法-Chandy-Lamport

System Requirement

快照过程不影响应用运行

-快照过程中不影响收发消息

-快照过程中不需要停止应用进程每个进程可以记录自己的本地状态可以分布式的对记录的状态进行收集任意进程都可以发起快照

前提条件:nomessageloss/corruption/duplication

-消息有序且不重复(channels are FIFO)

-消息可靠性可以保障

Chandy-Lamport 有两个分布式领域教授他们两在吃饭时提出了一个问题,怎样做异步的全局一致性快照,当天两人喝酒喝多了没有讨论出结果。Lamport 回家睡了,第二天起来后洗澡,在洗澡过程中想到了算法很高兴、很兴奋,随便吃点东西跑到了 Chandy 的办公室,发现 Chandy 准备好了一样的算法等他,最后两人联合发表算法,所有名称为 Chandy-Lamport。

Chandy-Lamport算法流程

发起快照、分布式执行快照、终止快照

发起快照

图片55.png

任意流程都能发起快照,由P1发起快照。

第一步记录本地状态,对本地进行快照,快照后立刻马上没有间隔的向 output channel 发送 marker 消息。marker 消息是特殊消息不同于应用发送的消息。

P1开始记录所有 input channel 的消息,例子里一共两个进程,开始记录C21进程的消息。

分布式执行快照:当P1接收到来自Cki的marker消息(即Pk发给Pi的marker)

如果这是Pi看到的第一个其他管道的marker消息

-Pi记录本地状态(本地快照)

-Pi标记C12管道为空,后续再从P1发送消息不包含在C的消息快照里。

-Pi立刻马上没有间隔的向所有 output channel 发送marker消息

-Pi开始记录所有除Cki之外的input channel消息

(即后续所有来自C的消息不再包含进此次快照)

图片56.png

如果此前Pi已经收到过 marker 消息

-Pi记停止记录Cki的消息,同时将此前记录的所有Cki收到的消息作为Cki在本次快照中的最终状态,进行保存。

图片57.png

终止快照

-所有进程都已经接收到了 marker 消息并记录了本地快照

-所有进程都从N-1个 input channel 里收到了 marker 并记录了这些 input channel 的状态(消息)

-快照收集器(central server)可以开始收集每个部分的快照并形成全局一致性快照

Chandy-Lamport 算法-演示

图片58.png

三个进程的例子,有一些状态是在内部发生的比如A状态与其他进程没有交互,对它进行扩展,认为内部的状态是P1发给自己的消息。或者认为C11是从A到A。

图片59.png

假设在P1发起快照,对本地的状态进行快照,叫做S1。然后立刻马上向所有的 outout channel,也就是P2和P3分别发送 marker 消息。接下来记录所有 input channel 消息。例子里管道2管道3包括自身的消息。P3先收到 marker 消息,P3与P2收到消息时间有差异,物理环境里分布式进程不同时间点之间网络状况不一样,这种情况导致消息到达的时间不同。是P3收到的第一个 marker 消息,首先对自己本地状态进行拍照,与此同时向所有的 output channel 发送 marker 消息,将除了C13之外所有 input channel 的消息开始进行记录。

图片60.png

P1接收到来自P3的 marker,不是第一次看到 marker,因为发送 marker 也认为看到了 marker。将来自C31的管道立刻关闭,并且将目前记录的消息在本次拍照中的状态。管道关闭为后续从P3发来的消息不会记录在本次拍照中。

图片61.png

P2收到了来自P3的消息,是P2接收到的第一个消息,对本地状态进行快照,将C32和B同时立刻马上向所有 output channel 发送消息,最后除了C32其它所有 input channel 的消息。

图片62.png

P2接收到来自P1的消息,不是接收的第一个消息,将所有 input channel 全部关闭记录拍照的状态。

图片63.png

 

P1接收到来自P2的消息,不是第一个接收的 marker,将所有的 input 管道关闭,input  管道记录的消息的状态,一个是内部时间C116管道自己发送给自己的消息,C21H到D之间的消息。

图片64.png

P3接收到P2的消息,不是看到的第一个 marker,将所有的输入管道关闭,记录最终状态,期间有一个点J作为它的状态。

算法终止,因为所有的进程进入到稳定状态,每一个进程输入的管道都关闭。

快照记录了过去时间点的全局一致性状态。

图片65.png

6.Chandy-Lamport &Flink

Flink 是分布式进行的系统,Flink 也采用全局一致性快照来形成检查点,支持故障恢复。

Chandy-Lamport支持强连通图,而 Flink 面向弱连通图

Flink 采用的是一种裁剪的 (tailored)Chandy-Lamport 异步快照算法

Flink 的异步快照算法在 DAG 场景下不需要存储 channel state,从而极大节省快照存储空间。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
7月前
|
传感器 存储 缓存
[尚硅谷flink学习笔记] 实战案例TopN 问题
这段内容是关于如何使用Apache Flink解决实时统计水位传感器数据中,在一定时间窗口内出现次数最多的水位问题,即"Top N"问题。首先,介绍了一个使用滑动窗口的简单实现,通过收集传感器数据,按照水位计数,然后排序并输出前两名。接着,提出了全窗口和优化方案,其中优化包括按键分区(按水位vc分组)、开窗操作(增量聚合计算count)和过程函数处理(聚合并排序输出Top N结果)。最后,给出了一个使用`KeyedProcessFunction`进行优化的示例代码,通过按键by窗口结束时间,确保每个窗口的所有数据到达后再进行处理,提高了效率。
197 1
|
7月前
|
分布式计算 资源调度 Hadoop
Hadoop学习笔记(HDP)-Part.18 安装Flink
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
260 2
Hadoop学习笔记(HDP)-Part.18 安装Flink
|
前端开发 数据可视化 关系型数据库
用 PolarDB - X + Flink 搭建实时数据大屏|学习笔记(三)
快速学习用 PolarDB - X + Flink 搭建实时数据大屏
用 PolarDB - X + Flink 搭建实时数据大屏|学习笔记(三)
|
存储 运维 监控
如何开通实时计算 Flink 版|学习笔记(三)
快速学习如何开通实时计算 Flink 版
如何开通实时计算 Flink 版|学习笔记(三)
|
机器学习/深度学习 SQL 人工智能
实时计算 Flink 训练营场景与应用|学习笔记(三)
快速学习实时计算 Flink 训练营场景与应用
实时计算 Flink 训练营场景与应用|学习笔记(三)
|
SQL 存储 搜索推荐
实时计算 Flink 训练营场景与应用|学习笔记(二)
快速学习实时计算 Flink 训练营场景与应用
实时计算 Flink 训练营场景与应用|学习笔记(二)
|
SQL 存储 弹性计算
实时计算 Flink 与你相约阿里云|学习笔记(二)
快速学习实时计算 Flink 与你相约阿里云
实时计算 Flink 与你相约阿里云|学习笔记(二)
|
传感器 存储 Shell
走进 Apache Flink(二)|学习笔记
快速学习走进 Apache Flink
220 0
走进 Apache  Flink(二)|学习笔记
|
SQL 消息中间件 存储
Flink SQL_Table 介绍与实战(二)|学习笔记
快速学习 Flink SQL_Table 介绍与实战
262 0
Flink SQL_Table 介绍与实战(二)|学习笔记
|
存储 分布式计算 API
Stream Processing with Apache Flink(二)|学习笔记
快速学习 Stream Processing with Apache Flink
169 0