Checkpoint|青训营笔记

210 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第4天

本次笔记重点内容

    1. 数据流和动态表
    1. Checkpoint

数据流和动态表

动态表:随时间不断变化的表,在任意时刻,可以像查询静态批处理表一样查询它们 image.png

流变为表: image.png image.png 连续查询即查询从不终止,查询结果会不断更新,产生新的动态表,如Mary点击网站次数从1变为2,新增Bob、Liz点击记录;查询会有状态,存储每个用户的URL计数(可以理解为当前计数)以便能增加该计数(后续有下一次点击)并且在输入表接受新行时发送新结果。 image.png

Checkpoint

Flink 实现各个计算逻辑状态快照算法,也可指一次状态快照

状态快照与恢复

制作快照的时间点

在任何时间都保留状态和数据?× 因为如果运行完一个节点才出现错误,这个节点是不会被保存的,当恢复之前数据之后,source会认为这个节点已经运行完了,就接着运行下一个节点,导致丢失了这个节点的数据处理。

所以状态恢复的时间点应该是等source进入消费位点之后所有数据都被处理过,还有等下游确定完哪些是确认处理了之后,才认为这个状态是完备的,才计入保留。

Chandy-Lamport 算法

image.png 有统计偶数和奇数累加和两条流 image.png JobManager(负责协调和管理 Checkpoint)往各个source派发Checkpoint Barrier(用于标识状态快照的制作,也将数据划分成不同的消费区间),source暂时停止且保存自己的状态,向下游继续发送Checkpoint Barrier并告知JM自己状态已经制作完成。算子等待所有上游的Barrier到达后才开始快照操作,已经制作完的上游算子继续处理数据,不会被下游算子所影响。当所有算子都告知JM制作状态完成,整个Checkpoint就结束了。

Checkpoint对作业性能的影响

各个算子制作完成状态快照后就可以正常处理数据,不用等下游算子制作完成快照;在快照制作和Barrier Alignment过程中需要暂停处理数据,增加数据处理延迟不可避免;快照保存的过程中路径可能耗时过长。