flink 检查点(checkpoint)配置与使用

Flink基础(九):Checkpoint的说明和用法 Checkpoint 在 Flink 中是一个非常重要的 Feature,Checkpoint 使 Flink 的状态具有良好的容错性,通过 Checkpoint 机制,Flink 可以对作业的状态和计算位置进行恢复。 Checkpoint 介绍及使用 Flink 的 Checkpoint 有以下先决条件: 需要具有持久性且支持重放一定时间范围内数据的数据源。例如:Kafka、RabbitMQ ... 阅读详情
AI摘要

本文围绕Flink检查点展开,介绍其是定期保存任务状态的机制,用于错误恢复。默认状态存于TM内存,检查点存于JM内存,应用取消或宕机时数据会丢失。可设置将检查点存于外部系统,还讲解了目录结构、恢复应用的方法,强调容灾需可重放数据源。

前言

之前文章有讲过flink的有状态算子。有状态算子就是讲算子产生的中间结果存储在Flink的一些内存数据结构中,比如ValueState、MapState等等。这可以算一种计算机制。比如对流中的某个字段进行累加,我们必须要保存累加的中间结果,下一个事件才能知道加谁。

但是距离容灾还差一段距离。比如job失败了,程序都没有了,内存中也就没有状态数据了。这时候就需要检查点了。所以,检查点就是定期保存任务状态的机制。但是状态又保存到哪里了呢?之前说过的状态后端。

检查点是用于错误恢复的,但这是有条件的:

  • 一方面是数据源必须是可重放(replay)的,主要有两类,一类是以kafka为代表的消息队列,另一类是如hdfs这样的文件系统(非分布式文件系统当然也是可以的)
  • 另一方面是可以持久化存储的状态的系统,主要是分布式文件系统。

检查点配置项详解

package it.kenn.checkpoint;

import org.apache.flink.streaming.api.CheckpointingMode;
import org.apache.flink.streaming.api.environment.CheckpointConfig;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

/**
 * checkpoint 测试
 */
public class CKDemo {
    public static void main(String[] args) {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        //参数为生成checkpoint的时间,以及CheckpointingMode,默认为EXACTLY_ONCE,一般采用默认就可以,如果任务有超低延时需求,可以使用至少一次
        env.enableCheckpointing(1000, CheckpointingMode.AT_LEAST_ONCE);
        //设置检查点模式也可以使用下面方式
        env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.AT_LEAST_ONCE);
        //设置超时时间,超时时间是说,这个检查点设置了,但是过去500ms还没有完成就认为这个检查点超时了,然后把这个检查点终止,也就是不再使用这个检查点了
        env.getCheckpointConfig().setCheckpointTimeout(500);
        /**设置检查点尝试之间的最小间隔。此设置定义检查点协调器在可能触发另一个检查点(相对于最大并发检查点数)后多久可以触发另一个检查点
         * 比如下面的设置,下一个检查点将在上一个检查点完成后,不超过5s内启动
         * 这个参数跟检查点生成的间隔时间是有点冲突的,这个参数不考虑上面提到的检查点持续时间和检查点间隔。或者说设置下面的参数以后,检查点自动就变成5s了,
         * 如果觉得5s不够可以再将间隔设置的大一点,但是不能小于5s了
         * 设置检查点的interval和设置检查点之间的间隔时间有啥不同呢?
         * interval是物理时间的间隔,即时间只要过去1s了,就会生成一个检查点。但是设置检查点之间的间隔是说检查点完成1s了就会设置间隔,这个是跟检查点完成时间相关的
         * 比如存储检查点的系统比较慢,完成一个检查点平均10s,然后下面检查点之间的间隔设置为5s,那么两个检查点生成的时间间隔就是15s
         * 再简单点说,interval设置的是两个检查点生成时刻的间隔,而下面参数设置的是第一个检查点结束和第二个检查点创建(还没有结束)之间的间隔
         **/
        env.getCheckpointConfig().setMinPauseBetweenCheckpoints(5000);
        //设置检查点最大并发数.比如设置为1,表示只能有一个检查点,当这个检查点完成以后才有可能产生下一个检查点。这也是默认参数。如果定义了上面的设置,则不能再定义这条设置项
        env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
        //设置外部检查点。可以将检查点的元数据信息定期写入外部系统,这样当job失败时,检查点不会被清除。这样如果job失败,可以从检查点恢复job。这条很重要,下面一节会详细说明
        env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
        //检查点和保存点都可以用于容灾,这个配置是说如果有一个时间更近的保存点,我也不用,而更加愿意使用检查点进行容灾
        env.getCheckpointConfig().setPreferCheckpointForRecovery(true);
        //设置使用非对齐检查点。它可以极大减少背压情况下检查点的时间,但是只有在精确一次的检查点并且允许的最大检查点并发数量为1的情况下才能使用
        env.getCheckpointConfig().enableUnalignedCheckpoints();

    }
}

