这是我参与「第四届青训营 」笔记创作活动的的第13天。本篇笔记对于7.26日李本超老师讲授的《流计算中的 Window 计算》的内容做一个复习总结。
概述
- 流式和批式计算的区别概述
-
T + 1
-> 小时级别(模型复杂,很多场景做不到)
-> 实时计算:处理计算窗口,数据实时流动,实时计算,窗口结束直接发送结果,不需要周期调度任务 -
事件时间 & 处理时间:理想状态应该 y = x,但是处理比事件会多一些延迟
- 事件时间:数据产生的时间,比如客户端、传感器、后端上报数据时的时间
- 处理时间:数据在流式计算系统中真正处理时所在机器的时间。
-
事件时间窗口:数据实时进入到真实事件发生的窗口中进行计算,可以有效处理数据延迟和乱序(引入 watermark 机制)
-
watermark:数据中插入一些 watermark,表示真实时间,下图为乱序数据的 watermark,表示真实时间之前的数据已经计算完成,后面如果还有更小的为迟到数据特殊处理
Watermark
- watermark 的产生
-
watermark 的传递:下游取多个上游的最小 watermark
-
per - partition VS per - subtask watermark 生成:
- per - subtask:当一个 source subtask 消费多个 partition,那多个 partition 间的数据读取乱序程度可能高
- per - partition:新机制进入了单个 partition 对应单独 watermark,避免了上述问题
-
部分 partition / subtask 断流(有一个上游不更新,下游也不更新):设置了 Idle source,某个 subtask 超过配置的 idle 时间,设置为 idle 状态并下发,下游忽略掉 idle 态的 subtask
-
迟到数据处理:算子自身决定
- Window 聚合:默认丢弃
- 双流 join :outer join 认为 join不到
- CEP:丢弃
Window
待补充