MAPREDUCE服务 MRS-Flink任务开发建议:使用EXACTLY ONCE流处理语义保证端到端的一致性

时间:2024-10-22 10:50:54

使用EXACTLY ONCE流处理语义保证端到端的一致性

流处理语义有三种:EXACTLY ONCE、AT LEAST ONCE、AT MOST ONCE。

  • AT MOST ONCE:无法保证数据处理的完整性,但性能相比最好。
  • AT LEAST ONCE:可以保证数据处理的完整性,但无法保证数据处理的准确性,性能适中。
  • EXACTLY ONCE:可以保证数据处理的准确性,但性能最差。

首先需要确认能否保证EXACTLY_ONCE(严格一次),因为端到端EXACTLY ONCE语义需要输入数据源的可回放(例如Kafka可回放数据),输出数据源的事务性(例如MySQL可原子性写入数据)。在无法满足这些条件的情况下,可以视情况将其降级为AT LEAST ONCE或者AT MOST ONCE。

  • 在无法满足输入源的可回放时,只能保证AT MOST ONCE。
  • 在无法满足输出目的的原子性写入时,只能保证AT LEAST ONCE。

【示例】API方式设置Exactly once语义:

env.getCheckpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE)

【示例】资源文件方式设置Exactly once语义:

# checkpoint的语义
execution.checkpointing.mode: EXACTLY_ONCE
support.huaweicloud.com/devg-rule-mrs/mrs_07_450167.html