Apache Flink - 检查点和保存点的区别?

22

请问有人能帮我理解Apache Flink的Checkpoints和Savepoints之间的区别吗?

我阅读了文档,但仍无法理解它们之间的差异!:s

3个回答

27

Apache Flink的检查点(Checkpoints)和保存点(Savepoints)在保留Flink应用程序内部状态方面非常相似。

检查点会自动进行,用于在发生故障时自动重新启动作业。

另一方面,保存点需要手动创建,始终存储在外部,并用于以前的内部状态启动“新”作业,在例如以下情况下使用:

  • 修复错误
  • Flink版本升级
  • A/B测试等

实际上,在底层它们都是相同的机制/代码路径,但存在一些微妙的差异。


编辑:

您也可以在官方文档https://ci.apache.org/projects/flink/flink-docs-stable/ops/state/savepoints.html#what-is-a-savepoint-how-is-a-savepoint-different-from-a-checkpoint中找到非常好的解释:

  

Savepoint是通过Flink的检查点机制创建的流式作业执行状态的一致图像。您可以使用Savepoint停止和恢复、分叉或更新Flink作业。Savepoint由两个部分组成:一个包含通常较大的二进制文件的存储稳定性(例如HDFS、S3等)的目录和一个(相对较小的)元数据文件。存储在稳定存储器上的文件表示作业执行状态图像的净数据。Savepoint的元数据文件包含(主要是)指向Savepoint中所有稳定存储器上的文件的指针,以绝对路径的形式。   注意:为了允许程序和Flink版本之间的升级,重要的是要查看有关为运算符分配ID的以下部分。

从概念上讲,Flink的 Savepoints 和 Checkpoints 的区别类似于传统数据库系统中备份和恢复日志的不同。Checkpoints 的主要目的是在意外作业失败的情况下提供恢复机制。Checkpoint 生命周期由 Flink 管理,即 Checkpoint 由 Flink 创建、拥有和释放 - 无需用户交互。Checkpoint 实现的两个主要设计目标是 i) 尽可能轻量级创建和 ii) 尽可能快速地从中恢复,以作为一种恢复方法并被周期性触发。针对这些目标的优化可以利用某些属性,例如作业代码在执行尝试之间不会更改。作业终止后,通常会删除 Checkpoints(除非明确配置为保留 Checkpoints)。
相比而言,Savepoints 由用户创建、拥有和删除。它们的用例是计划的、手动备份和恢复。例如,这可能是更新您的 Flink 版本、更改作业图、更改并行度、分叉第二个作业(例如红/蓝部署)等情况。当然,Savepoints 必须在作业终止后幸存下来。从概念上讲,Savepoints 可能需要更多成本来生成和恢复,并更加关注作业中先前提到的更改的可移植性和支持。
除了所有这些概念上的差异之外,Checkpoints 和 Savepoints 的当前实现基本上使用相同的代码并产生相同的格式。然而,目前有一个例外情况,我们可能会在未来引入更多的差异。这个例外是 RocksDB 状态后端的增量 Checkpoints。它们使用一些 RocksDB 内部格式而不是 Flink 的原生 Savepoint 格式。与 Savepoints 相比,这使它们成为更轻量级的检查点机制的第一个实例。

https://ci.apache.org/projects/flink/flink-docs-stable/ops/state/savepoints.html#what-is-a-savepoint-how-is-a-savepoint-different-from-a-checkpoint - Dagang

1

保存点

保存点通常应用于单个事务;它标记了一个可以回滚事务的点,因此如果需要,可以撤消后续更改。

更多信息请参见此处。

https://ci.apache.org/projects/flink/flink-docs-release-1.2/setup/cli.html#savepoints

检查点

检查点通常适用于整个系统,您可以配置定期检查点以在外部持久化。外部化检查点将其元数据写入持久性存储,并在作业失败时不会自动清除。 更多信息请参见此处:

https://ci.apache.org/projects/flink/flink-docs-release-1.2/setup/checkpoints.html


0

我想要补充的一个区别是,当我们升级管道时,可以手动应用保存点,而检查点则在管道重新启动或意外崩溃时非常有用。然而,后续可能会产生副作用,应用程序(管道)必须处理任何场景,如重新处理重复数据等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接