【发布时间】:2017-08-10 03:30:37
【问题描述】:
谁能帮我理解 Apache Flink 的检查点和保存点之间的区别。
当我阅读文档时,无法理解其中的区别! :s
【问题讨论】:
标签: apache-flink
谁能帮我理解 Apache Flink 的检查点和保存点之间的区别。
当我阅读文档时,无法理解其中的区别! :s
【问题讨论】:
标签: apache-flink
Apache Flink 的 Checkpoints 和 Savepoints 相似之处在于它们都是保存 Flink 应用程序内部状态的机制。
自动获取检查点并用于在发生故障时自动重新启动作业。
另一方面,保存点是手动获取的,始终存储在外部,用于启动具有先前内部状态的“新”作业,例如
实际上,它们下面是相同的机制/代码路径,但有一些细微差别。
编辑:
你也可以在官方文档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 的检查点机制创建。您可以使用 Savepoints 来停止和恢复、fork 或更新您的 Flink 作业。保存点由两部分组成:在稳定存储(例如 HDFS、S3 等)上包含(通常较大的)二进制文件的目录和(相对较小的)元数据文件。稳定存储上的文件代表作业执行状态图像的净数据。保存点的元数据文件(主要)包含指向稳定存储上的所有文件的指针,这些文件是保存点的一部分,以绝对路径的形式。 注意:为了允许程序和 Flink 版本之间的升级,请务必查看以下有关为操作员分配 ID 的部分。
从概念上讲,Flink 的 Savepoints 与 Checkpoints 的不同之处类似于备份与传统数据库系统中的恢复日志不同。检查点的主要目的是在意外作业失败的情况下提供恢复机制。 Checkpoint 的生命周期由 Flink 管理,即 Checkpoint 由 Flink 创建、拥有和发布 - 无需用户交互。作为一种恢复和定期触发的方法,Checkpoint 实现的两个主要设计目标是 i) 创建轻量级和 ii) 尽可能快地恢复。针对这些目标的优化可以利用某些属性,例如作业代码在执行尝试之间不会改变。检查点通常在用户终止作业后被删除(除非明确配置为保留检查点)。
与这一切相反,保存点由用户创建、拥有和删除。他们的用例是计划的手动备份和恢复。例如,这可能是您的 Flink 版本的更新、更改您的作业图、更改并行度、分叉第二个作业(例如红色/蓝色部署)等等。当然,保存点必须在工作终止后仍然存在。从概念上讲,保存点的生成和恢复成本可能更高一些,并且更多地关注可移植性和对前面提到的工作更改的支持。
撇开这些概念上的差异不谈,检查点和保存点的当前实现基本上使用相同的代码并产生相同的格式。但是,目前有一个例外,将来我们可能会引入更多差异。例外是具有 RocksDB 状态后端的增量检查点。他们使用一些 RocksDB 内部格式而不是 Flink 的原生保存点格式。与保存点相比,这使它们成为更轻量级检查点机制的第一个实例。
保存点
保存点通常适用于单个交易;它标志着一个 事务可以回滚的指向,所以后续 如有必要,可以撤消更改。
更多见这里
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
【讨论】:
我想补充的不同之处在于,当我们升级管道时可以手动应用保存点,而检查点在管道重新启动或突然崩溃的情况下很有用。但是,以后应用程序(管道)必须处理任何情况,例如重新处理重复数据等,可能会产生副作用。
【讨论】: