1)at_most_once(最多一次)
当任务故障时,最简单的做法是什么都不干,既不恢复丢失的状态,也不重播丢失的数据,最多处理一次事件。
2)at_least_once(至少一次)
在大多数的真实应用场景,我们不希望丢失事件。这种类型的保障称为at_least_once,意思是所有的事件都得到了处理,而一些事件可能被处理多次。
3)exactly_once(精确一次)
恰好处理一次是最严格的保证,也是最难实现的。恰好处理一次的意思是不仅仅意味着事件没有丢失,还意味着针对每一个数据,内部状态仅仅更新一次。
- Flink使用了一种轻量级快照机制-检查点(checkpoints)来保证exactly-once语义
- 有状态流应用的一致检查点,其实就是:所有任务的状态,在某个时间点的一份拷贝(一份快照)。而这个时间点,应该是所有任务都恰好处理完一个相同的输入数据的时候。
- 应用状态的一致检查点,是flink故障恢复机制的核心。