20-06-flink

---01---

flink的检查点不是数据是状态。

20-06-flink_第1张图片  

20-06-flink_第2张图片

上图是基数求和,偶数求和。5 6 9是当前的一个checkpoint,是按照keyBy之后分区的,注意keyBy之后叫做分区。

可以自定义分区器,对某一个字段分区:

如何从检查点恢复状态:

20-06-flink_第3张图片

20-06-flink_第4张图片

20-06-flink_第5张图片

20-06-flink_第6张图片

20-06-flink_第7张图片

---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)

20-06-flink_第8张图片

下游不只一个 上游也不只一个的。

20-06-flink_第9张图片

20-06-flink_第10张图片

---03---

20-06-flink_第11张图片

解析这个图。

20-06-flink_第12张图片

---04---

保存点:

20-06-flink_第13张图片

---05---

复习:略

---06---

checkpoint在代码里面默认是并开启的。

启用checkPoint:

20-06-flink_第14张图片

20-06-flink_第15张图片

第一步是启用checkpoint检查点,指定检查点的间隔时间。

第二个是状态一致性的语意。

第三个是做一次checkpoint的超时时间。

第四个是设置一个和下一个重叠,允许重复的,同时处理两个的。

第五个是两次之间留下多长时间去处理数据。

第六个是要不要用最近的恢复,还是savepooint。

第七个是允许checkpoint失败几次。

20-06-flink_第16张图片

重启策略:

1.尝试重启次数,间隔多长时间去重启。

2.5分钟重启5次,间隔10s。

---07---

状态一致性:

20-06-flink_第17张图片

20-06-flink_第18张图片

幂等:

20-06-flink_第19张图片

20-06-flink_第20张图片

20-06-flink_第21张图片

预写日志:

20-06-flink_第22张图片

20-06-flink_第23张图片

20-06-flink_第24张图片

---08---

20-06-flink_第25张图片

20-06-flink_第26张图片

代码:

20-06-flink_第27张图片

---09---

复习

---10---

你可能感兴趣的:(尚硅谷大数据)