Flink详解系列之八--Checkpoint和Savepoint

Java中事务保存点(Savepoint) 在Java中,通常使用JDBC API来管理数据库的事务。保存点是在一个事务中设置的一个标记,它记录了当前事务的状态。如果需要在事务中回滚到某个特定的点,而不是回滚整个事务,就可以使用保存点。 阅读详情

一、Checkpoint

获取分布式数据流和算子状态的一致性快照是Flink容错机制的核心,这些快照在Flink作业恢复时作为一致性检查点存在。

1.1 原理

1.1.1 Barriers
Barrier是由流数据源(stream source)注入数据流中,并作为数据流的一部分与数据记录一起往下游流动。Barriers将流里的记录分隔为一段一段的记录集,每一个记录集都对应一个快照。每个Barrier会携带一个快照的ID,这个快照对应Barrier前面的记录集。如下图所示。


当一个算子从所有输入流都接收到一个快照(n)的barrier时,它首先会生成该算子的状态快照,然后往该算子的所有下游广播一个barrier。这个算子是sink算子时,它会告知检查点的 coordinator(一般是flink的jobManager),当所有sink算子都告知接收到了一个快照的barrier时,该快照生成结束。

1.1.2 对齐检查点(aligned Checkpoint)
当一个算子接收到多于一个输入流时,就需要进行这些流的barrier对齐。当一个算子接收到第一个输入流的快照barrier n时,它不能继续处理该流的其他数据,而是需要等待接收到最后一个流的barrier n,才可以生成算子的状态快照和发送挂起的输出记录,然后发送快照barrier n。否则,检查点快照n跟检查点n+1就会混淆。


检查点对齐保证了状态的准确性,但由于对齐操作是阻塞式的,会使检查点生成时长不可控,降低吞吐量,当作业出现反压时,会加剧反压,甚至导致作业不稳定等问题。

1.1.3 非对齐检查点(Unaligned Checkpoint)
为规避上述风险,从Flink 1.11开始,检查点也可以是非对齐的。具体方法比较类似于Chandy-Lamport算法,但Flink仍会在数据源插入barrier来避免检查点coordinator负载过重。


具体处理过程是这样的:算子在接收到第一个数据流的barrier n时就立即开始生成快照,将该barrier发往下游,将其他流中后续到来的该快照的记录进行异步存储,并创建各自的状态快照。

非对齐检查点可以保证barrier尽快到达sink, 非常适合算子拓扑中至少有一条缓慢路径的场景。然而,由于会增大I/O压力,如果写入状态后端是处理瓶颈的话,使用非对齐检查点就不太合适了。

1.2 使用配置

检查点的配置有许多项,下面就介绍几个比较常用的重要配置。
1.2.1 检查点保留策略
检查点在默认不保留,而且只用于作业失败时的恢复。程序取消时,检查点会被删除。但可以通过配置周期性的保留检查点,由于这些配置,当作业失败或者取消时,保留的检查点不会被自动清除。这样作业失败时,就有一个可以用于恢复的检查点了。

CheckpointConfig config = env.getCheckpointConfig();
config.enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);

ExternalizedCheckpointCleanup配置了作业取消时检查点是保留还是删除。

  • ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION: 取消作业时保留检查点。请注意,在这种情况下,您必须在取消后手动清理检查点状态。
  • ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION: 取消作业时删除检查点。只有在作业失败时,检查点状态才可用。

1.2.2 目录配置
检查点保存的信息包括元数据文件和数据文件,可以通过配置文件配置, 并且是全局性的,对所有作业适用。

state.checkpoints.dir: hdfs:///checkpoints/

在使用状态后端FsStateBackend或者RocksDBStateBackend时,可以指定相关作业的检查点保存目录

env.setStateBackend(new RocksDBStateBackend("hdfs:///checkpoints-data/"));

1.2.3 模式配置
Checkpoint支持两种模式:exactly-once和at-least-once, 默认模式为exactly-once。

