这是我参与「第四届青训营 」笔记创作活动的的第3天
Exactly—Once和Checkpoint
1. 状态快照与恢复
定期保存和恢复,与电脑差不对的思路
2. 制作快照的时间点
- 状态恢复的时间点:需要等待所有处理逻辑消费完成source保留状态及之前的数据
- 一个简单的快照制作算法:
-
- 暂停处理输入的数据。
-
- 等待后续所有处理算子消费当前已经输入的数据。
-
- 待2处理完成后,作业所有算子赋值自己的状态并保存到远端可靠存储。
如果时间选择不够好,可能存在丢失数据的情况
3. Chandy——lamport算法
(1)快照制作的开始
每一个source算子都接收JM发送的Checkpoint Barrier标识状态快照制作的开始
(2)Source算子的处理
各个source保存自己状态,向所有连接的下游继续发送Checkpoint Barrier,同时的告知JM自己状态已经制作完成
(3)Barrier Alignment
- 算子会等待所有上游的barrier到达后才开始快照的制作
- 已经制作完成的上游算子会继续处理数据,并不会被下游算子制作快照的过程阻塞
(4)快照制作和处理数据的解耦
(5)checkpoint的结果
所有算子都告知JM状态制作完成后,整个Checkpoint就结束了
4. Checkpoint对作业性能的影响
- 解耦了快照制作和数据处理过程,各个算子制作完成状态快照后就可以正常处理数据,不用等下游算子制作完成快照;
- 在快照制作和Barrier Alignment过程中需要暂停处理数据,仍然会增加数据处理延迟;
- 快照保存到远端也有可能极为耗时