流计算中的window计算|青训营笔记

66 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第4天

流批处理的对比

实时性越高数据价值越高

image.png

批处理模型典型的数仓结构为T+1架构,即数据计算是天级别的,当天只能看到前一天的计算结果
通常使用的计算引擎为Hive或者spark等,计算的时候,数据完全ready的,输入和输出都是确定性的

image.png

处理时间窗口
    实时计算:处理时间窗口
    数据实时流动,实时计算,窗口结束直接发送结果,不需要周期调度任务
   

image.png

处理时间
    数据在流式计算系统中真正处理时所在机器的当前时间
事件时间
    数据产生的时间,比如客户端,传感器,后端代码等上报的数据时的时间
   

image.png

实时计算:事件时间窗口
数据实时进入到真实事件发生的窗口中进行计算,可以有效的处理数据延迟和乱序

image.png

watermark
在数据中插入一些watermark,来表示当前的真实时间

image.png

在数据存在乱序的时候,watermark就比较重要了,它可以用来在乱序容忍和实时性之间做一个平衡

image.png

watermark

watermark表示系统认为的当前真实的事件时间
watermark由以下方式产生

image.png

watermark的传递

image.png

通过flink UI观察watermark

image.png

典型的三个问题

image.png

image.png

image.png

window

window分类
    典型
        Tumble Window
        Sliding Window
        Session Window
    其他
        全局window
        Count Window
        累计窗口
        --
window的使用方法

image.png

滚动窗口
        窗口划分:
            每个key单独划分
            每条数据只会属于一个窗口
        窗口触发:
            Window结束时间到达的时候一次性触发
            

image.png

滑动窗口
    窗口划分:
        每个key单独划分
        每条数据可能会属于多个窗口
    窗口出发:
        Window结束时间到达的时候一次性触发

image.png

会话窗口
    窗口划分:
        每个Key单独划分
        每条数据会单独划分为一个窗口,如果window之间有交集,则会对窗口进行merge
    窗口触发:
        Window结束时间到达的时候一次性触发

image.png

迟到数据处理

一条数据到来之后,会用WindowAssigner给他划分一个window,一般时间窗口是一个时间区间,比如(10.00-11.00),如果划分出来的window end比当前的watermark值还小,说明这个窗口已经触发了计算了,这条数据会被认为是迟到数据
只有事件时间下才会出现迟到数据
迟到数据的默认处理是丢弃
Allow lateness
    这种方式需要设置一个允许迟到的时间,设置之后,窗口正常计算结束后,不会马上清理状态,而是会多保留allowLateness这么长时间,在这段时间内如果还有数据的到来,则继续之前的状态的计算。
SideOutput
    这种方式需要对迟到数据打一个tag,然后再DataStream上根据这个tag获取到迟到数据流,然后业务层面自行选择处理

image.png 增量与全量计算

增量:
    每条数据到来,直接进行计算,window只存储计算结果,比如计算sum,状态中只需要存储sum的结果,不需要保存每条数据
    典型的reduce,aggregate等函数都是增量计算
    

image.png

全量:
    每条数据到来会存储到window的state中,等到window触发计算的时候,将所有数据拿出来一起计算
    典型的process函数就是全量计算
    

image.png

EMIT触发

通常来讲,window都是再结束的时候才能输出结果,比如1h的tumble window,只有在1个小时结束的时候才能统一输出结果
如果窗口比较大,比如1h或者1d,甚至于更大的话,那计算结果输出的延迟就比较高,失去了实时计算的意义
EMIT输出指的是:在window没有结束的时候,提前把window计算的部分结果输出出来

实现方法:
    

image.png

window高级优化

Mini-batch优化
    

image.png

image.png

倾斜优化

image.png

Distinct计算状态复用

image.png image.png

Pane优化
    

image.png

image.png