flink的Checkpoint开启与配置

13 篇文章 0 订阅
9 篇文章 1 订阅
本文详细介绍了Apache Flink中的checkpoint机制,它是实现流处理应用容错的关键。内容涵盖了checkpoint的基本概念、配置选项,以及如何设置和调整以确保精确一次的状态一致性。此外,还讨论了StateBackend的选择和在迭代作业中的使用注意事项。通过理解这些,开发者可以更好地管理和优化Flink作业的容错性和性能。
摘要由CSDN通过智能技术生成

Checkpoint
Flink 中的每个方法或算子都能够是有状态的。 状态化的方法在处理单个元素/事件 的时候存储数据,让状态成为使各个类型的算子更加精细的重要部分。 为了让状态容错,Flink 需要为状态添加 checkpoint(检查点)。Checkpoint 使得 Flink 能够恢复状态和在流中的位置,从而向应用提供和无故障执行时一样的语义。

前言

太难了,自学了这么多天,连checkpoint都搞不清楚,呜呜呜
特意去从官网上再次阅读了一下,一边抄一边记下


前提条件

Flink 的 checkpoint 机制会和持久化存储进行交互,读写流与状态。一般需要:

  • 一个能够回放一段时间内数据的持久化数据源,例如持久化消息队列(例如 Apache Kafka、RabbitMQ、 Amazon
    Kinesis、 Google PubSub 等)或文件系统(例如 HDFS、 S3、 GFS、 NFS、 Ceph 等)。
  • 存放状态的持久化存储,通常为分布式文件系统(比如 HDFS、 S3、 GFS、 NFS、 Ceph 等)。

开启与配置 Checkpoint

默认情况下 checkpoint 是禁用的。通过调用 StreamExecutionEnvironment 的 enableCheckpointing(n) 来启用 checkpoint,里面的 n 是进行 checkpoint 的间隔,单位毫秒。


Checkpoint 其他的属性包括:

精确一次(exactly-once)对比至少一次(at-least-once):你可以选择向enableCheckpointing(long interval, CheckpointingMode mode)方法中传入一个模式来选择使用两种保证等级中的哪一种。对于大多数应用来说,精确一次是较好的选择。至少一次可能与某些延迟超低(始终只有几毫秒)的应用的关联较大。

  • checkpoint 超时:如果 checkpoint 执行的时间超过了该配置的阈值,还在进行中的 checkpoint 操作就会被抛弃。

  • checkpoints 之间的最小时间:该属性定义在 checkpoint 之间需要多久的时间,以确保流应用在 checkpoint 之间有足够的进展。如果值设置为了 5000, 无论 checkpoint 持续时间与间隔是多久,在前一个 checkpoint 完成时的至少五秒后会才开始下一个 checkpoint。
    往往使用“checkpoints 之间的最小时间”来配置应用会比 checkpoint 间隔容易很多,因为“checkpoints 之间的最小时间”在 checkpoint的执行时间超过平均值时不会受到影响(例如如果目标的存储系统忽然变得很慢)。
    注意这个值也意味着并发 checkpoint 的数目是一。

  • 并发 checkpoint 的数目: 默认情况下,在上一个 checkpoint 未完成(失败或者成功)的情况下,系统不会触发另一个checkpoint。这确保了拓扑不会在 checkpoint 上花费太多时间,从而影响正常的处理流程。 不过允许多个checkpoint 并行进行是可行的,对于有确定的处理延迟(例如某方法所调用比较耗时的外部服务),但是仍然想进行频繁的checkpoint 去最小化故障后重跑的 pipelines 来说,是有意义的。
    该选项不能和 “checkpoints 间的最小时间"同时使用。

  • externalized checkpoints: 你可以配置周期存储 checkpoint 到外部系统中。Externalized checkpoints 将他们的元数据写到持久化存储上并且在 job 失败的时候不会被自动删除。 这种方式下,如果你的 job失败,你将会有一个现有的 checkpoint 去恢复。

  • 在 checkpoint 出错时使 task 失败或者继续进行 task:他决定了在 task checkpoint 的过程中发生错误时,是否使 task 也失败,使失败是默认的行为。 或者禁用它时,这个任务将会简单的把 checkpoint错误信息报告给 checkpoint coordinator 并继续运行。

  • 优先从 checkpoint 恢复(prefer checkpoint for recovery):该属性确定 job 是否在最新的checkpoint 回退,即使有更近的 savepoint 可用,这可以潜在地减少恢复时间(checkpoint 恢复比savepoint恢复更快)。


StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

// 每 1000ms 开始一次 checkpoint
env.enableCheckpointing(1000);

// 高级选项:

// 设置模式为精确一次 (这是默认值)
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);

// 确认 checkpoints 之间的时间会进行 500 ms
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(500);

// Checkpoint 必须在一分钟内完成,否则就会被抛弃
env.getCheckpointConfig().setCheckpointTimeout(60000);

// 同一时间只允许一个 checkpoint 进行
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);

// 开启在 job 中止后仍然保留的 externalized checkpoints
env.getCheckpointConfig().enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);

// 开启实验性的 unaligned checkpoints
env.getCheckpointConfig().enableUnalignedCheckpoints();

相关的配置选项

更多的属性与默认值能在 conf/flink-conf.yaml 中设置

KeyDefaultType
state.backend.incrementalfalseBoolean
state.backend.local-recoveryfalseBoolean
state.checkpoint-storage(none)String
state.checkpoints.dir(none)String
state.checkpoints.num-retained1Integer
state.savepoints.dir(none)String
state.storage.fs.memory-threshold20 kbMemorySize
state.storage.fs.write-buffer-size4096Integer
taskmanager.state.local.root-dirs(none)String

更多描述请看官网配置


选择一个 State Backend

Flink 的 checkpointing 机制 会将 timer 以及 stateful 的 operator 进行快照,然后存储下来, 包括连接器(connectors),窗口(windows)以及任何用户自定义的状态。 Checkpoint 存储在哪里取决于所配置的 State Backend(比如 JobManager memory、 file system、 database)。

默认情况下,状态是保持在 TaskManagers 的内存中,checkpoint 保存在 JobManager 的内存中。为了合适地持久化大体量状态, Flink 支持各种各样的途径去存储 checkpoint 状态到其他的 state backends 上。通过 StreamExecutionEnvironment.setStateBackend(…) 来配置所选的 state backends。

阅读 state backends 来查看在 job 范围和集群范围上可用的 state backends 与选项的更多细节。

迭代作业中的状态和 checkpoint

Flink 现在为没有迭代(iterations)的作业提供一致性的处理保证。在迭代作业上开启 checkpoint 会导致异常。为了在迭代程序中强制进行 checkpoint,用户需要在开启 checkpoint 时设置一个特殊的标志: env.enableCheckpointing(interval, CheckpointingMode.EXACTLY_ONCE, force = true)。

请注意在环形边上游走的记录(以及与之相关的状态变化)在故障时会丢失。

### 回答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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值