为什么我要把这段话放在最前面呢?因为博主有了大发现,博主在总结学习的过程中,总结了除了 Flink CP、Chandy-Lamport 全局一致性快照算法之外的一种 通用全局一致性快照算法
!!!。
这套 通用算法
包含 Chandy-Lamport 算法
≈ Flink 非对齐 CP 算法
包含 Flink 对齐 CP 算法
。
可能这一套 通用算法
之前已经有人提过了,但是博主是自己在总结 Flink CP、Chandy-Lamport 算法的过程中,逆推总结出来的,并没有借助外力!!!
1.前言
对于很多做离线或者实时数仓的小伙伴来说,我先问几个问题,看看小伙伴萌能回答上来吗?
-
⭐ 你知道状态是什么吗?在离线数据开发的经历中,你碰到过状态的概念吗?
-
⭐ 为什么离线数仓不需要状态,实时数据开发中老是提到状态的概念?
-
⭐ Flink 中的状态、状态后端、全局一致性快照(Checkpoint\Savepoint) 的作用都是什么,这三个概念的关联又是什么?
-
⭐ Flink 是通过什么机制来做 Checkpoint 的?为什么这套机制能够做到故障恢复呢?
-
⭐ Flink Checkpoint 是基于 Chandy-Lamport 算法的,但是 Flink 的实现相比 Chandy-Lamport 算法之间又有哪些优点、缺点?
-
⭐ Flink Checkpoint 用到了 barrier,为什么用了 barrier 做的快照就能保证全局一致性快照的正确性?barrier 到底起到了什么作用?
-
⭐ Flink 对齐 Checkpoint 和非对齐 Checkpoint 的区别是什么?非对齐 Checkpoint 也能保障精确一次吗?
小伙伴们思考一下,都能回答上来么,如果对于某些问题你还有疑问,楼主会通过本篇文章帮你解答这些问题,理清这些概念!
由于本文内容较多,所以博主将本文分为上,中,下三集,本文是中,三集内容是有连接关系的,如果小伙伴在看本文的过程中对有些概念不清楚,可以跳转到上文进行查看:
本文最主要的内容就是解释了:
一个分布式应用是怎么异步做一个全局一致性快照?
2.名词解释
-
⭐ Single-Token conservation:一个最常见的分布式应用,单 Token 流转分布式应用
-
⭐ Process:指分布式应用中的进程,举个 Flink 中的例子就是 TaskManager
-
⭐ Channel:指分布式应用中进程之间的传输通道,举个 Flink 中的例子就是 TaskManager 之间传输数据的网络传输通道
3.分布式应用全局一致性快照要记录的状态内容
首先在分析一个复杂的大数据应用的全局一致性快照之前,我们先以最简单的分布式应用为例。
Single-Token conservation:其有 p 和 q 两个进程,p 可以通过 Channel pq(记为 Cpq) 向 q 发消息,q 可以通过 Channel qp(记为 Cqp) 向 p 发消息,其中有一个叫 token 的消息,在这个系统中一直不停的传输流转,从 p 到 q