Flink新版本1.12以上-3
Checkpoint与State剖析
1 | 前面我们已经掌握了Checkpoint和State使用,下面我们来从底层原理层面深度分析一下Checkpoint和State的细节流程。 |
Checkpoint的生成过程

1 | 我们先整体看一下这个图: |
Checkpoint的恢复过程
1 | 下面我们来分析一下Checkpoint的恢复过程。 |

1 | 继续接着前面的业务流程,前面我们在消费完第4条数据的时候触发了一次checkpoint。 |

1 | 任务结束后,Flink尝试重启任务,并恢复数据到之前的状态。 |

1 | 当任务重新启动之后,会根据指定的快照数据进行恢复,此时上一次在快照时保存的偏移量4、[count(send), 3]、[count(follow) ,1]这些数据对应的都恢复到了正确的位置。 |

1 | 恢复成功之后,任务会基于之前的偏移量4继续往后面消费,所以又把[follow,5]这条数据消费出来了。 |
Checkpoint Barrier
1 | 在Checkpoint执行过程中,还有一个重要的角色,Barrier。 |

1 | 图里面的A\B\C\D这些属于数据流中的正常数据。 |
1 | public class CheckpointBarrier extends RuntimeEvent { |
1 | 从这可以看出来他里面除了包含一个自增的id字段,还有一个时间戳字段,以及保存checkpoint参数的字段。 |

1 | Checkpoint在执行的时候,Source在接收到Barrier,会把Barrier广播发送到下游算子,当下游算子A接收到了所有输入数据流的Barrier时,意味着算子A已经处理完了截止到当前Checkpoint的数据。 |

1 | Source会把Barrier广播发送到下游算子A。 |