汽车之家如何做团购网站,贵阳网站建设葫芦岛,公司名字注册查询,企业网站的用户需求分析文章目录知识点反压CheckpointBarrierAligned CheckpointUnaligned Checkpoint核心思想实现原理UC同步阶段UC异步阶段知识点
反压
反压是流式系统中关于处理能力的动态反馈机制#xff0c;并且是从下游到上游的反馈#xff0c;一般是在实时数据处理的过程中#xff0c;上游…
文章目录知识点反压CheckpointBarrierAligned CheckpointUnaligned Checkpoint核心思想实现原理UC同步阶段UC异步阶段知识点
反压
反压是流式系统中关于处理能力的动态反馈机制并且是从下游到上游的反馈一般是在实时数据处理的过程中上游节点的生产速度大于下游节点的消费速度。在Flink中反压主要有两个部分跨TaskManager的反压过程和TaskManager内的反压过程。 https://blog.csdn.net/Stray_Lambs/article/details/120578294 Checkpoint
Flink 借助Checkpoint机制来保证有状态的分布式计算
所谓Checkpoint就是周期性的进行Snapshot的过程
当算子Failover的时候通过快照恢复算子的状态
Flink的Checkpoint是基于Chandy-LamportCL算法改进的 ps Spark中Shuffle是划分Stage的边界每个Shuffle阶段数据会进行分区、排序、聚合、写入磁盘等操作自然的进行了状态的保存。所以Spark中无复杂的Checkpoint机制。 Barrier
先说明一下barrier这个概念 以一定的间隔被插入到Source节点经过若干个算子不断的向下游传递。
当barrier到达算子的时候触发Snapshot当前算子的状态保存完毕后传递到下一个算子。
当一个算子对应多个输入时也就意味着这个算子会接收到多个barrier此时为了保证全局一致性那么就需要对齐多个输入的barrier这个就是Aligned Checkpoint
Aligned Checkpoint
存在的问题
对齐时间长反压时被完全阻塞。 原因每条链路的处理速度是不一样的barrier对齐需要时间如果某一条链路有反压会因为需要对齐这个过程使得整个链路被阻塞因为barrier没有对齐为了保障数据一致性checkpoint也无法进行接下来Checkpoint超时失败重新进行Checkpoint但是由于反压仍然存在最终陷入失败–重启–失败的循环
Unaligned Checkpoint
为了解决Aligned Checkpoint中存在的反压严重时Checkpoint失败的问题
提出了Unaligned Checkpoint
核心思想
允许Barrier超越ongoing data正在进行的数据在buffer中还没有进入task的数据比如下图中蓝色的2、3、4、5barrier超越了这些数据那如果算子Failover的话这些数据不就丢失了解决的方法是将这些数据也进行快照在Failover时重放这部分数据。
barrier1顺利超越ongoing data进入到task中算子收到全部task后开始进行snapshot 实现原理 假设当前task的上游并行度为3下游并行度为2如上图所示task有3个输入和两个输出矩形表示buffer中的一条一条数据
Unaligned Checkpoint 这里简称UC
整个UC分为UC同步阶段、UC异步阶段两部分
UC同步阶段
UC开始后task的3个input-buffer会陆续收到上游发送的barrier如图所示input-buffer1收到了barrier1其它的input-buffer还没有收到barrier当某一个input-buffer接收到barrier时task会直接开始UC的第一阶段即UC同步阶段。
这个阶段只需要三个input-buffer中任意一个buffer的barrier进入到task的网络缓冲内存中task就会直接开始UC不用等其它的Input-buffer接收到barrier也不需要处理完input-buffer1接收到barrier1之前的数据。 Flink 网络缓冲区 https://www.jianshu.com/p/cfbb0cf69ae3 UC同步阶段barrier超越ongoing data 如下图可以看到barrier超越了input-buffer和output-buffer中的所有数据到达下游output-buffer的头部被快速的传递给下游的task这也解释了为什么在反压情况下UC可以成功 从task层面来看barrier可以在task内部实现快速超车 从Job层面来看如果每一个task内部barrier都可以快速超车那么barrier就可以从source task快速的超车到Sink task
为了保证数据一致性UC同步阶段task不能处理数据
UC同步阶段的四个主要流程
barrier超车当算子的某个input-buffer接收到barrier时超越ongoing data快速的将其传递到output-buffer的头部保证其可以快速到达下游算子buffer引用对buffer进行引用这里不进行snapshot真正的快照在UC异步阶段进行调用task的SnapshotState方法StateBackend同步快照
UC异步阶段
UC同步阶段完成后task继续处理数据同时进行UC的第二个阶段barrier对齐和UC异步阶段。
首先异步阶段要快照同步阶段所有引用的input-buffer和output-buffer以及同步阶段算子内部引用的State UC异步阶段其实也有barrier对齐当task开始UC的时候很多input-buffer没有接收到barrier这些input-buffer之前可能还有一些buffer需要快照例如上图的绿色数据块所以UC异步阶段要等到所有的input-buffer barrier都到达且barrier之前的所有buffer都需要快照这就是UC异步阶段的barrier对齐
这个对齐过程理论上会很快因为链路中的每一个taskbarrier都可以快速的超越所有input-buffer、output-buffer优先传递barrier到下游task。
异步阶段需要写三部分数据到DFS分别是UC同步阶段引用的算子内部的State、同步阶段引用的所有input-buffer和output-buffer、以及其它input-buffer barrier之前的buffer
这三部分数据写完之后task会将结果汇报到TaskManager。
资料 Flink Unaligned Checkpoint 在 Shopee 的优化和实践