flink之checkpoint

为什么需要checkpoint

有状态算子一些状态的保存是在内存中,当job出现异常或者某些算子有问题的时候,内存中就没有历史数据.要保证可以恢复之前的状态的话,就需要有checkpoint的存在.

checkpoint也依赖于可重新发送数据的数据源的配合,例如kafka.

checkpoint的执行过程

1 checkpoint coordinator向所有source节点发送trigger checkpoint,并注入checkpoint barrier

2 当task收到所有的checkpoint barrier之后(对齐),会执行snapshot,并向自己的下游发送checkpoint barrier,并将自己的状态异步的写入到持久化存储中.

3 当sink 的task完成备份,会把备份的地址 (state handle) 通知给checkpoint coordinator ,checkpoint coordinator会把自己的checkpoint meta数据发送到外围的持久化系统中,完成一次完成的checkpoint

checkpoint的基本配置

这里的配置是指checkpoint coordinator多久向source节点发送trigger checkpoint 以及注入checkpoint barrier事件

//默认是500ms
StreamExecutionEnvironment enableCheckpoint()
//自定义触发周期
StreamExecutionEnvironment enableCheckpoint(long interval)
//指定checkpoint的模式 EXACTLY_ONCE,AT_LEAST_ONCE
StreamExecutionEnvironment enableCheckpoint(long interval ,CheckpointMode mode)

checkpoint的高级配置

//默认是EXACTLY_ONCE
env.getCheckpointConfig().setCheckpointMode(CheckpointingMode.AT_LEAST_ONCE)
//修改checkpoint间隔
env.getCheckpointConfig().setCheckpointInterval(60000)
//设置checkpoint的timeout,默认10分钟,如果超时,本次checkpoint终止
env.getCheckpointConfig().setCheckpointTimeout(60000)
//设置checkpoint的并行度
//如果设置为n,则n个线程同时进行checkpoint,其中只要有一个线程写入成功,才会进行下一个checkpoint
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
//如果设置的并发度为1的时候,使用此设置可提高效率
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(60000);
//ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION
//当cancel时,会保留checkpoint数据以便回复
//ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION
//当cancel时,会删除checkpoint数据,只有当job执行失败时才会保存checkpoint数据
env.getCheckpointConfig().enableExternalizedCheckpoints(Externalized-CheckpointCleanup.RETAIN_ON_CANCELLATION);

checkpoint的有些配置是设置在fink-conf.yaml中配置

其中的state.checkpoint.num-retained是设置checkpoint的保存个数.默认是只保留最近一个的checkpoint

state.checkpoints.num-retained:20
state.backend: filesystem
state.checkpoints.dir: hdfs://master:9000/flink/checkpoint

当从某个checkpoint开始恢复程序的话,就要指定

bin/flink run -s hdfs://master:9000/flink/checkpoint/3231asjda23/chk-56/_metadata flink-job.jar

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`flink.checkpoint.timeout` 和 `flink.checkpoint.interval` 是 Flink 中与检查点相关的两个参数,它们之间存在一定的关系。 - `flink.checkpoint.timeout` 参数定义了执行检查点的超时时间,即当执行检查点操作时,如果超过了指定的超时时间仍未完成,则会被视为失败。 - `flink.checkpoint.interval` 参数定义了两次检查点之间的时间间隔,即多久执行一次检查点。 这两个参数的关系可以通过以下几点来说明: 1. `flink.checkpoint.timeout` 应该大于等于 `flink.checkpoint.interval`。确保超时时间足够长以容纳一个完整的检查点操作,否则可能会导致检查点失败。 2. 如果 `flink.checkpoint.timeout` 被设置得过小,可能会导致检查点操作在超时之前无法完成。在这种情况下,可以适当增加 `flink.checkpoint.timeout` 的值,以便给检查点操作足够的时间来完成。 3. 如果 `flink.checkpoint.interval` 被设置得过小,系统将更频繁地进行检查点操作,从而导致更高的系统开销和资源消耗。因此,在设置 `flink.checkpoint.interval` 时需要综合考虑系统的性能要求和资源限制。 需要根据应用程序的实际情况和需求来评估和调整 `flink.checkpoint.timeout` 和 `flink.checkpoint.interval` 的值。同时,还应该考虑 Flink 集群的配置和硬件资源是否能够支持所选的超时时间和间隔。在设置之后,建议进行性能测试和实际生产环境的实验来验证和优化这两个参数的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值