Flink Checkpoint

目录

问题1:简单的Checkpoint的大致流程

问题2:flink怎么实现source端的精准一次消费

问题3:JobManager在checkpoint中作用

问题4:Checkpoint Barrier 概念

问题5:并行下的Checkpoint流程

问题6:为什么要进行Barrier对齐

问题7:一致性快照潜在问题


Flink是在Chandy-Lamport算法的基础上实现的一种分布式快照算法。

问题1:简单的Checkpoint的大致流程

1.暂停处理新流入数据,将数据缓存起来

2.将算子子任务的本地状态数据拷贝到一个远程的持久化存储上

3.继续处理新流入的数据,包括刚才缓存起来的数据

问题2:flink怎么实现source端的精准一次消费

源任务可以把偏移量作为算子状态保存下来,而且外部数据源能够重置偏移量,只有在数据源端支持offset重新消费数据,source端才能支持精准一次消费。

问题3:JobManager在checkpoint中作用

想要正确的从检查点中读取并恢复状态,必须知道每个算子任务状态的类型和他们的先后顺序。状态的拓扑结构在JobManager上可以由JobGraph分析得到,而检查点保存的定期触发也是由JobManager控制的,所以故障恢复的过程需要JobManager的参与。

问题4:Checkpoint Barrier 概念

Checkpoint Barrier被插入到数据流中,它将数据流切分成段。Flink的Checkpoint逻辑是,一段新数据流入导致状态发生了变化,Flink的算子接收到Checkpoint Barrier后,对状态进行快照,每个Checkpoint Barrier有一个ID,标识该段数据属于哪个Checkpoint。如图所示,当ID为n的Checkpoint Barrier到达每个算子后,表示要对n-1和n之间状态的更新做快照。Checkpoint Barrier有点儿像Event Time中的Watermark,它被插入到数据流中,但并不影响数据流原有的处理顺序

问题5:并行下的Checkpoint流程

  1. 首先,Flink的检查点协调器(Checkpoint Coordinator)触发一次Checkpoint (Trigger Checkpoint), 这给请求会发送给Source的各个子任务
  2. 各Source算子子任务接收到Checkpoint请求之后,会将自己的状态写入到状态后端,生成一次快照,并且会向下游广播Checkpoint Barrier
  3. Source做完快照后,向Checkpoint Coordinator发送一个确认,告知自己已经做完了相应的工作。这个确认中包括了一些元数据,其中就包括刚才备份到State Backend的状态句柄,或者说是指向状态的指针。至此,Source完成了一次Checkpoint。跟Watermark的传播一样,一个算子子任务要把Checkpoint Barrier发送给所连接的所有下游算子子任务。
  4. Checkpoint Barrier传播的过程需要进行对齐(Barrier Alignment)
  5. 对齐分为四步:
  • 1.算子子任务在某个输入通道中收到第一个ID为n的Checkpoint Barrier,但是其他输入通道中ID为n的Checkpoint Barrier还未到达,该算子子任务开始准备进行对齐。

  • 2.算子子任务将第一个输入通道的数据缓存下来,同时继续处理其他通道的数据,这个过程被称为对齐。

  • 3.第二个输入通道的Checkpoint Barrier抵达算子子任务,该算子子任务执行快照,将状态写入State Backend,然后将ID为n的Checkpoint Barrier向下游所有输出通道广播。

  • 4.对于这个算子子任务,快照执行结束,继续处理各个通道中新流入数据,包括刚才缓存起来的数据

     6.数据流图中的每个算子子任务都要完成一遍上述的对齐、快照、确认的工作,当最后所有Sink算子确认完成快照之后,说明ID为n的Checkpoint执行结束,Checkpoint Coordinator向State Backend写入一些本次Checkpoint的元数据。

问题6:为什么要进行Barrier对齐

主要是为了保证Flink所有算子的状态是一致的

问题7:一致性快照潜在问题

1.每次进行Checkpoint前,都需要暂停处理新流入数据,然后开始执行快照,假如状态比较大,一次快照可能长达几秒甚至几分钟。

2.Checkpoint Barrier对齐,必须等待所有上游通道都处理完,假如某个上游通道处理很慢,这可能造成整个数据流堵塞。

针对第一个问题,Flink提供了异步快照(Asynchronous Snapshot)的机制。当实际执行快照时,Flink可以立即向下广播Checkpoint Barrier ,表示自己已经执行完自己部分的快照。同时,Flink启动一个后台线程,它创建本地状态的一份拷贝,这个线程用来将本地状态的拷贝同步到State Backend上,一旦数据同步完成,再给Checkpoint Coordinator发送确认信息。拷贝一份数据肯定占用更多内存,这时可以利用写入时复制(Copy-on-Write)的优化策略。

对于第二个问题,Flink允许跳过对齐这一步

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值