专栏首页SmartSiFlink Savepoints和Checkpoints的3个不同点

Flink Savepoints和Checkpoints的3个不同点

在本文中,我们将解释什么是 Savepoint,什么会使用它们,并就它们与 Checkpoint 的区别进行对比分析。

1. 什么是Savepoint和Checkpoint

Savepoint 是一项可让我们为整个流应用程序生成”某个时间”点快照的能力。快照包含有关您输入源的位置信息,以及数据源读取到的偏移量信息以及整个应用程序状态信息。我们可以使用 Chandy-Lamport 算法的变体在不停止应用程序的情况下获得全部状态的一致性快照。保存点包含两个主要元素:

  • 首先,Savepoint 包括一个包含(通常是很大的)二进制文件的目录,该二进制文件表示在 Savepoint和Checkpoint 生成镜像时流应用程序的整个状态
  • 一个(相对较小的)元数据文件,包含指向所有文件的指针(路径),这些文件是保存点的一部分,并存储在所选的分布式文件系统或数据存储中。

阅读这篇文章之前,你可以阅读一下Flink 保存点之回溯时间

上面所有关于 Savepoints 的内容听起来与我们在之前的文章中对 Checkpoints 的介绍非常相似。Checkpoint 是 Apache Flink 用于故障恢复的内部机制,包括应用程序状态快照以及输入源读取到的偏移量。如果程序发生故障,Flink 会通过从 Checkpoint 加载应用程序状态并从恢复的读取偏移量继续读取来恢复应用程序,就像什么也没发生一样。

可以阅读之前一篇关于Flink如何管理Kafka的消费偏移量的文章。

2. Savepoint和Checkpoint的3个不同点

Savepoint 和 Checkpoint 是 Apache Flink 作为流处理框架所特有的两个功能。Savepoint 和 Checkpoint 的实现看起来也很相似,但是,这两种功能在以下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 的新版本上,或迁移到另一个集群。

4. 结论

Checkpoint 和 Savepoint 是 Apache Flink 中的两个不同功能,可以满足不同的需求,以确保一致性,容错能力,并确保在作业意外失败(使用 Checkpoint)以及在升级、修复Bug、迁移或者 A/B 测试(使用 Savepoint)时应用程序状态能够保持不变。这两个功能的结合确保应用程序的状态在不同的情况和环境下都能保持不变。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Flink1.4 外部检查点

    检查点通过恢复状态和对应流位置来实现 Flink 状态容错,从而为应用程序提供与无故障执行相同的语义。

    smartsi
  • 聊聊flink的FsStateBackend

    flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/StateBacken...

    codecraft
  • 聊聊flink的checkpoint配置

    codecraft
  • Flink CheckPoint奇巧 | 原理和在生产中的应用

    场景描述:Flink本身为了保证其高可用的特性,以及保证作用的Exactly Once的快速恢复,进而提供了一套强大的Checkpoint机制。这个机制在原理是...

    王知无-import_bigdata
  • Flink流式处理概念简介

    一,抽象层次 Flink提供不同级别的抽象来开发流/批处理应用程序。 ? 1,stateful streaming 最底层。它通过Process Functio...

    Spark学习技巧
  • 聊聊flink的FsStateBackend

    flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/StateBacken...

    codecraft
  • 聊聊flink的MemoryStateBackend

    flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/StateBacken...

    codecraft
  • 聊聊flink的MemoryStateBackend

    flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/StateBacken...

    codecraft
  • 《从0到1学习Flink》—— Flink 配置文件详解

    前面文章我们已经知道 Flink 是什么东西了,安装好 Flink 后,我们再来看下安装路径下的配置文件吧。

    zhisheng
  • 聊聊flink的MemoryBackendCheckpointStorage

    本文主要研究一下flink的MemoryBackendCheckpointStorage

    codecraft
  • flink checkpoint 源码分析 (一)

    转发请注明原创地址http://www.cnblogs.com/dongxiao-yang/p/8029356.html

    sanmutongzi
  • 影响Flink有状态函数和算子性能的3个重要因素

    本文重点介绍开发人员在有状态流处理应用中使用 Flink 的 Keyed State 的函数或算子评估性能时应牢记的3个重要因素。

    smartsi
  • Flink 状态管理与 Checkpoint 机制

    相对于其他流计算框架,Flink 一个比较重要的特性就是其支持有状态计算。即你可以将中间的计算结果进行保存,并提供给后续的计算使用:

    zhisheng
  • 聊聊flink的MemoryBackendCheckpointStorage

    本文主要研究一下flink的MemoryBackendCheckpointStorage

    codecraft
  • 聊聊flink的FsCheckpointStorage

    flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/CheckpointS...

    codecraft
  • 聊聊flink的FsCheckpointStorage

    flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/CheckpointS...

    codecraft
  • 快速入门Flink (2) —— Flink 集群搭建

    上一篇博客博主已经为大家介绍了 Flink的简介与架构体系,本篇博客,我们来学习如何搭建Flink集群。

    大数据梦想家
  • 【推荐系统算法实战】Flink 架构及其工作原理

    分布式系统需要解决:分配和管理在集群的计算资源、处理配合、持久和可访问的数据存储、失败恢复。Fink专注分布式流处理。

    一个会写诗的程序员
  • Flink 状态管理与检查点机制

    相对于其他流计算框架,Flink 一个比较重要的特性就是其支持有状态计算。即你可以将中间的计算结果进行保存,并提供给后续的计算使用:

    大数据真好玩

扫码关注云+社区

领取腾讯云代金券