Flink之容错机制


一、检查点(Checkpoint)

1.1、定义

有状态流应用中的检查点(checkpoint),其实就是所有任务的状态在某个时间点的一个快照(一份拷贝)。简单来讲,就是一次“存盘”,让我们之前处理数据的进度不要丢掉。在一个流应用程序运行时,Flink 会定期保存检查点,在检查点中会记录每个算子的 id 和状态;如果发生故障,Flink 就会用最近一次成功保存的检查点来恢复应用的状态,重新启动处理流程,就如同“读档”一样。

1.2、启用及配置检查点

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// Flink默认禁用检查点,.enableCheckpointing()方法就可以开启检查点,参数是检查点的间隔时间,单位为毫秒	
env.enableCheckpointing(1000L); 
// 配置检查点到文件系统,比如HDFS
env.getCheckpointConfig().setCheckpointStorage(new FileSystemCheckpointStorage(""));
// 配置检查点到JobManager堆内存
env.getCheckpointConfig().setCheckpointStorage(new JobManagerCheckpointStorage());
// 检查点配置超时时间
env.getCheckpointConfig().setAlignmentTimeout(Duration.ofMillis(1000L));
// 配置检查点模式:EXACTLY_ONCE:精确一次,AT_LEAST_ONCE:至少一次
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
// 前后2个检查点之间的最小间隔
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(1000L);
// 最大并发的检查点数量
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
// 开启不对齐分界线检查点保存,要求EXACTLY_ONCE精确一次,且检查点最大并发数量为1
env.getCheckpointConfig().enableUnalignedCheckpoints();
// RETAIN_ON_CANCELLATION:任务取消保存检查点存储,DELETE_ON_CANCELLATION:任务取消删除检查点存储
env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
// 是否运行检查点失败:0完全不允许失败
env.getCheckpointConfig().setTolerableCheckpointFailureNumber(0);	

二、保存点(savepoint)

2.1、保存点的用途

1、版本管理和归档存储
对重要的节点进行手动备份,设置为某一版本,归档(archive)存储应用程序的状态。
2、更新 Flink 版本
目前 Flink 的底层架构已经非常稳定,所以当 Flink 版本升级时,程序本身一般是兼容的。这时不需要重新执行所有的计算,只要创建一个保存点,停掉应用、升级 Flink 后,从保存点重启就可以继续处理了。
3、更新应用程序
我们不仅可以在应用程序不变的时候,更新 Flink 版本;还可以直接更新应用程序。前提是程序必须是兼容的,也就是说更改之后的程序,状态的拓扑结构和数据类型都是不变的,这样才能正常从之前的保存点去加载。这个功能非常有用。我们可以及时修复应用程序中的逻辑 bug,更新之后接着继续处理;也可以用于有不同业务逻辑的场景,比如 A/B 测试等等。
4、调整并行度
如果应用运行的过程中,发现需要的资源不足或已经有了大量剩余,也可以通过从保存点重启的方式,将应用程序的并行度增大或减小。
5、暂停应用程序
有时候我们不需要调整集群或者更新程序,只是单纯地希望把应用暂停、释放一些资源来处理更重要的应用程序。使用保存点就可以灵活实现应用的暂停和重启,可以对有限的集群资源做最好的优化配置。

2.2、使用保存点

2.2.1、创建保存点

1、创建保存点
bin/flink savepoint :jobId [:targetDirectory]
jobId 需要填充要做镜像保存的作业 ID,目标路径 targetDirectory 可选,表示保存点存储的路径。

2、保存点的默认路径,flink-conf.yaml 中的 state.savepoints.dir :
state.savepoints.dir: hdfs:///flink/savepoints

3、单独的作业,在程序代码中通过执行环境来设置
env.setDefaultSavepointDir("hdfs:///flink/savepoints");

4、在停掉一个作业时直接创建保存点
bin/flink stop --savepointPath [:targetDirectory] :jobId

2.2.2、从保存点重启应用

bin/flink run -s :savepointPath [:runArgs]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值