这是我参与「第四届青训营 」笔记创作活动的第4天
本次笔记重点内容
-
- 数据流和动态表
-
- Checkpoint
数据流和动态表
动态表:随时间不断变化的表,在任意时刻,可以像查询静态批处理表一样查询它们
流变为表:
连续查询即查询从不终止,查询结果会不断更新,产生新的动态表,如Mary点击网站次数从1变为2,新增Bob、Liz点击记录;查询会有状态,存储每个用户的URL计数(可以理解为当前计数)以便能增加该计数(后续有下一次点击)并且在输入表接受新行时发送新结果。
Checkpoint
Flink 实现各个计算逻辑状态快照算法,也可指一次状态快照
状态快照与恢复
制作快照的时间点
在任何时间都保留状态和数据?× 因为如果运行完一个节点才出现错误,这个节点是不会被保存的,当恢复之前数据之后,source会认为这个节点已经运行完了,就接着运行下一个节点,导致丢失了这个节点的数据处理。
所以状态恢复的时间点应该是等source进入消费位点之后所有数据都被处理过,还有等下游确定完哪些是确认处理了之后,才认为这个状态是完备的,才计入保留。
Chandy-Lamport 算法
有统计偶数和奇数累加和两条流
JobManager(负责协调和管理 Checkpoint)往各个source派发Checkpoint Barrier(用于标识状态快照的制作,也将数据划分成不同的消费区间),source暂时停止且保存自己的状态,向下游继续发送Checkpoint Barrier并告知JM自己状态已经制作完成。算子等待所有上游的Barrier到达后才开始快照操作,已经制作完的上游算子继续处理数据,不会被下游算子所影响。当所有算子都告知JM制作状态完成,整个Checkpoint就结束了。
Checkpoint对作业性能的影响
各个算子制作完成状态快照后就可以正常处理数据,不用等下游算子制作完成快照;在快照制作和Barrier Alignment过程中需要暂停处理数据,增加数据处理延迟不可避免;快照保存的过程中路径可能耗时过长。