flink - core - checkpoint算法
chandy-lamport分布式快照算法
flink采用chandy-lamport分布式快照算法进行分布式的checkpoint,解决了多并行度场景中如何在某个时间点一致性checkpoint的问题
流程
- jobmanager向source tasks发送barrier,barrier中带有checkpoint id。
- 每个source tasks接收到barrier后,根据自己已处理的数据offset返回一个响应给jobmanager,表示将从该offset进行checkpoint。
- source tasks把barrier传递给下游算子,算子的某个task接收到barrier后该task就暂停计算(此时对于该source task的需要进行checkpoint的数据已经计算完成,因为barrier注入在source data之后),等待所有跟此task连接的source tasks把他们的同一个checkpoint id的barrier也传递过来。该task暂停计算等待其他barrier的时候,对于barrier已经达到的上游task如果继续发送数据过来,则会将其缓存起来,等到checkpoint完成后再继续计算。
- 该task的所有上游source task的barrier都到达后,该task就进行自身的checkpoint。
- 该task checkpoint完成后恢复数据计算,首先在缓存中按顺序计算,再计算新过来的数据。其他task的步骤均与此相同。
- barrier会一直向下传递,直到sink task。所有sink tasks也checkpoint完成后,在jobmanager端对checkpoints文件进行算子粒度的合并,表示每个算子的状态具体是什么。至此一次checkpoint完成。
作者:spongebobZ
原文链接:https://www.jianshu.com/p/09834815798c