Flink Checkpoint和Savepoints

本文深入解析Flink中Checkpoint的概念,阐述其如何通过定期生成数据快照实现故障恢复,并介绍了Savepoints的作用。了解Checkpoint的工作流程,以及如何在实际流处理中利用这些机制确保数据一致性。
摘要由CSDN通过智能技术生成

Checkpoint的概念和作用

概念:
Checkpoint是Flink实现容错机制最核心的功能,它能够根据配置周期性地基于Stream中各个Operator的状态来生成Snapshot(数据快照),从而将这些状态数据定期持久化存储下来,

作用:
当Flink程序一旦意外崩溃时,重新运行程序时可以有选择地从这些Snapshot进行恢复,从而修正因为故障带来的程序数据状态中断。

总的来说,就是在流数据处理的过程中,定期的去保存某个阶段的数据(称为数据快照),当后续阶段的程序意外崩溃时,可以从之前保存的数据快照中进行恢复,再执行后续程序。

Checkpoint过程

在这里插入图片描述

1)Checkpoint指定触发生成时间间隔后,每当需要触发Checkpoint时,会向Flink程序运行时的多个分布式的Stream Source中插入一个Barrier标记,这些Barrier会根据Stream中的数据记录一起流向下游的各个Operator。

如上图的第一个过程,可以看到两个数据输入流都加上了两个 barrier标记

2)当一个Operator接收到一个Barrier时,它会暂停处理Steam中新接收到的数据记录。因为一个Operator可能存在多个输入的Stream,而每个Stream中都会存在对应的Barrier,该Operator要等到所有的输入Stream中的Barrier都到达。当所有Stream中的Barrier都已经到达该Operator,这时所有的Barrier在时间上看来是同一个时刻点(表示已经对齐)。

如上图第二个过程所示,第一个输入流已经到达了barrier,但是此时第二个输入流还没有到达barrier。在等待第二个输入流barrier到达的过程中,Operator会暂停处理第一个输入流到达的数据,但是并不会暂停接收数据,会将这时间到达的数据存储在input buffer中暂时存储。

3)在所有的barrier到底之后,这时该Operator会将数据记录(Outgoing Records)发射(Emit)出去,作为下游Operator的输入。

4)最后将Barrier对应Snapshot发射(Emit)出去作为此次Checkpoint的结果数据。

Savepoints

在这里插入图片描述

Flink中配置Checkpoint可以通过以下方式进行设置: ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 每间隔2000ms进行CheckPoint env.enableCheckpointing(2000); // 设置CheckPoint模式为EXACTLY_ONCE env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE); // 设置CheckPoint超时时间为50000ms env.getCheckpointConfig().setCheckpointTimeout(50000); // 设置最大并发的CheckPoint数量为1 env.getCheckpointConfig().setMaxConcurrentCheckpoints(1); // 开启非对齐的CheckPoint env.getCheckpointConfig().enableUnalignedCheckpoints(); ``` 其中,`enableCheckpointing(n)`方法用于开启Checkpoint,参数`n`表示以毫秒为单位的checkpoint间隔。`setCheckpointingMode()`方法用于设置Checkpoint模式,`setCheckpointTimeout()`方法用于设置Checkpoint超时时间,`setMaxConcurrentCheckpoints()`方法用于设置最大并发的Checkpoint数量,`enableUnalignedCheckpoints()`方法用于开启非对齐的Checkpoint。\[1\] 此外,在`flink-conf.yaml`配置文件中也可以进行Checkpoint的相关配置,主要包括state backend的配置,例如`state.backend.async`、`state.backend.incremental`、`state.checkpoints.dir`、`state.savepoints.dir`等。\[3\] #### 引用[.reference_title] - *1* *2* [flinkcheckpoint配置](https://blog.csdn.net/weixin_43857576/article/details/122110132)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Flinkcheckpoint配置详解](https://blog.csdn.net/worldchinalee/article/details/107716744)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值