flink1.12.x End-to-End 端到端数据一致性:at-most-once、at-least-once

提出问题

批处理中,如果程序报错,修改程序,重新再执行一遍即可

流式计算是一个 无边界 的 数据流处理过程,不断的从数据源出读取数据,不断的处理并且输出,对于消费到的上游数据,有可能刚刚获取到该数据、还未完成计算或者是还未输出到下游,程序就异常重启,重启之后该如何继续之前的计算?

解决

End-to-End Exactly-Once端到端数据一致性,可以解决上面问题

说明

端到端

流式计算中,端到端表示从 外部读取数据、中间算子处理、数据输出外部 三个处理环节。

在理想状态即 7*24 任务 不出错 或者 无异常 情况下,也就是每一步处理都正常,那么就能保证最终处理输出的数据正确

端到端的一致性

在实际的情况中,可能会出现网络、磁盘、脏数据、OOM等各种异常导致程序失败,也就是 端到端 任何一个处理环节都有可能失败,为了保证最终数据的正确性,需要提供一种机制保障在面对任何情况的情况下,任务仍然恢复到正确的状态,这就是端到端数据一致性

三种处理模式

  • at-most-once
  • at-least-once
  • exactly-once

at-most-once

表示至多处理一次,在端到端的整个处理流程中,每一个环节至多会被处理一次,通常发生在某一个处理环节在出现失败导致异常的情况下,下游节点 是无法获取到该节点的处理数据的,因为 失败的数据不会被重试或者是恢复

缺点

数据可能丢失

at-least-once

表示至少处理一次,可能由于中间由于某个环节异常(处理消息异常、提交offset异常等) ,导致 数据 被 重复处理,重新进入整个处理流程中

计算结果可能大于正确值,但绝不会小于正确值,就是计算程序发生故障后可能 多算,但是绝不可能少算

缺点

数据 可能 重复处理

exactly-once

详见链接:https://www.malaoshi.top/show_1IX4BaGNyO6y.html

参考
https://cloud.tencent.com/developer/article/1983667


原文出处:/show_1IX49NkxVqCp.html