flink的检查点(checkpoint)和保存点(savepoint)的区别

一、检查点:检查点屏障跟普通记录一样。它们由算子处理,但并不参与计算,而是会触发与检查点相关的行为。会在算子之间流动。当读取输入流的数据源遇到检查点屏障时,它将其在输入流中的位置保存到稳定存储中。如果输入流来自消息传输系统(Kafka 或 MapR Streams),这个位置就是偏移量。Flink 的存储机制是插件化的,稳定存储可以是分布式文件系统,如HDFS、S3 或 MapR-FS

flink的检查点(checkpoint)和保存点(savepoint)的区别_第1张图片

如图所示,位于检查点之前的所有记录(["b",2]、["b",3] 和 ["c",1])被 map 算子处理之后的情况。此时,稳定存储已经备份了检查点屏障在输入流中的位置(备份操作发生在检查点屏障被输入算子处理的时候)。map 算子接着开始处理检查点屏障,并触
发将状态异步备份到稳定存储中这个动作

当 map 算子的状态备份和检查点屏障的位置备份被确认之后,该检查点操作就可以被标记为完成,如下图所示。我们在无须停止或者阻断计算的条件下,在一个逻辑时间点(对应检查点屏障在输入流中的位置)为计算状态拍了快照。通过确保备份的状态和位置指向同一个逻辑时间点,后文将解释如何基于备份恢复计算,从而保证 exactly-once。值得注意的是,当没有出现故障时,Flink 检查点的开销极小,检查点操作的速度由稳定存储的可用带宽决定。

flink的检查点(checkpoint)和保存点(savepoint)的区别_第2张图片

检查点操作完成,状态和位置均已备份到稳定存储中。输入流中的所有记录都已处理完成。值得注意的是,备份的状态值与实际的状态值是不同的。备份反映的是检查点的状态

 

flink的检查点(checkpoint)和保存点(savepoint)的区别_第3张图片

Flink 将输入流倒回到上一个检查点屏障的位置,同时恢复 map 算子的状态值。然后,Flink 从此处开始重新处理。这样做保证了在记录被处理之后,map 算子的状态值与没有发生故障时的一致

二、保存点:

保存点与检查点的工作原理一致,只不过检查点是自动触发的,而保存点需要命令行触发或者web控制台触发。和检查点一样,保存点也保存到稳定存储当中,用户可以从保存点重启作业,而不用从头开始

保存点的作用:(1) 应用程序代码升级:假设你在已经处于运行状态的应用程序中发现了一个 bug,并且希望之后的事件都可以用修复后的新版本来处理。通过触发保存点并从该保存点处运行新版本,下游的应用程序并不会察觉到不同(当然,被更新的部分除外)。
(2) Flink 版本更新:Flink 自身的更新也变得简单,因为可以针对正在运行的任务触发保存点,并从保存点处用新版本的 Flink 重启任务。
(3) 维护和迁移:使用保存点,可以轻松地“暂停和恢复”应用程序。这对于集群维护以及向新集群迁移的作业来说尤其有用。此外,它还有利于开发、测试和调试,因为不需要重播整个事件流。
(4) 假设模拟与恢复:在可控的点上运行其他的应用逻辑,以模拟假设的场景,这样做在很多时候非常有用。
(5) A/B 测试:从同一个保存点开始,并行地运行应用程序的两个版本,有助于进行 A/B 测试。

 

你可能感兴趣的:(flink)