提出问题
Flink在计算过程中,崩溃退出,此时该如何处理?
再次启动程序,是否能 接着之前的状态继续计算
如:崩溃前,计算出的最大值是100,崩溃后再次运行,如何接着 100 继续运算?
解决
使用 checkpoint,能够在崩溃前,保存 状态,并且能够 恢复,继续计算
一致性
一致性就是:处理故障并恢复之后得到的结果,与没有故障得到的结果,2者相比,前者的正确性。
即:就是故障的发生是否影响得到的结果
3个级别
在流处理过程,一致性分为3个级别:
- at-most-once:至多一次。故障发生之后,计算结果可能丢失,就是无法保证结果的正确性;
- at-least-once:至少一次。计算结果可能大于正确值,但绝不会小于正确值,就是计算程序发生故障后可能多算,但是绝不可能少算;
- exactly-once:精确一次。系统保证发生故障后得到的计算结果的值和正确值一致;
Flink的容错机制保证了 exactly-once,也可以选择 at-least-once。
Flink的容错机制:通过对数据流不停的做 快照(snapshot) 实现的
一致性检查点(checkpoints)
flink 故障恢复机制的核心,就是应用 状态 的 一致性检查点
有状态 流应用的一致检查点,其实就是所有任务的状态,在某个时间点的一份 拷贝(快照)
这个时间点,应该是所有任务都恰好处理完 同一个输入数据的时刻
类比
相当于 windows休眠,将计算机当前时刻的状态 保存到硬盘上
重新唤醒时,windows能够 恢复 到休眠时的状态
