RICH-ATONE

Flink实时计算-- Checkpoint和Savepoint 区别与理解

1. 什么是Savepoint和Checkpoint

Savepoint 是一项可让我们为整个流应用程序生成”某个时间”点快照的能力。快照包含有关您输入源的位置信息,以及数据源读取到的偏移量信息以及整个应用程序状态信息。

我们可以使用 Chandy-Lamport 算法的变体在不停止应用程序的情况下获得全部状态的一致性快照。

保存点包含两个主要元素:

首先,Savepoint 包括一个包含(通常是很大的)二进制文件的目录,该二进制文件表示在 Savepoint和Checkpoint 生成镜像时流应用程序的整个状态


一个(相对较小的)元数据文件,包含指向所有文件的指针(路径),这些文件是保存点的一部分,并存储在所选的分布式文件系统或数据存储中。

 

Checkpoint 是 Apache Flink 用于故障恢复的内部机制,包括应用程序状态快照以及输入源读取到的偏移量。

如果程序发生故障,Flink 会通过从 Checkpoint 加载应用程序状态并从恢复的读取偏移量继续读取来恢复应用程序,就像什么也没发生一样。

 

2.Flink Savepoints和Checkpoints的3个不同点

2.1 目标

从概念上讲,Flink 的 Savepoint 和 Checkpoint 的不同之处很像传统数据库中备份与恢复日志之间的区别。Checkpoint 的主要目标是充当 Flink 中的恢复机制,以确保能从潜在的故障中恢复。相反,Savepoint 的主要目标是充当手动备份之后重启、恢复暂停作业的方法。

2.2 实现

Checkpoint 和 Savepoint 在实现上也有不同。Checkpoint 的设计轻量并快速。它们可能(但不一定必须)充分利用底层状态后端的不同功能尽可能快速地恢复数据。基于 RocksDB 的状态后端可以使用 RocksDB 的内部格式,而不是 Flink 的原生格式进行增量 Checkpoint。加速了 RocksDB 的 Checkpoint 过程,从而使它们成为更轻量级的检查点机制的一个实例。相反,Savepoint 的设计重点是数据的可移植性,并支持对作业做任何更改,这些更改会使数据的生产和恢复成本更高。

2.3 生命周期

Checkpoint 是自动和定期的。它们由 Flink 自动,定期地创建和删除,不需与用户进行交互,以确保在作业意外失败的情况下可以恢复。相反,Savepoint 是由用户手动创建和管理的(即,调度、创建、删除)。

 

3. 何时使用 Savepoint ?

尽管流处理应用程序处理的是连续产生的数据(”运动中”的数据),但在某些情况下,应用程序可能需要重新处理以前处理过的数据。Apache Flink 中的 Savepoint 允许您在以下情况下执行此操作:

部署新版本的流应用程序,包括上线新功能,修复Bug或更好的机器学习模型。
为应用程序引入 A/B 测试,使用相同的源数据流测试程序的不同版本,从相同的时间点开始测试而不用牺牲先前的状态。
在需要更多资源的情况下重新对应用程序扩容。
将流应用程序迁移到 Flink 的新版本上,或迁移到另一个集群。

 

参考:

Flink Savepoints和Checkpoints的3个不同点

posted on 2022-03-30 18:55  RICH-ATONE  阅读(456)  评论(0编辑  收藏  举报

导航