// set mode to exactly-once (this is the default)
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
  • Exactly Once:保证每条数据对于 Flink 的状态结果只影响一次。
  • At Least Once:每条数据对于 Flink 状态计算至少影响一次。

1.2.4 backend选择
关于backend配置及选择可以参考上一篇Flink详解之七--状态管理

1.3 非对齐检查点(unaligned checkpoint)

二、Savepoint

savepoint是使用检查点机制创建的,作业执行状态的全局镜像,可用于flink的停止与恢复,升级等。savepoint有两部分构成:一是在稳定存储(如:HDFS、S3等)中保存了二进制文件的目录,二是元数据文件。这些文件表示了作业执行状态的镜像,其中元数据文件主要保存了以绝对路径表示的指针。

savepoint文件默认保存目录配置

# Default savepoint target directory
state.savepoints.dir: hdfs:///flink/savepoints

1.1 使用

# 触发savepoint
$ bin/flink savepoint :jobId [:targetDirectory]
#删除savepoint
$ bin/flink cancel -s [:targetDirectory] :jobId
#从savepoint恢复
$ bin/flink run -s :savepointPath [:runArgs]
#删除savepoint
$ bin/flink savepoint -d :savepointPath

1.2 配置算子ID

使用savepoint进行恢复时,是根据算子ID来匹配算子状态在savepoint中的存储位置的。官方文档强烈建议给每个算子手动配置一个算子ID,这个ID可以通过uid(String)方法配置。

当没有手动配置时,程序会根据算子在的程序算子拓扑中的位置生成一个ID。如果程序没有改变,是可以从savepoint中恢复的,但如果程序改变了,同一个算子在程序中的位置也就改变了,相应的算子ID也会变化,就无法从之前的savepoint恢复了。

DataStream<String> stream = env.
  // Stateful source (e.g. Kafka) with ID
  .addSource(new StatefulSource())
  .uid("source-id") // ID for the source operator
  .shuffle()
  // Stateful mapper with ID
  .map(new StatefulMapper())
  .uid("mapper-id") // ID for the mapper
  // Stateless printing sink
  .print(); // Auto-generated ID

由于有些算子是有状态的,有些算子是无状态的,实际上只要给有状态的算子添加算子ID就可以,但很多人并不太清楚哪些算子是有状态的,哪些是无状态的,所以,实际操作中,尽量给每个算子手动配置算子ID。

三、Checkpoint与Savepoint的异同

3.1 相同点

  • 都用于作业的恢复
  • 创建时都使用ckeckpoint机制,使用相同的一套代码和数据格式

3.2 不同点

  • 设计目的不同: checkpoint是作为Flink作业容错机制存在的,用于作业潜在失败时的恢复,savepoint是作为需要作业重启时(比如:Flink版本升级、作业拓扑改变,并行度修改,作业A/B测试等场景)保存状态并恢复的一种机制。
  • 生命周期不同: checkpoint的生命周期由flink来管理,flink负责checkpoint的创建、维护和释放,过程中没有与用户交互。savepoint就不同了,它是由用户来创建、维护和删除的,savepoint的是事先规划好的、手动备份并用于恢复。
  • 具体实现不同: checkpoint作为用于恢复,需要定期触发并保存状态的机制。实现上需要满足两点:1)创建时尽量轻量级,2)恢复时越快越好。savepoint在创建和恢复时比checkpoint更重一些,更偏重于便捷性及对作业前述改动的支持。
Flink 非对齐Unaligned的checkpoint(源码分析) Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 本文源码基于flink1.14 在帮助用户排查任务的时候,经常会发现部分task处理的慢,在Exactly once语义时需要等待快照的对齐而白白柱塞的情况 在flink1.11版本引入了非对齐的checkpoint,来解决这种柱塞问题,所以来看看这个新特性的源码是如何实现的 阅读详情

相关推荐

Flink检查点(checkpoint)、保存点(savepoint)的区别与联系

最近一段时间很忙,顾不上仔细选题,写一个所有人都知道的小知识点吧。 checkpoint和savepoint是Flink为我们提供的作业快照机制,它们都包含有作业状态的持久化副本。官方文档这样描述checkpoint: Checkpoints make state in Flink fault tolerant by allowing state and the correspo...

