Checkpoint解决什么问题

分布式系统中软件和硬件故障都很常见Flink需要在故障发生时有一种恢复机制使得对外界看来就像没发生过故障一样鉴于Flink是一个长时运行的应用如果一旦发生故障就需要重新读取所有流的话效率很低Flink使用Checkpoint来缩减恢复的时间

Checkpoint需要保证存下来的状态对于应用的各个部分是一致的(即节点A Checkpoint是在处理完流An个元素时依赖节点A的节点B也应该在对应位置做Checkpoint否则可能出现不一致分布式系统中做Checkpoint的困难之处在于无法保证所有的节点能同时的做CheckpointFlink通过屏障Barrier来解决这个问题

在流的源头Flink会定时插入一个BarrierBarrier将流分成了两部分Barrier之前的已处理的流和Barrier之后未处理的流当节点收到BarrierCheckpointCheckpoint完成之后再将Barrier发送给下游

为什么需要对齐

当一个节点上游有多个流时必须等多个流都收到Barrier之后才可以Checkpoint这个过程叫做对齐节点会被阻塞等待Barrier没到的流

对齐有什么问题

当一个流遭遇反压时流的流动速度变慢会造成比较长时间的阻塞增加延迟