Flink的checkpoint配置详解

实例:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// start a checkpoint every 1000 ms
env.enableCheckpointing(1000);
// advanced options:
// set mode to exactly-once (this is the default)
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
// checkpoints have to complete within one minute, or are discarded
env.getCheckpointConfig().setCheckpointTimeout(60000);
// make sure 500 ms of progress happen between checkpoints
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(500);
// allow only one checkpoint to be in progress at the same time
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
// enable externalized checkpoints which are retained after job cancellation
env.getCheckpointConfig().enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
// This determines if a task will be failed if an error occurs in the execution of the task’s checkpoint procedure.
env.getCheckpointConfig().setFailOnCheckpointingErrors(true);
  • 使用StreamExecutionEnvironment.enableCheckpointing方法来设置开启checkpoint;具体可以使用enableCheckpointing(long interval),或者enableCheckpointing(long interval, CheckpointingMode mode);interval用于指定checkpoint的触发间隔(单位milliseconds),而CheckpointingMode默认是CheckpointingMode.EXACTLY_ONCE,也可以指定为CheckpointingMode.AT_LEAST_ONCE
  • 也可以通过StreamExecutionEnvironment.getCheckpointConfig().setCheckpointingMode来设置CheckpointingMode,一般对于超低延迟的应用(大概几毫秒)可以使用CheckpointingMode.AT_LEAST_ONCE,其他大部分应用使用CheckpointingMode.EXACTLY_ONCE就可以
    checkpointTimeout用于指定checkpoint执行的超时时间(单位milliseconds),超时没完成就会被abort掉
  • minPauseBetweenCheckpoints用于指定checkpoint coordinator上一个checkpoint完成之后最小等多久可以出发另一个checkpoint,当指定这个参数时,maxConcurrentCheckpoints的值为1
  • maxConcurrentCheckpoints用于指定运行中的checkpoint最多可以有多少个,用于包装topology不会花太多的时间在checkpoints上面;如果有设置了minPauseBetweenCheckpoints,则maxConcurrentCheckpoints这个参数就不起作用了(大于1的值不起作用)
  • enableExternalizedCheckpoints用于开启checkpoints的外部持久化,但是在job失败的时候不会自动清理,需要自己手工清理state;ExternalizedCheckpointCleanup用于指定当job canceled的时候externalized checkpoint该如何清理,DELETE_ON_CANCELLATION的话,在job canceled的时候会自动删除externalized state,但是如果是FAILED的状态则会保留;RETAIN_ON_CANCELLATION则在job canceled的时候会保留externalized checkpoint state
  • failOnCheckpointingErrors用于指定在checkpoint发生异常的时候,是否应该fail该task,默认为true,如果设置为false,则task会拒绝checkpoint然后继续运行

flink-conf.yaml相关配置

#==============================================================================
# Fault tolerance and checkpointing
#==============================================================================

# The backend that will be used to store operator state checkpoints if
# checkpointing is enabled.
#
# Supported backends are 'jobmanager', 'filesystem', 'rocksdb', or the
# <class-name-of-factory>.
#
# state.backend: filesystem

# Directory for checkpoints filesystem, when using any of the default bundled
# state backends.
#
# state.checkpoints.dir: hdfs://namenode-host:port/flink-checkpoints

# Default target directory for savepoints, optional.
#
# state.savepoints.dir: hdfs://namenode-host:port/flink-checkpoints

# Flag to enable/disable incremental checkpoints for backends that
# support incremental checkpoints (like the RocksDB state backend). 
#
# state.backend.incremental: false
  • state.backend用于指定checkpoint state存储的backend,默认为none
  • state.backend.async用于指定backend是否使用异步snapshot(默认为true),有些不支持async或者只支持async的state backend可能会忽略这个参数
  • state.backend.fs.memory-threshold,默认为1024,用于指定存储于files的state大小阈值,如果小于该值则会存储在root checkpoint metadata file
  • state.backend.incremental,默认为false,用于指定是否采用增量checkpoint,有些不支持增量checkpoint的backend会忽略该配置
  • state.backend.local-recovery,默认为false
  • state.checkpoints.dir,默认为none,用于指定checkpoint的data files和meta data存储的目录,该目录必须对所有参与的TaskManagers及JobManagers可见
  • state.checkpoints.num-retained,默认为1,用于指定保留的已完成的checkpoints个数
  • state.savepoints.dir,默认为none,用于指定savepoints的默认目录
  • taskmanager.state.local.root-dirs,默认为none

小结

  • 可以通过使用StreamExecutionEnvironment.enableCheckpointing方法来设置开启checkpoint;具体可以使用enableCheckpointing(long interval),或者enableCheckpointing(long interval, CheckpointingMode mode)
  • checkpoint的高级配置可以配置checkpointTimeout(用于指定checkpoint执行的超时时间,单位milliseconds)minPauseBetweenCheckpoints(用于指定checkpoint coordinator上一个checkpoint完成之后最小等多久可以出发另一个checkpoint)maxConcurrentCheckpoints(用于指定运行中的checkpoint最多可以有多少个,如果有设置了minPauseBetweenCheckpoints,则maxConcurrentCheckpoints这个参数大于1的值不起作用),enableExternalizedCheckpoints(用于开启checkpoints的外部持久化,在job failed的时候externalized checkpoint state无法自动清理,但是在job canceled的时候可以配置是删除还是保留state)
  • 在flink-conf.yaml里头也有checkpoint的相关配置,主要是state backend的配置,比如state.backend.async、state.backend.incremental、state.checkpoints.dir、state.savepoints.dir等



作者:香山上的麻雀
链接:https://www.jianshu.com/p/e950cfbcd782
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答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配置过程需要结合实际的作业特点进行配置,准确合理的配置可以帮助程序达到更好的性能和健壮性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值