1.什么是Checkpoint
Checkpoint:一种由 Flink 自动执行的快照,其目的是能够从故障中恢复。Checkpoint 使 Flink 的状态具有良好的容错性,通过 checkpoint 机制,Flink 可以对作业的状态和计算位置进行恢复。
Checkpoint 对于用户层面,是透明的,用户会感觉程序一直在运行。 用户无法对其进行交互,用户可以在程序启动之前,设置好实时程序 Checkpoint 相关参数,当程序启动之后,剩下的就全交给 Flink 自行管理。
(1)checkpoint的目录结构: 由元数据文件、数据文件(与 state backend 相关)组成。可通过配置文件中 “state.checkpoints.dir” 配置项来指定元数据文件和数据文件的存储路径,实际系统中一般存储在hdfs上。
(2)checkpoint的两种mode:Exactly Once 和 At least Once。默认的 Checkpoint 模式是 Exactly Once. Exactly Once 和 At least Once 具体是针对 Flink 状态 而言。
- Exactly Once 含义是:保证每条数据对于 Flink 的状态结果只影响一次。打个比方,比如:在统计"flink"这个单词数时,目前实时统计的 个数为2,同时这个结果在这次 Checkpoint 成功后保存在相应的存储路径下。在下次 Checkpoint 之前, 又来1个"flink"单词,突然程序遇到外部异常容错自动回复,从最近的Checkpoint 点开始恢复,那么会从单词书为2这个状态开始恢复,所以即使程序遇到外部异常自我恢复