这是我参与「第四届青训营 」笔记创作活动的第5天今天学习了流式计算中的Window机制。
流式计算中的Window机制
前置知识
- 流式计算的动态表
- Flink中的State和Checkpoint的基本原理
- Flink中的Retract机制,算子如何产生和处理Retract数据
- 在Flink中如何实现Exactly-Once的语义
概述
数据价值:实时性越高,数据价值越高
批计算特征:
- T+1架构
- 计算引擎为Hive或者Spark
- 小时级的批计算
- 处理时间的窗口(实时计算)
小结
- 批式计算T+1数仓架构
- 数据实时性越高,价值越高
- 实时计算有处理时间和事件时间
- 事件时间需要Watermark配合处理乱序
Watermark
Watermark: 表示系统认为的当前真实的事件时间
注意:上面的触发公式进行如下变形:
1、Watermaker >= 窗口的结束时间
2、Watermaker = 当前窗口的最大的事件时间 - 最大允许的延迟时间或乱序时间
3、当前窗口的最大的事件时间 - 最大允许的延迟时间或乱序时间 >= 窗口的结束时间
4、当前窗口的最大的事件时间 >= 窗口的结束时间 + 最大允许的延迟时间或乱序时间
小结
- 含义:标识系统认为的当时的真实事件
- 生成:可以通过Watermark Generator 来生成
- 传递:去上游所有subtask的最小值
- 部分数据断流 Idle SOurce
- 迟到的数据处理 Window算子是丢弃,Join算子认为跟之前的数据无法join
Window
- 滚动窗口
- 滑动窗口
- 会话窗口
Window使用
滚动窗口
窗口划分:
- 按key单独划分
- 每条数据只会属于一个窗口
窗口触发: Window结束时间到达的时候会一次性触发
滑动窗口
窗口划分:
- 按key单独划分
- 每条数据只会属于多个窗口
窗口触发: Window结束时间到达的时候会一次性触发
会话窗口
窗口划分:
- 按key单独划分
- 每条数据单独划分一个窗口,如果window之间有交集,则对窗口进行merge
窗口触发: Window结束时间到达的时候会一次性触发
迟到数据处理
只有事件时间下才有吃到数据 而吃到数据默认丢弃
小结
- 三种窗口定义
- 迟到数据的处理
- 增量计算和全量计算
- Emit触发提前输出窗口结果