Checkpoint的概念和作用
概念:
Checkpoint是Flink实现容错机制最核心的功能,它能够根据配置周期性地基于Stream中各个Operator的状态来生成Snapshot(数据快照),从而将这些状态数据定期持久化存储下来,
作用:
当Flink程序一旦意外崩溃时,重新运行程序时可以有选择地从这些Snapshot进行恢复,从而修正因为故障带来的程序数据状态中断。
总的来说,就是在流数据处理的过程中,定期的去保存某个阶段的数据(称为数据快照),当后续阶段的程序意外崩溃时,可以从之前保存的数据快照中进行恢复,再执行后续程序。
Checkpoint过程
1)Checkpoint指定触发生成时间间隔后,每当需要触发Checkpoint时,会向Flink程序运行时的多个分布式的Stream Source中插入一个Barrier标记,这些Barrier会根据Stream中的数据记录一起流向下游的各个Operator。
如上图的第一个过程,可以看到两个数据输入流都加上了两个 barrier标记
2)当一个Operator接收到一个Barrier时,它会暂停处理Steam中新接收到的数据记录。因为一个Operator可能存在多个输入的Stream,而每个Stream中都会存在对应的Barrier,该Operator要等到所有的输入Stream中的Barrier都到达。当所有Stream中的Barrier都已经到达该Operator,这时所有的Barrier在时间上看来是同一个时刻点(表示已经对齐)。
如上图第二个过程所示,第一个输入流已经到达了barrier,但是此时第二个输入流还没有到达barrier。在等待第二个输入流barrier到达的过程中,Operator会暂停处理第一个输入流到达的数据,但是并不会暂停接收数据,会将这时间到达的数据存储在input buffer中暂时存储。
3)在所有的barrier到底之后,这时该Operator会将数据记录(Outgoing Records)发射(Emit)出去,作为下游Operator的输入。
4)最后将Barrier对应Snapshot发射(Emit)出去作为此次Checkpoint的结果数据。