Flink在代码中配置checkpoint

def main(args: Array[String]): Unit = {
        val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
        // 设置statebackend,默认保存在内存中;可以设置保存到本地或者HDFS
        env.setStateBackend(new FsStateBackend("localPath | hdfsPATH"))
        // 开启checkpoint, 并设置其周期间隔为10秒; 默认不开启checkpoint
        env.enableCheckpointing(10000L)
}

设置ck的执行语义; 可供选择的语义有:最多一次,至少一次,精确一次

env.getCheckpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE)

设置checkpoint的超时时间为60s,是指做一次checkpoint的时间;如果超时则认为本次checkpoint失败,这个checkpoint就丢了,继续一下一次checkpoint即可

env.getCheckpointConfig.setCheckpointTimeout(60000)

设置程序中同时允许几个checkpoint任务同时进行

env.getCheckpointConfig.setMaxConcurrentCheckpoints(1)

设置两次checkpoint的间隔,确保检查点之间有1s的时间间隔

env.getCheckpointConfig.setMinPauseBetweenCheckpoints(1000)

设置允许当前的checkpoint最多失败几次

env.getCheckpointConfig.setTolerableCheckpointFailureNumber(3)

设置任务取消时是否保留检查点

  • retain:则保存检查点数据
  • delete:删除checkpoint作业数据
env.getCheckpointConfig.enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION)

设置checkpoint出现问题,是否让程序报错还是继续任务进行下一次checkpoint

  • true:让程序报错
  • false:不报错进行下次checkpoint

如果是false,checkpoint出现问题我们允许程序继续执行,如果下次checkpoint成功则没有问题;如果程序下次checkpoint也没有成功,此时程序挂掉需要从checkpoint中恢复数据时,可能导致程序计算错误,或者是重复计算数据。

env.getCheckpointConfig.setFailOnCheckpointingErrors(false)

重启策略的配置

  • flink挂掉之后,需要重启,通过checkpoint恢复,如果重启时又挂了呢?
  • 需要设置一些重启策略

按照固定的延迟去重启,第一个参数是尝试重启的次数,第二次是两次重启的时间间隔

env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3, 10000L)) 

失败率重启,在某个时间间隔内,失败的次数最大为多少次。

  • 第一个参数表示失败五次
  • 第二个参数是指在多少时间内失败五次,第二个参数设置的是5分钟
  • 最后一个配置的是每次重启的间隔时间,最后一个配置的是10秒钟
env.setRestartStrategy(RestartStrategies.failureRateRestart(5, Time.of(5, TimeUnit.MINUTES), Time.of(10, TimeUnit.SECONDS))) 
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值