检查点保存配置

默认情况下,状态(state)保存在TM的内存中,而检查点(checkpoint)保存在JM的内存中。检查点是为本应用的job任务容灾准备的,即如果应用仍在跑的,但是某个job失败了可以通过检查点进行恢复。但如果应用被取消了,或者应用都宕机了,检查点的数据也就不存在了(因为是存在JM中,应有董没了,内存中的数据肯定也没有了)。要想应用宕机,检查点仍然存在就要设置将检查点存一份在外部系统中。

ExternalizedCheckpointCleanup 模式配置当取消应用时,检查点该如何操作。

  • ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION表示取消作业是保留检查点,这里说的取消是正常取消不是任务失败。如果重启任务,检查点不会自动清除,如果需要清除则需要手动清除。
  • ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION表示取消作业时删除检查点,如果任务失败,检查点不会删除。也就是说任务失败可以从检查点恢复任务。

检查点目录结构

检查点保存目录可以在flink-conf.yml文件中进行全局配置也可以对某个应用进行单独配置

# yml中的配置是全局的,即每个应用都用这个路径
state.checkpoints.dir: hdfs:///checkpoints/
//在代码中对某个应用进行配置,这其实就是在设置状态后端
env.setStateBackend(new RocksDBStateBackend("hdfs:///checkpoints-data/"));

在配置的目录下,以jobid再分目录,每个jobid对应的目录下存放本应用的所有检查点。

从检查点恢复应用

检查点的数据已经持久化到分布式文件系统中了。如果重启应用的时候想恢复状态可以执行下面命令

$ bin/flink run -s :checkpointMetaDataPath [:runArgs]

总结

  • 检查点是用来存储状态(state)的,默认情况下保存在JM中,如果任务取消或者失败,检查点就丢了
  • 可以通过设置检查点的外部存储选项将检查点保存在外部分布式文件系统中。
  • 如果用于容灾,只将检查点保存在外部系统中也是不够的,需要flink处理的数据是可重放数据源来的,比如消息队列和各种文件系统
  • 重启任务从检查点恢复需要指定检查点的存放路径

flink sql checkpoint 调优配置 `execution.checkpointing.externalized-checkpoint-retention`: 外部化检查点的保留策略。- `execution.checkpointing.tolerable-failed-checkpoints`: 允许的连续失败检查点的最大数量。- `execution.checkpointing.max-concurrent-checkpoints`: 并发生成检查点的最大数量。如果设置为`true`,则检查点将在作业的所有任务完成之前生成。 阅读详情

相关推荐

Flink 的 Checkpoint配置详解_flink 设置checkpoint

Flink中的每个函数和运算符都可以有状态,状态中存储计算的中间结果。状态可以用于容错,在任务被动失败或者主动重启时,可以通过 Checkpoint 或 Savepoint 从先前的状态中恢复计算数据,以保证数据计算的 ExactlyOnec(精准一次)或 AtleastOnce (至少一次)。

2401_89733751的博客 819

Flink Checkpoint 详解

阳阳阳的博客 8995

Flink之容错机制

一、Checkpoint,一致性检查点 flink故障恢复机制的核心就是checkpoint 有状态的流应用的一致性检查点,其实就是所有任务的状态,在某个时间点的一份快照,这个时间点是指所有任务都恰好处理完一个相同的输入数据的时候 如上图所示:此应用有一个source task,消费一个递增数的流,如1,2,3等等。流中的数据被分区到一个奇数流,一个偶数流。在一个sum operator中,...

heroking 1841

【Flink 基础篇】Flink 架构(五):检查点 Checkpoint(看完即懂)

本篇博客我们将介绍 Flink 的检查点(checkpoint)及故障恢复机制,看一下它们如何提供精确一次的状态一致性保障。而在下一篇博客中,我们还会讨论 Flink 所独有的保存点(savepoint)机制,它就像一把 “瑞士军刀”,解决了运行流式应用过程中的诸多难题。

Data · Model · Agent · Repeat 4216

Flink的容错机制第四篇 checkpoint触发机制

一,checkpoint的配置 默认checkpoint功能是disabled的,想要使用的时候需要先启用checkpoint开启之后,默认的checkPointMode是Exactly-once。 官方配置代码如下: StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();...

lishinho的博客 7791

flink重温笔记(十一):Flink 高级 API 开发——flink 四大基石之 Checkpoint(详解存储后端)

1- Flink 检查点机制,(协调者)定期在数据流上生成 checkpoint barrier;2- 当某个算子接收到barrier(数据栅栏) 时,会基于当前状态生成一份快照;3- 后将 barrier 传递给下游算子,依次快照并传递下去,直到 sink;4- 出现异常时,根据最近的快照数据,将所有算子恢复到之前状态;5-收到所有算子的报告后,才认为该周期快照成功。flink-conf.yaml 配置文件的 restart-strategy 配置参数决定重启策略。重启策略重启策略值。

