Flink 的 Checkpoint配置详解

Flink 的 Checkpoint 总结
1、简介
1)概述

Flink中的每个函数和运算符都可以有状态,状态中存储计算的中间结果。

状态可以用于容错,在任务被动失败或者主动重启时,可以通过 Checkpoint 或 Savepoint 从先前的状态中恢复计算数据,以保证数据计算的 ExactlyOnec(精准一次)或 AtleastOnce (至少一次)。

2)检查点算法

1.Barrier对齐: 一个Task 收到 所有上游 同一个编号的 barrier之后,才会对自己的本地状态做 备份
精准一次: 在barrier对齐过程中,barrier后面的数据 阻塞等待(不会越过barrier)
至少一次: 在barrier对齐过程中,先到的barrier,其后面的数据 不阻塞 接着计算

2.非Barrier对齐: 一个Task 收到 第一个 barrier 时,就开始 执行备份,能保证 精准一次
先到的barrier,将 本地状态 备份, 其后面的数据接着计算输出
未到的barrier,其 前面的数据 接着计算输出,同时 也保存到 备份中
最后一个barrier到达 该Task时,这个Task的备份结束

2、前提
1) ExactlyOnec(精准一次)

上游:可以重发数据(如:消息队列:Kafka\分布式文件系统:HDFS)

下游:支持幂等性(如:Doris 支持去重)

2) AtleastOnce(至少一次)

上游:可以重发数据(如:消息队列:Kafka\分布式文件系统:HDFS)

3、启用检查点
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

// 启用 Checkpoint 每 5 秒 一次,模式为 EXACTLY_ONCE
env.enableCheckpointing(5000, CheckpointingMode.EXACTLY_ONCE);
4、常用配置参数
1)最终检查点
// 最终检查点,1.15开始,默认是true
configuration.set(ENABLE_CHECKPOINTS_AFTER_TASKS_FINISH, false);
2)开启 Changelog
// 要求checkpoint的最大并发必须为1
env.enableChangelogStateBackend(true);
3)代码中用到HDFS,需要导入hadoop依赖、指定访问HDFS的用户名
System.setProperty("HADOOP_USER_NAME", "HADOOP");
4)开启非对齐检查点(barrier非对齐)
// 开启的要求: Checkpoint模式必须是精准一次,最大并发必须设为1
checkpointConfig.enableUnalignedCheckpoints();

// 开启非对齐检查点才生效: 默认0,表示一开始就直接用 非对齐的检查点
// 如果大于0,一开始用 对齐的检查点(barrier对齐),对齐的时间超过这个参数,自动切换成 非对齐检查点(barrier非对齐)
checkpointConfig.setAlignedCheckpointTimeout(Duration.ofMinutes(4));
5)检查点常用配置
// 1、启用检查点: 默认是barrier对齐的,周期为5s, 精准一次
env.enableCheckpointing(5000, CheckpointingMode.EXACTLY_ONCE);
CheckpointConfig checkpointConfig = env.getCheckpointConfig();
        
// 2、指定检查点的存储位置
checkpointConfig.setCheckpointStorage("hdfs:///ip:port/dir");

// 3、checkpoint的超时时间: 默认10分钟
checkpointConfig.setCheckpointTimeout(60000);

// 4、同时运行中的checkpoint的最大数量
checkpointConfig.setMaxConcurrentCheckpoints(1);

// 5、最小等待间隔: 上一轮checkpoint结束 到 下一轮checkpoint开始 之间的间隔
checkpointConfig.setMinPauseBetweenCheckpoints(1000);

// 6、取消作业时,checkpoint的数据 是否保留在外部系统
// DELETE_ON_CANCELLATION:主动cancel时,删除存在外部系统的chk-xx目录 (如果是程序突然挂掉,不会删)
// RETAIN_ON_CANCELLATION:主动cancel时,外部系统的chk-xx目录会保存下来
        checkpointConfig.setExternalizedCheckpointCleanup(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);

