「Exactly Once 语义在 Flink 中的实现」笔记|青训营笔记

90 阅读2分钟

「Exactly Once 语义在 Flink 中的实现」笔记|青训营笔记

1.流式数据---比如银行存钱取钱服务/GPS/物流网

image.png 2.在上图中,流数据--转换为Dynamic Table---连续查询--产生Dynamic Table---转换为另一种数据流---写出。流-表可动态转换。

3.动态表可在任意时刻视为静态表

4.流数据处理中,查询运行中出现故障---对应不同的数据处理有不同的语义(1)At-most-once:无额外操作,出现数据丢失,能保证所有时间处理时间流,对数据处理最高效,对数据要求不高的场景、数据量大,可适用。结果能得到比较好的近似。 (2)At-least-once:保证数据不丢失,每条数据都进行正常的消费,但是某些数据可能出现重复消费,语义增强。 (3)Exactly-once:最严格的语义,每条数据都会消费,且一次,且不会丢失,像是故障没有发生一样。

image.png 5.上图中,Source算子读取数据流,sum_even偶数累加器,sum_odd奇数累加器,进行备份---三个计算的算子---保存--对数据做到不丢不重。状态保存的计算点。

6.保证故障产生和恢复对整体没影响,特殊的机制引入---Checkpoint---在出现故障时,可以很好的应对,保留自身状态,减少整条状态的恢复。

7.两阶段提交协议---有多个端点的分布式协议,事务性(全部执行or全部不执行)需要保存原则性。预提交阶段--并不真的提交,成功或者失败都会发一条信息,协作者收到所有反馈,到提交阶段,所有参与节点都执行,释放保护资源,发生ack的信息。如果超时故障,直接认为工作成功,回滚操作。保证所有节点都能执行操作或者都不能执行操作。

8.Kafka--无限消息队列--二维数组(有序)

image.png