m0_60732994的博客 2810

【Flink】Checkpoint机制

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 每 60s 做一次 checkpoint env.enableCheckpointing(60000); // 高级配置: // checkpoint 语义设置为 EXACTLY_ONCE,这是默认语义 env.getCheckpointConfig().setCheckpointingMode(CheckpointingM

学习笔记。 1374

【信息科学与工程学】【物理/化学科学和工程技术】知识体系021 断裂力学03 极端制造与精密加工领域(原子级操控、缺陷物理、界面工程和系统级可靠性)

Flink的Checkpoint机制通过​​ 实现容错,确保Exactly-Once语义。

weixin_49199313的博客 1064

Flink 检查点配置

当有界数据 , 部分Task 完成 , Flink 1.14 后 , 它们依然能进行检查点。检查点存储 (CheckpointStorage) : 持久化存储位置。Rocksdb 状态后端 : 启用增量 checkpoint。

记录点点滴滴 2090

Flink 启用与配置检查点 Checkpoint

Flink 中每个函数和算子都可以是有状态的(请参阅了解详细信息)。有状态函数在处理单个元素/事件时会存储数据。为了能够使状态可以容错,Flink 需要对状态进行 Checkpoint。Checkpoint 可以允许 Flink 在流中恢复状态以及消费位置。关于 Flink 容错机制背后的技术请参阅的详细文档。

SmartSi 1823

【Flink】checkpoint storage at checkckpoint coordinator No route host from xx to xx:9000

1.场景1 1.1 概述 提交一个flink任务,然后运行报错如下 后来找到原因,因为我们配置错误了hdfs的主机和端口,导致找不到,然后检查点,无法创建,改成正确的就好了。

九师兄 974

Flink笔记17:检查点(checkpoint)、保存点(save points)与重启策略配置

1、检查点(checkpoint) Flink 故障恢复机制的核心,就是应用状态的一致性检查点。有状态流应用的一致检查点,其实就是所有任务的状态,在某个时间点的一份拷贝(一份快照);这个时间点,应该是所有任务都恰好处理完一个相同的输入数据的时候。 下图是一个奇偶求和的例子,sum_even表示偶数求和,sum_odd表示奇数求和,数据源是1-9的数字。从图中可以看出,source偏移量为5,表示已经读取了1-5的数字,sum_even=2+4=6,sum_odd=1+3+5=9。此时做一个checkpoin

Cape_sir 3196

Flink系列:Checkpoint使用方法

