问题1:阐述 Flink 提供的三种数据处理语义,解释 Checkpoint 机制如何保证 Flink 程序结果的 Exactly-Once 语义?
问题2:结合 Kafka 分析,如何通过两阶段提交协议,提供端到端的 Exactly-Once 处理?
1.Flink 提供的三种数据处理语义
① At-Most-Once:最多一次,如果产生故障,可能丢失数据。 ② At-Least-Once:最少一次,如果产生故障,可能有重复数据。 ③ Exactly-Once:精确一次,如果产生故障,也能保证数据不丢失不重复。
// At-Least-Once 最多一次
CheckpointingMode.AT_LEAST_ONCE
// Exactly-Once 精确一次
CheckpointingMode.AT_LEAST_ONCE
flink 新版本已经不提供 At-Most-Once 语义。
2.Checkpoint 机制保证 Exactly-Once 语义
结论: Checkpoint Barrier 对齐机制实现 Exactly-Once 语义。如果 Barrier 不对齐,即 At Least Once 语义。
Flink 分布式异步快照的核心是 Checkpoint 机制,其关键是采用标记信号 Barrier,使得数据流被切分成微批,进行 Checkpoint 保存状态数据,如下图所示。
Checkpoint