Fault-tolerance in Flink学习笔记(比较乱)
一、有状态的流计算
1.1 什么是流计算
持续性的流式数据,源源不断的发送到我们的程序(计算引擎)中,做一定的运算,最后将计算的结果返回或者保存的计算。
1.2 什么是分布式流计算
在流计算的基础上,对数据流进行分布式的并发处理:
1.3 什么是流计算中的状态
需要记录并处理多个事件,或者后面的数据要和前面的数据有一定的关联关系才能得到结果,这就是有状态的流计算。
1.4 流计算的状态主要有以下几种
二、全局一致性快照
2.1 什么是全局快照
同一时间,同一地点,全局的一个状态,就叫做全局快照
2.2 为什么需要全局快照
2.3 全局快照的例子
- 管道C12:P1 发消息给P2的通道
- 管道C21:P2发消息给P1的通道
对于P1来说,C12是它的OutputChannel,C21是它的InPutChannel
Chandy-Lamport算法:
P1发起,
-
本地快照S1
-
发送Maker message
-
记录inputChannel
-
假如P3先收到Maker消息(第一次收到消息)
-
P3首先记录本地状态快照 ,然后将C13标记closed转态(关闭的意思就是后续发来的消息不记录本次快照之中)
-
OutPutChannel 发送Maker message
-
然后将除了C13之外所有的iputChannel 状态记录一下
-
P1 接到P3来的maker
-
这是P1第二次接到Maker消息,因为发送Maker 也算是看到Maker了
-
然后将来自C31 inputChannel 关闭(关闭的意思就是后续发来的消息不记录本次快照之中)
-
然后将除了C31之外的所有inputChannel 记录消息当做状态
-
P2 接收到P3
-
P2第一次收到Maker 消息
-
对本地状态进行快照 关闭C32
-
除了C32 之外的所有inputchannel 的状态当做状态
。。。。
直到形成一个闭环,这次全局快照就算完成了。
过去时间点的某一个全局状态
Flink的容错机制
Checkpoint barrier就相当于Chandy-Lamport算法的maker message
一个算子有多个输入,一个barrier到达后,会暂时阻塞这个输入,等待另外的barrier,可能会造成数据反压。