目录 作用 前提条件 使用方法 demo 配置文件中声明方法 代码中声明方法 作用 当Flink任务执行出现错误时,为了可以恢复数据继续消费,flink可以设置记录相应的状态和流位置(默认情况下,检查点处于禁用状态),以便恢复数据。 前提条件 可以在一定时间范围内重播记录的持久(或持久)数据源。 此类消息源的示例是持久消息队列(例如,Apache Kafka,RabbitMQ,Amazon Kinesis,Google PubSub)或文件系统(例如,HDFS,S3,G...

NIO4444 855

Flink 的 Checkpoint配置详解

Flink 的 Checkpoint 配置详解

猫猫爱吃小鱼粮 2414

Agisoft Metashape相机标定笔记

使用Metashape进行自动相机标定是可能的。(可选:使用打印的棋盘格图案,但需保证它是平坦的且单元格是正方形)。相机标定步骤支持全相机标定矩阵的估计,包含非线性的畸变参数。相机模型的细节请参照附录D——相机模型板块。:在通用的工作流程中,相机标定步骤可以跳过。因为Metashape会在图像定向过程中进行相机自标定。但是,如果定向结果不稳定,例如,由于影像之间缺乏连接点,额外进行单独的相机标定步骤也许是有用的。

天桥飞熊的博客 3972

Vmware Vcenter7.0证书web续期发生错误

生成证书,选择第三个(PS,如果没有域名的,一定要写IP,不然很容易卡在85%,服务不能起来)这里大概率可能是证书里面的FQDN和主机不匹配,又或者是主机解析FQDN有问题。vCenter _MACHINE_CERT快到期了,通过web界面更新证书失败。vSphere Client 版本 7.0.2.00200。登陆ssh到vcenter,重新生成证书。先关掉HA,不然证书管理会报错。第一步先这样,重新续订一下证书。

m0_74823595的博客 3943

Flink调优----资源配置调优与状态及Checkpoint调优

在大数据处理领域,Flink 作为一款强大的流处理框架,其性能优化对于高效数据处理至关重要。合理的资源配置是实现卓越性能的基石,它直接关系到 Flink 作业在处理大规模数据时的效率、稳定性以及资源利用率。而状态及 Checkpoint 调优则是确保数据处理准确性与可靠性的关键环节,能够有效应对系统故障与数据一致性挑战。通过深入探究资源配置调优以及状态和 Checkpoint 调优的策略与方法,可使 Flink 在复杂的数据处理场景中充分发挥其潜力

天冬忘忧的博客 1893

Uni-App推送踩坑实录:从云函数URL化到后台推送失效,我都经历了什么

本文详细记录了Uni-App开发者在接入uni-push 2.0时遇到的推送失效问题,从云函数URL化到后台推送失效的完整排查过程。通过系统化分析和与官方沟通,最终找到解决方案,并分享了预防措施与最佳实践,帮助开发者避免类似问题。

weixin_42552716的博客 485

大数据技术之Flink容错机制--检查点与保存点的比较(上)

检查点就是将之前某个时间点的所有状态保存下来,做一份“存档”。在遇到故障重启之后就可以从检查点中“读档”,恢复出之前的状态,这样就可以回到当时保存的一刻接着处理数据了。

gene20200509的博客 761

基于DRU-HVDC的构网型海上风电场环流机理仿真复现

本文介绍了基于DRU-HVDC的构网型海上风电场环流机理仿真模型的构建方法。主要内容包括: 完整的Simulink模型结构,包含主模型文件GFM_DRU_Main.slx和配置脚本GFM_DRU_Setup.m 系统参数设置,包括基础频率(20Hz)、电压基准值(690V)、功率基准值(2MVA)等 四种仿真场景配置:电压不平衡、相位不平衡、阻抗不平衡和频率不平衡 风力发电机(WT)子系统的详细构建步骤,包含电压源、输出阻抗和测量模块 变压器和DRU整流器的参数设置 该模型可用于研究构网型风电场的环流机理。

huanghm88的专栏 261

YOLO 系列专栏(二十九)YOLO26 × StarNet 轻量化涨点方案(CVPR 2024)轻量化、主干改进篇 | 星星卷积虽小,却蕴藏着巨大的高效潜力

StarNet 出自 CVPR 2024 轻量化主干网络工作,核心创新是,依靠逐元素乘法实现高阶特征融合,在几乎不增加参数量与 FLOPs 的前提下,大幅提升特征表达能力,天然适合等多任务统一建模。本文将 StarNet 完整替换 YOLO26 原有主干,保留 YOLO26 无 NMS 检测头与轻量化结构,实现,并提供。

qq_36130719的博客 409

Flink之checkpoint一致性检查点

Flink之checkpoint 一致性检查点 容错简介 flink为了保证程序操作状态的容错性,flink在内部引入了checkpoint机制,检查点最终从datastream中以exactly once或者at least one进行状态映射,容错机制,持续的以一定时间间隔描绘整个分布式流的状态并保存在:MasterNode的内存或者HDFS文件系统,这是非常轻量级的,并不会对性能造成影响...

shufangreal的博客 903

Autosar诊断实战系列05-Dcm之0x27加解密服务配置开发详解

UDS 0x27服务实战开发介绍,对解锁尝试次数及delay时间进一步解释。

initiallizer的博客 1991

Flink前期环境配置

Flink环境配置

weixin_44485652的博客 338

YOLO26改进策略【YOLO和Mamba】| CVPR 2025:EfficientViM 压缩隐藏状态空间进行通道混合、单头设计减少内存操作,提升目标检测效率与精度

本文记录的是利用模块优化的目标检测网络模型。EfficientViM Block(基于隐藏状态混合器的状态空间对偶性模块) 的设计旨在,提升特征提取效率,同时兼顾全局依赖捕捉与局部细节保留。本文将深入研究的原理,并将其应用到中,通过重构特征提取流程、减少内存绑定操作、融合多阶段特征,增强模型在资源受限环境下的检测性能与速度。EfficientViM: Efficient Vision Mamba with Hidden State Mixer based State Space DualityEfficie

Limiiiing的博客 398

基于STM32、HAL库的ADE7880ACPZ-RL电能计量芯片驱动程序设计

@retval 状态 (ADE7880_OK或ADE7880_ERROR)* @retval 状态 (ADE7880_OK或ADE7880_ERROR)* @retval 状态 (ADE7880_OK或ADE7880_ERROR)* @retval 状态 (ADE7880_OK或ADE7880_ERROR)* @retval 状态 (ADE7880_OK或ADE7880_ERROR)PA6 (MISO) <--> SDO (SPI数据输出)PB0 (CS) <--> /CS (片选,低有效)

corlin6688的博客 668
上一篇: flink 1.11 广播状态(Broadcast State)的使用
下一篇: Springboot application.properties配置文件常用配置项纪录
iFence
博客等级 码龄9年 8051粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值