这是我参与「第四届青训营 」笔记创作活动的的第2天。
一、课程回顾
课前,老师先带领我们对上节课流式计算和批式计算进行了回顾
批式计算:
- 离线计算,非实时
- 静态数据集
- 小时/天等周期性计算
流式计算
- 实时计算,快速,低延迟
- 无限流、动态,无边界
- 7*24h持续运行
- 流批一体
历史发展:史前~2006 ==> Hadoop ==> Spark ==> Flink
二、数据流和动态表
1. 传统的SQL和流处理
SQL:
- 处理的表示有界的
- 执行查询可以访问完整的数据
- 批处理查询产生固定大小结果后终止
流处理:
- 流是一个无限元组序列
- 执行查询无法访问所有的数据
- 查询不断更新结果,永远不终止
2. 在流上定义表
动态表:与表示批处理数据的静态表不同,动态表是随时间变化的。可以像查询静态批处理表一样查询它们。
3. 连续查询
连续查询:
- 查询从不终止
- 查询结果会不断更新,产生一个新的动态表
4. 查询产生仅追加数据的动态表
5. 两者之间进行对比
虽然这两个示例查询看起来非常相似(都计算分组计数聚合),但他们在一个重要方面不同:
- 第一个查询更新先前输出的结果,即定义结果标的changelog流包含INSERT和UPDATE操作
- 第二个查询只附加到结果表,即结果表的changelog流只包含INSERT操作。
6.Retract消息的产生
7. 不同数据处理保证的语义
- At-most-once:出现故障的时候,啥也不做。数据的处理不保证任何语义,处理时延低;
- At-least-once:保证每条数据均至少被处理一次,一条数据可能存在重复消费。
- Exactly-once:最严格的处理语义,从输出结果来看,每条数据均被消费且消费一次,仿佛故障从未发生。
总结
今天的课程第一部分复习回顾了流批计算,引出了Exactly-Once语义,确保了数据处理的消费确定性。