略
---01---
flink的检查点不是数据是状态。
上图是基数求和,偶数求和。5 6 9是当前的一个checkpoint,是按照keyBy之后分区的,注意keyBy之后叫做分区。
可以自定义分区器,对某一个字段分区:
如何从检查点恢复状态:
---02---
笔记:
1. flink中的checkpoint,保存的是所有任务 状态 的快照
这个状态要求是所有任务都处理完同一个数据之后的状态
2. flink checkpoint算法
基于 Chandy-Lamport 算法的分布式快照
3. flink checkpoint中重要的概念
barrier用于分隔不同的checkpoint,对于每个任务而言,收到barrier就意味着要开始做state的保存
算法中需要对不同上游分区发来的barrier,进行对齐
4. checkpoint存储位置,由state backend决定
一般是放在远程持久化存储空间(fs或者rocksdb)
jobmanager触发一个checkpoint操作,会把checkpoint中所有任务状态的拓扑结构保存下来
5. barrier和watermark类似,都可以看作一个插入数据流中的特殊数据结构
barrier在数据处理上跟watermark是两套机制,完全没有关系
6. 将checkpoint和事务sink结合起来,再加上可重置偏移量的source,就可以实现端到端的Exactly-once状态一致性
Flink-Kafka连接,实现精确一次状态一致性语义,
核心就是source可重置偏移量,sink实现TwoPhaseCommitSinkFunction(底层就是将事务提交绑定在checkpoint)
下游不只一个 上游也不只一个的。
---03---
解析这个图。
---04---
保存点:
---05---
复习:略
---06---
checkpoint在代码里面默认是并开启的。
启用checkPoint:
第一步是启用checkpoint检查点,指定检查点的间隔时间。
第二个是状态一致性的语意。
第三个是做一次checkpoint的超时时间。
第四个是设置一个和下一个重叠,允许重复的,同时处理两个的。
第五个是两次之间留下多长时间去处理数据。
第六个是要不要用最近的恢复,还是savepooint。
第七个是允许checkpoint失败几次。
重启策略:
1.尝试重启次数,间隔多长时间去重启。
2.5分钟重启5次,间隔10s。
---07---
状态一致性:
幂等:
预写日志:
---08---
代码:
---09---
复习
---10---