Flink中的一个大的特性就是exactly-once的特性,Barrier对齐发生在一个处理节点需要接收上游不同处理节点的数据,由于不同的上游节点数据处理速度不一致,那么就会导致下游节点接收到 Barrier的时间点也会不一致,这时候就需要使用Barrier对齐机制。
在同一checkpoint中,先到达的Barrier是否需要等待其他处理节点Barrier达到后在发送后续数据,Barrier将数据流分为前后两个checkpoint(chk n,chk n+1)的概念,如果不等待那么就会导致chk n的阶段处理了chk n+1阶段的数据,但是在source端所记录的消费偏移量又一致,如果chk n成功之后,后续的任务处理失败,任务重启会消费chk n+1阶段数据,就会到致数据重复消息,如果Barrier等待就不会出现这样情况,因此Barrier需要对齐那么就是实现exectly once语义,否则实现的是at least once语义。
由于状态是属于Flink内部存储,所以Flink仅仅满足内部exectly once语义。