动态表与状态快照|青训营笔记
这是我参与「第四届青训营 -大数据场」笔记创作活动的的第2篇笔记
一、动态表
1.1 DataStream 上的关系查询
因为高级关系数据库物化视图的特性,可以使用关系查询和SQL处理流
1.2 动态表与连续查询
动态表随时间变化的。可以像查询静态批处理表一样查询它们。查询动态表将生成一个 连续查询 。一个连续查询永远不会终止,结果会生成一个动态表。
它们间的关系
流 -> 动态表 -> 连续查询 -> 新的动态表 -> 流
- 先将流转换为动态表
- 在动态表上进行连续查询,生成新的动态表
- 将生成的动态表转换为流
1.3 3种数据语义
- at most once : 至多一次,表示一条消息不管后续处理成功与否只会被消费处理一次,存在数据丢失可能
- at least once : 至少一次,表示一条数据最少被处理一次,可能会存在重复消费
- exactly once : 精确一次,表示一条消息从其消费到后续的处理成功,只会发生一次
二、状态快照
状态快照指数据存储的某一时刻的状态记录
2.1 状态快照的制作
状态恢复的时间点:需要等待所有处理逻辑消费完成 source 保留状态及之前的数据。
Chandy-Lamport算法制作全局快照
启动快照
假设进程发起快照
- 记录自己的状态
- 通过出边向其他进程发送market消息
- 通过入边监听所有流向自己的信息
传播快照
- 如果还没有记录自己的状态——
- 记录自己的状态,并将标记为空;
- 通过所有出边向其他进程发送marker消息;
- 通过所有入边开始监听所有流向自己的消息。
- 如果已经记录过自己的状态——
记下入边上监听到的消息,直到收到marker消息为止。
终止快照
若所有进程都成功地:
- 收到了marker消息;
- 记录下了自己的状态;
- 记录下了入边的状态(就是链上的消息)