LittleMagic's Blog 8169

[1143]Flink的Checkpoint和Savepoint

文章目录Flink的Checkpoint和Savepoint介绍第一部分:Flink的Checkpoint1\. Flink Checkpoint原理介绍2\. Checkpoint的简单设置3. 保存多个Checkpoint4.从Checkpoint进行恢复Checkpoint1、checkpointConfig2、barrier第二部分: Flink的Savepoint1.Flink的Savepoint原理介绍2.创建Savepoint3.从Savepoint恢复4. Savepoint目录结构flin

周小董 5189

[Flink原理介绍第四篇】:Flink的Checkpoint和Savepoint介绍

第一部分:Flink的Checkpoint 1. Flink Checkpoint原理介绍 Checkpoint是Flink实现容错机制最核心的功能,它能够根据配置周期性地基于Stream中各个Operator的状态来生成Snapshot,从而将这些状态数据定期持久化存储下来,当Flink程序一旦意外崩溃时,重新运行程序时可以有选择地从这些Snapshot进行恢复,从而修正因为故障带来的程序数据状...

hxcaifly的博客 9754

事务之保存点(savepoint)

如果开启一个事务,已经写了很多语句,突然发现执行完上一语句时发现语句写错了。你只好使用rollback语句让数据库恢复到事务开启之前的状态。以前写完的语句也需要重新执行。所以mysql数据库的作者提出了保存点(savepoint)的概念。开启事务后在执行语句后面打几个点,我们调用rollback语句就会回滚到指定的点。而不是回到事务执行之前的样子。 定义保存点的语法如下: SAVEPOINT 保存点的名称; 当我们想回滚到某个保存点时,可以使用下边的语句。(WORK和SAVEPOINT可有可无)

hammring的博客 7691

Flink-使用checkpoint和savepoint进行快照恢复

flink-使用checkpoint和savepoint进行快照恢复使用checkpoint(自动,由flink本身来管理)准备测试代码测试步骤flink run的常见参数flink-checkpoint的配置文件配置(不需要代码设置)使用Savepoint(用户手动操作)Savepoint需要注意的点:手动savepoint的步骤删除savepoint 使用checkpoint(自动,由flink本身来管理) 准备测试代码 public class Demo1 { public static vo

Zong_0915的博客 8176

Flink的Checkpoint和savepoint的区别和作用

Flink的Checkpoint和savepoint的区别和作用 一、Flink的checkpoint flink的checkpoint是异步的、分布式的、轻量级的,将同一时间点的task/operator的状态数据全局统一快照处理,包括用户自定义的keyed state和operator state 当未来程序出现问题,可以基于保存的快照容错。 checkpoint的原理 A:flink会在输入的数据集中,间隔的生成checkpoint barrier,通过barrier间隔时间段内的数据划分到相应的c

weixin_43525585的博客 1354

Flink之checkpoint和savepoint的区别

1.什么是Checkpoint Checkpoint:一种由 Flink 自动执行的快照,其目的是能够从故障中恢复。Checkpoint 使 Flink 的状态具有良好的容错性,通过 checkpoint 机制,Flink 可以对作业的状态和计算位置进行恢复。 Checkpoint 对于用户层面,是透明的,用户会感觉程序一直在运行。 用户无法对其进行交互,用户可以在程序启动之前,设置好实时程序 Checkpoint 相关参数,当程序启动之后,剩下的就全交给 Flink 自行管理。 (1)checkpoint

鸡排小农的博客 4618

Flink 专题 -2Checkpoint、Savepoint 机制

文章目录CheckPoint1. checkpoint 保留策略2. Checkpoint 配置3. Checkpoint 状态点恢复SavepointSavepoint 介绍savepoint 和 checkpoint 区别Assigning Operator IDs ( 分配 operator ids)Savepoint State保存Savepoint在yarn 集群中保存Savepoint...

augus_one的博客 2871

Flink Savepoint 和 Checkpoint 使用

flink Savepoint 和 Checkpoint 使用 checkpoint 应用定时触发,用于保存状态,会过期 内部应用失败重启的时候使用,特点是作业容错自动恢复,轻量,自动周期管理 savepoint 用户手动执行,是指向Checkpoint的指针,不会过期 在升级的情况下使用,特点关注状态数据可以移植性,状态数据生成和恢复成本高,用户手动管理 注意:为了能够在作业的不同版本之间以及 Flink 的不同版本之间顺利升级,强烈推荐程序员通过 uid(String) 方法手动的给

yang灬仔 5296

Android13 SurfaceFlinger启动流程分析

在Android13版本中,SurfaceFlinger是由Android.bp去启动init.rc文件,然后再解析文件去加载SurfaceFlinger。上面方法主要处理如下:1、调用surfaceflinger的createSurfaceFlinger方法,实例化surfaceflinger。2、调用flinger(surfaceflinger)的init()方法,在客户端连接之前进行初始化。

liuning1985622的博客 1918

OpenBCI脑电实验避坑指南:如何用Python准确捕捉P300信号

本文详细介绍了使用OpenBCI和Python进行P300脑电信号实验的避坑指南,包括电极贴放、信号采集、信号处理和数据分析等关键步骤。通过实战经验和代码示例,帮助研究者避开常见陷阱,提高P300信号捕捉的准确率,适用于脑机接口和神经科学研究。

weixin_30316097的博客 551

flink savepoint 和 checkpoint对比

flink 设计checkpoint为什么还要设计savepoint? Savepoint 和 Checkpoint 都是使用 Asynchronous Barrier Snapshotting(简称 ABS)算法实现分布式快照的,都可以确保一致性、容错、故障恢复。 1.什么是 Checkpoint? Flink Checkpoint 是一种容错恢复机制。这种机制保证了实时程序运行时,即使突然遇到异常也能够进行自我恢复。Checkpoint 对于用户层面,是透明的,用户会感觉程序一直在运行。Flink Ch

启迪思维,精进技术 2840

Web自动化神操作:如何用OpenCV 破解滑块验证码?

验证码作为一种安全机制,可以有效防止暴力破解密码、发帖、灌水、刷票等,大家在做 Web 自动化的时候应该有碰到验证码这个难题,一般我们可以和开发沟通请求他们的帮助:去掉验证码或者设置一个万能验证码,而如果开发不帮忙我们该如何去解决呢? 本篇文章以 Java 语言为例教你怎么破解验证码。 现在大多数网址会采用滑块验证码的方式,下面以腾讯的滑块验证码为例,先来看看破解的效果: 要破解滑块验证码,我们一般采取的思路如下: 获取滑块到背景缺口图的距离 通过 selenium 的 Actio

不喝枸杞的程序员 2035

《Flink 容错机制完全解析:Checkpoint 与 Savepoint 一次讲透!》

Flink容错机制解析:Checkpoint与Savepoint详解 摘要:本文深入解析Flink的两种状态快照机制。Checkpoint是自动周期性的容错快照,确保Exactly-Once语义,基于Chandy-Lamport算法实现;Savepoint则用于手动备份升级,支持长期存储。文章对比了两者的触发方式、存储周期和典型应用场景,并介绍了RocksDB等状态后端的选择建议。生产实践中,Checkpoint间隔建议60-120秒,Savepoint则应在任务升级前手动触发。通过合理配置这两种机制,可实

weixin_44519124的博客 1591

Linux基础——“C语言高级编程” C语言中的细节你真的知道吗?

文章目录GCC简介 GCC简介 gcc 所支持后缀名解释 .c c原始程序 .C / .cc /.cxx C++原始程

weixin_44278698的博客 2511

在 PyCharm 中使用 Copilot

此外,要在 PyCharm 中使用 GitHub Copilot,您必须有效订阅 Copilot。在 PyCharm 中安装 GitHub Copilot 后,您现在可以将其用作项目的扩展。此外,它很容易安装在不同的 IDE 平台上,您还可以为特定编程语言启用 GitHub 插件。此外,按照以下步骤,您可以轻松地在 PyCharm 中安装 GitHub Copilot。此外,在 IDE 上使用 GitHub Copilot 时,您可以使用一些快捷方式。

一览无遗 1万+

9、Flink四大基石之Checkpoint容错机制详解及示例(checkpoint配置、重启策略、手动恢复checkpoint和savepoint)

Flink 中的每个方法或算子都能够是有状态的(Flink(八)Flink四大基石之State概念、使用场景、持久化、批处理的详解与keyed state和operator state、broadcast state使用和详细示例了解更多)。状态化的方法在处理单个 元素/事件 的时候存储数据,让状态成为使各个类型的算子更加精细的重要部分。为了让状态容错,Flink 需要为状态添加 checkpoint(检查点)。

alanchanchn的专栏 7万+

CST实战:5分钟搞定圆极化天线轴比分析(含远场设置技巧)

本文提供了一份CST Studio Suite圆极化天线轴比分析的实战指南。文章详细讲解了轴比的概念与工程标准,并重点演示了如何正确设置远场监视器以获取Axial Ratio数据,包括关键步骤与后处理技巧。最后,通过植入式天线在生物组织环境中的案例,分析了复杂环境对轴比性能的影响及优化思路。

nokia的博客 994

Flink DataStream Checkpoint和Savepoint

针对不同场景,Flink提供了Checkpoint和Savepoint两种容错机制。 本文总结Checkpoint和Savepoint的使用。 Checkpoint Checkpoint存储状态数据,由Flink自己定期触发和清除,轻量快速,主要应用于作业生命周期内故障时恢复。 Checkpoint配置 StreamExecutionEnvironment env = StreamExecutio...

王佩的优快云博客 2848

Unity3D实现视频和模型融合效果

在Unity中,视频和3D模型融合通常涉及到将视频表面内嵌到3D场景中。视频不影响模型的展示, 这可以通过使用Shader和Texture来实现。大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。下面就让我们进入正文吧!提示:以下是本篇文章正文内容,下面案例可供参考本次介绍的就是视频和模型融合的实现,以后有其他的需要添加的会继续添加不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒。

心疼你的一切博客 5357

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

flink 从savepoint、checkpoint中恢复数据

flink作业因为故障导致restart strategy失败或升级flink版本重新发布任务,这时就需要从最近的checkpoint恢复。一般而言有两种方案,第一种方案是开启checkpoint且任务取消时不删除checkpoint(调整参数execution.checkpointing.externalized-checkpoint-retention),第二种方案是定时触发savepoint(编写代码调用flink rest api)。

不是一枚开发 3474

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

flink checkpoint和savepoint的实践使用

环境: flink job 采用的是on yarn模式 步骤1:修改flink-conf.yaml state.backend 存储和检查点的后台存储。可选值为rocksdb filesystem hdfs state.checkpoints.dir 保存检查点目录 state.backend.incremental 增量存储 state.checkpoints.num-retained 保留最近检查点的数量 注释:hdfs://haservice/flink-checkpoints...

u012447842的博客 1405

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

flink(十三):flink-CheckPoint和SavePoint作用和区别

文章目录分享说明CheckcPoint运行原理开启设置保存多个CheckPoint恢复任务SavePoint运行原理创建SavePoint恢复任务SavePoint和CheckPoint的区别详细区别总结 分享 大数据博客列表 说明 本博客周五更新一次 Flink 功能模块CheckPoint(检查点)和SavePoint(保存点)是任务异常后恢复任务的重要功能,当任务异常关闭时,可以从检查点或保存点恢复任务。 CheckcPoint CheckPoint是 flink 实现容错机制最核心的功能,

幻神舞的专栏 2051

Flink 学习八 Flink 容错机制 & checkpoint & savepoint

flink checkpoint savepoint 基础概念和使用

weixin_44244088的博客 2921
上一篇: Flink详解系列之九--反压机制和处理
下一篇: Flink详解之七--状态管理
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值