flink1.12.x barrier对齐和不对齐

barrier对齐

一旦 Operator 从输入流接收到 barrier n,它就 不能 处理来自该流的任何数据记录,直到从其他所有输入接收到 barrier n 为止。

否则,它会混合属于 快照n 的记录和属于 快照n + 1 的记录

步骤一

接收到 barrier n 的流暂时被搁置。从这些流接收的记录 不会被处理,而是放入 输入缓冲区

如上图,虽然数字流对应的 barrier 已经到达了,但是 barrier 之后的 1、2、3 这些数据只能放到 buffer 中,等待字母流的barrier 到达;

步骤二

一旦最后所有输入流都接收到 barrier n ,对自身进行快照

步骤三

Operator缓冲区中数据发出去

barrier不对齐

barrier不对齐就是指:当还有其他流的 barrier 还没到达时,为了不影响性能,也不用理会,直接处理barrier之后的数据。等到所有流的barrier的都到达后,就可以对该Operator做CheckPoint了;

为什么要对齐?不对齐行不行?

从 kafka 读取数据时,并且 Exactly Once 模式时, 必须 barrier对齐

如果barrier 不对齐 就变成了 At Least Once

如果不对齐,那么在 chk-100 快照之前,已经处理了一些 chk-100 对应的offset之后的数据,当程序从 chk-100 恢复任务时,chk-100 对应的offset之后的数据还会被处理一次,所以就出现了 重复消费

一句话理解:从 kafka读取数据时,会发生 重复消费

参考:
https://www.jianshu.com/p/4d31d6cddc99


原文出处:https://malaoshi.top/show_1IX49PBu5pK2.html