流计算中的window计算 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第6天
我们之前学习了Exactly Once在Flink中的实现,明白了Flink中的Exactly Once语义和Checkpoint机制,今天我们来学习流计算中的window计算
概述
我们先来看一下流式计算和批式计算的区别
而在一般情况下,数据的实时性越高,数据价值越高。
批处理
批处理模型典型的数仓架构为** T+1架构**,即数据计算时天级别的,当天只能看到前一天的计算结果。通常使用的引擎为Hive或者Spark等。计算的时候,数据是完全ready的,输入和输出都是确定性的
处理时间窗口
实时计算:处理时间窗口
数据实时流动,实时计算,窗口结束直接发送结果,不需要周期调度任务
处理时间和事件时间
处理时间:数据在流式计算系统中真正处理时所在机器的当前时间
事件时间:数据产生的时间,比如客户端、传感器、后端代码等上报数据时的时间
事件时间窗口
实时计算:事件时间窗口
数据实时进入到真实事件发生的窗口中进行计算,可以有效的处理数据延迟和乱序
小结
- 1.批式计算一般时T+1的数仓架构
- 2.数据实时性越高,数据的价值越高
- 3.实时计算分为处理时间和事件时间
- 4.事件时间需要Watermark配合来处理乱序
Watermark
watermark表示为系统认为的当前真实的事件时间
具体的实现如下
SQL语句:
DataStream
小结
- 1.含义:表示系统认为的当前真实事件
- 2.生成:可以通过Watermark Generator来生成
- 3.传递:取上游所有subtask的最小值
- 4.部分数据断流:Idle Source
- 5.迟到数据处理:Window 算子时丢弃;Join算子认为跟之前的数据无法join到
Window
滚动窗口
窗口划分: 1.每个key单独划分 2.每条数据只会属于一个窗口
窗口触发: Window结束时间到达的时候一次性触发
滑动窗口
窗口划分: 1.每个key单独划分 2.每条数据可能会属于多个窗口
窗口触发: Window结束时间到达的时候一次性触发
会话窗口
窗口划分: 1.每个key单独划分 2.每条数据会单独划分为一个窗口,如果window之间有交集,则会对窗口进行merge
窗口触发: Window结束时间到达的时候一次性触发
迟到数据处理
一条数据到来后,会用WindowAssigner给它划分一个window,一般窗口是一个时间区间,如果划分出来的window end比之前的watermark值还小,说明这个窗口已经触发了计算了,这条数据会被认为是迟到数据 如何处理:
小结
- 1.三种(滚动、滑动、会话)窗口的定义
- 2.迟到数据处理:AllowLateness、SideOutput
- 3.增量计算和全量计算模型
- 4.EMIT触发提前输出窗口的结果