Flink精确一致性语义的理解

Flink精确一致性语义也叫做exactly once,表示数据从源端到目标端精确消费一次。

如何保证?

精确一致性需要Flink的检查点功能与外部输出具备事务的功能,同时在数据输出到外部系统需要进行两阶段提交。

Flink在触发checkpoint操作时,即向数据流注入barrier,当barrier到达算子后,等其流过算子,算子即保存其状态,由于算子状态保存需要一定时间,有可能大于barrier到达下一个算子的时间,所以在一个任务的checkpoint中,多个算子可并行保存状态。当barrier到达sink端时,sink端即开始对数据进行两阶段提交,首先将数据pre-commit到外部系统,当pre-commit全部完成以及状态保存全部完成,即标志checkpoint完成,此时再将存在于外部系统的数据由pre-commit变成commit状态,真正完成提交。

在上述过程中,只要存在一个地方失败,即表示本次checkpoint失败。

回复

我来回复
  • 暂无回复内容