Apache Flink中保存点和检查点之间的3个区别

我们的Flink Friday Tip的这一集解释了Savepoints和Checkpoints是什么,并检查了它们在Apache Flink中的主要区别。在以下段落中,我们将解释Savepoints的用途,何时使用它们,并对它们与检查点的不同之处进行并排比较。

Apache Flink中的保存点和检查点是什么?

Apache Flink Savepoint是一项功能,允许您拍摄整个流应用程序的“时间点”快照。此快照包含有关输入位置的信息,以及有关源的所有位置和整个应用程序状态的信息。我们可以获得整个状态的一致快照,而无需使用Chandy-Lamport算法的变体来停止应用程序。保存点包含两个主要元素:

  1. 首先,Savepoints包括一个目录,其中包含(通常很大的)二进制文件,这些文件表示Checkpoint / Savepoint映像点处的流应用程序的整个状态。
  2. 一个(相对较小的)元数据文件,包含指向Savepoint一部分的所有文件的指针(路径),并存储在所选的分布式文件系统或数据存储中。

阅读我们之前的博客文章,了解如何在流应用程序中启用Savepoints的分步指南。


关于Savepoints的所有上述内容对于我们在之前的帖子中解释Apache Flink中的检查点非常熟悉 。检查点是Apache Flink从故障中恢复的内部机制,包括应用程序状态的副本,包括输入的读取位置。如果发生故障,Flink将通过从检查点加载应用程序状态并从恢复的读取位置继续恢复应用程序,就像没有发生任何事情一样。


阅读我们之前的Flink Friday Tips,了解Apache Flink如何管理Kafka Consumer补偿的分步示例。


Apache Flink中保存点和检查点之间的3个区别


Apache Flink中保存点和检查点之间的3个区别

检查点和保存点是Apache Flink作为流处理框架非常独特的两个特性。保存点和检查点在实现中可能看起来相似,但是,这两个功能在以下3种方式上有所不同:

  1. 目标:从概念上讲,Flink的保存点与检查点的不同之处在于备份与传统数据库系统中的恢复日志不同。检查点的主要目标是充当Apache Flink中的恢复机制,确保容错处理框架可以从潜在的作业失败中恢复。相反,Savepoints的主要目标是在手动备份和用户恢复活动后充当重启,继续或重新打开暂停的应用程序的方法。
  2. 实施:检查点和保存点的实施方式不同。检查点设计轻巧,快速。他们可能(但不一定必须)利用底层状态后端的不同功能并尽可能快地恢复数据。例如,使用RocksDB状态后端的增量检查点使用RocksDB的内部格式而不是Flink的本机格式。这用于加速RocksDB的检查点过程,使它们成为更轻量级的Checkpointing机制的第一个实例。相反,Savepoints旨在更多地关注数据的可移植性,并支持对作业所做的任何更改,这使得生成和恢复的成本略高。
  3. 生命周期:检查点是自动和定期的。它们由Flink自动定期拥有,创建和删除,无需任何用户交互,以确保在意外作业失败的情况下完全恢复。相反,用户手动拥有和管理保存点(即,它们被安排,创建和删除)。
Apache Flink中保存点和检查点之间的3个区别

何时在流媒体应用程序中使用Savepoints?

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

  • 部署流应用程序的更新版本,包括新功能,错误修复或更好的机器学习模型
  • 为您的应用程序引入A / B测试,使用相同的源数据流测试程序的不同版本,从同一时间点开始测试而不牺牲先前的状态
  • 在需要更多资源的情况下重新调整应用程序
  • 将流式应用程序迁移到Apache Flink的新版本,或将应用程序升级到其他群集。

结论

检查点和保存点是Apache Flink中的两个不同功能,它们满足不同的需求,以确保一致性,容错性,并确保在意外的作业失败(使用检查点)以及升级的情况下保持应用程序状态,bug修复,迁移或A / B测试(使用Savepoints)。这两个功能相结合,可以在不同的实例中涵盖,确保应用程序的状态在不同的场景和环境中保持不变。



分享到:


相關文章: