这是我参与「第四届青训营 」笔记创作活动的的第2天。
一、课程内容
1. 概述
流式计算与批计算相比的区别
2. Watermark
含义、生成方法和传递机制
3. Window的高级性能
Window的基本性能和优化
4. 案例分析
抖音DAU曲线以及大数据资源使用统计分析
二、概述
- 数据实时性越高,数据价值越高
- 批处理
- 架构为T+1,只能处理前一天的数据,使用Hive或者Spark时,数据基本是准备好的。
- 处理时间窗口
- 处理时间窗口
- 处理时间与事件时间
- 处理时间:数据在流式系统计算时所处机器的时间
- 事件时间:数据产生的时间,如传感器、客户端或者后端代码上传的时间
- 事件时间窗口
- 如果一个事件发生了,但是还没有处理到数据怎么办,什么时候时间窗口结束?
- 利用watermark在乱序容忍和实时性之间平衡
二、Watermark
1. 含义
系统认为的当前真实的事件时间
2. 如何产生watermark
简单应用:从原始字段中减去固定的时长作为watermark的数值
3. 如何传递watermark
每个算子根据上游输入的subtask的最小值(watermark)决定当前的数值,并传递到下一个算子
4. 如何用Flink UI观察watermark
可以查看并行度,或者展开算子看。
三、Window
1. 基本功能
- 窗口类别
- 滚动窗口
- 滑动窗口
- 会话窗口
- 迟到数据处理
- 定义:window end 比当前watermark还小
- Allow lateness: DataStream, SQL
- Side Output(侧输出流):DataStream
- 增量 VS 全量计算
- 增量计算
- window只存储计算结果,如reduce,aggregate,SQL的聚合只有增量计算
- 全量计算
- 每条数据到来,都会存储到window的state中,等到window触发计算,所有数据一起计算
- process函数全量计算
- 增量计算
- EMIT触发
- EMIT输出:在window没有结束的时候,提前把window计算的部分结果输出出来。
- Trigger自定义实现:continue,fire,purge,fire_and_purge
2. 高级优化
- Mini-batch
- 倾斜优化 local global
- distinct计算状态复用
- Pane优化