// 7、允许 checkpoint 连续失败的次数,默认 0 表示 checkpoint 一失败,job 就挂掉
checkpointConfig.setTolerableCheckpointFailureNumber(10);
6)其它配置参数
KeyDefaultTypeDescription
state.backend.incrementalfalseBoolean是否开启增量检查点
state.backend.local-recoveryfalseBoolean是否开启本地恢复(支持 EmbeddedRocksDBStateBackend 和 HashMapStateBackend).
state.checkpoints.num-retained1Integer要保留的已完成检查点的最大数量。
state.savepoints.dir(none)Stringsavepoint保存的地址
state.storage.fs.memory-threshold20 kbMemorySize状态数据文件的最小大小。所有小于此状态块的状态块都内联存储在根检查点元数据文件中。此配置的最大内存阈值为1MB。
state.storage.fs.write-buffer-size4096Integer写入文件系统的检查点流的写入缓冲区的默认大小。实际的写入缓冲区大小被确定为此选项和选项“state.storage.fs.memory-threshold”的最大值。
taskmanager.state.local.root-dirs(none)String定义了用于存储基于文件的状态以进行本地恢复的根目录。
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Flink CheckpointFlink的一种机制,用于在Flink应用程序运行时定期保存应用程序的状态。这个机制可以帮助应用程序在发生故障时快速恢复,从而保证应用程序的高可用性。在Flink中,可以通过配置来控制Checkpoint的行为,包括Checkpoint的间隔时间、最大并发数、超时时间等。具体的配置可以在Flink配置文件中进行设置,也可以在应用程序中通过代码进行设置。例如,可以通过以下代码来设置Checkpoint的间隔时间: env.enableCheckpointing(500); 这个代码表示每隔5秒进行一次Checkpoint。除了间隔时间,还可以通过其他配置来控制Checkpoint的行为,例如: env.getCheckpointConfig().setMaxConcurrentCheckpoints(1); env.getCheckpointConfig().setCheckpointTimeout(60000); 这两行代码分别表示最大并发Checkpoint数为1,Checkpoint的超时时间为60秒。通过这些配置,可以灵活地控制Checkpoint的行为,从而提高应用程序的可靠性和性能。 ### 回答2: Apache Flink 是一个分布式数据处理框架,可以用于实时数据流处理和批处理。为了保证应用程序的可靠性和容错性,Flink 提供了 Checkpoint 机制。Checkpoint 是一种在 Flink 集群中对应用程序状态进行持久化的机制,如果应用程序发生故障或重启,Flink 可以利用Checkpoint 进行恢复。本篇文章将介绍Flink Checkpoint配置。 1. 启用Checkpoint 要启用 FlinkCheckpoint 机制,需要在 Flink 应用程序中将Checkpointing 打开。可以通过在应用程序主类中调用 enableCheckpointing 方法或在 flink-conf.yaml 文件中配置来启用 Checkpointing。如果在 flink-conf.yaml 文件中配置,需要将以下配置设置为 true: ``` execution.checkpointing.enabled: true ``` 2. Checkpoint 间隔 Checkpoint 间隔表示 Flink 应用程序运行时的两个 Checkpoints 之间的间隔时间。可以通过调用 enableCheckpointing方法或在 flink-conf.yaml文件中配置设置 Checkpoint 间隔。如果在 flink-conf.yaml 文件中配置,需要将以下配置设置为所需的 Checkpoint 间隔(以毫秒为单位): ``` execution.checkpointing.interval: 5000 ``` 3. Checkpoint 执行模式 在 Flink 中,有两种 Checkpoint 执行模式:精确一次性和至少一次。精确一次是指 Flink 应用程序执行 Checkpoint 的次数与设置Checkpoint 间隔相同。至少一次是指 Flink 应用程序执行 Checkpoint 的次数可多于设置Checkpoint 间隔。可以通过在应用程序主类中调用 setCheckpointingMode 方法或在 flink-conf.yaml 文件中配置设置 Checkpoint 执行模式。配置 Checkpoint 执行模式的配置项为: ``` execution.checkpointing.mode: at_least_once 或者 execution.checkpointing.mode: exactly_once ``` 4. Checkpoint 存储位置 Flink 应用程序执行 Checkpoint 时,保存状态的位置是非常重要的。Flink 内置了多个状态后端,如内存,文件系统,HDFS 等。可以通过在应用程序主类中调用 setStateBackend 方法或在 flink-conf.yaml 文件中配置设置 Checkpoint 存储位置。以下是在 flink-conf.yaml 文件中配置 Checkpoint 存储位置的示例: ``` state.backend: rocksdb ``` 5. 设置最大并发Checkpoint数目 在 Flink 中,可以同时进行多个 Checkpoint。可以通过在 flink-conf.yaml 文件中配置并发 Checkpoint 数量,并控制最大同时执行Checkpoint 的数目。配置Checkpoint 并发数目的配置项为: ``` execution.checkpointing.concurrent-checkpoints: 1 ``` 总结 Checkpoint 机制是 Flink 的核心特性之一,可以确保 Flink 应用程序状态的可靠性和容错性。在启用 Checkpoint 机制时,需要关注 Checkpoint 间隔,Checkpoint 存储位置,Checkpoints 执行模式和并发 Checkpoint 数量等参数。通过掌握这些参数的含义和配置方法,可以更好地使用 FlinkCheckpoint 机制来提高应用程序的可靠性和灵活性。 ### 回答3: flink checkpointflink框架中一种实现容错的机制,通过将flink作业的状态信息保存到可靠存储介质中,以便在失败情况下能够快速恢复作业。 flink checkpoint配置需要在作业执行前进行设置。在flink 1.11以前的版本中,需要在作业代码编写过程中手动完成checkpoint配置,而在flink 1.11以后的版本中,可采用现成的flink集成组件进行配置flink checkpoint配置基本参数如下: 1. checkpoint interval:设置checkpoint的时间间隔,用于控制checkpoint的频率。checkpoint的时间间隔需要根据不同的作业特点来进行设置,一般建议设置为1分钟以上。 2. checkpointing mode:flink支持两种checkpoint模式,分别是exactly-once模式和at-least-once模式。在exactly-once模式下,flink能够保证数据处理的精确一次性,但是会带来较大的性能开销;在at-least-once模式下,flink会保证每条数据至少处理一次,但是无法保证精确一次性。 3. checkpointing timeout:设置checkpoint的超时时间,当checkpoint时间过长时会进行超时处理。checkpoint的超时时间需要根据集群计算资源和作业特点来进行设置。 检查点提升模式: 当程序的检查点有一些稍微比较长的时候,有可能导致对时间敏感的输入处理存在瓶颈从而导致程序性能急剧下降甚至crash。此时可以打开Incremental Checkpointing开关。开启Checkpointing方式,可以提升程序的健壮性和容错性。 总结:flink checkpoint配置过程需要结合实际的作业特点进行配置,准确合理的配置可以帮助程序达到更好的性能和健壮性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫爱吃小鱼粮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值