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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值