流式计算中的Window机制

流式计算中的Window机制

Window 是什么

在流计算中,数据流是持续不断的,因此不可能等全部数据都到了再开始处理。Window的作用就是将无限的Streaming拆分成大小有限的Batch,我们可以对每个Window里的数据进行应用和计算。

典型Window的基本功能

本文介绍 滚动窗口 、滑动窗口 和 会话窗口

Tumble Window(滚动窗口)

滚动窗口特点:

  • 窗口不重叠,每个数据只能属于一个窗口

  • 窗口长度固定

  • 当时间大于等于Window end时,一次性触发对应的Window的输出

Sliding Window(滑动窗口)

滚动窗口特点:

  • 滑动窗口以一个步长不断向前滑动,窗口的长度固定。

  • 窗口可能重叠

  • 当窗口长度大于滑动窗口的步长,数据就可能属于多个窗口

  • 当窗口长度小于滑动窗口的步长,数据就可能不属于任何窗口

  • 当时间大于等于Window end时,一次性触发对应的Window的输出

Session Window(会话窗口)

  • session gap 指 各个session之间的间隔,一般会设置一个会话的最大gap,比如1分钟,当session gap大于1分钟,数据就会被分到不同的session中。

  • 窗口长度不等

  • 当时间大于等于Window end时,一次性触发对应的Window的输出

迟到数据的处理

  • 迟到的定义:watermark驱动某个窗口触发输出之后,这个窗口如果后面又来了数据,那这种情况就属于是迟到的数据了。

  • 处理办法:

  1. 直接丢弃(默认)

  1. 设置一个允许迟到时间,这种情况下,窗口正常计算时间结束后不会马上清理数据,而是多保留一个“迟到时间”,如果这段时间内有数据到达,则继续计算

  1. 将迟到数据转变成一个单独的流,再由用户自己决定如何处理(侧输出流)

增量计算 和 全量计算

  • 增量计算:每条数据到来后,直接参与计算,但是暂不输出结果

  • 全量计算:每条数据到来后,先放到一个buffer中,这个buffer会存储到状态里,直到窗口触发输出的时候,才把所有数据拿出来统一进行计算

EMIT触发

  • 背景:正常的窗口都是在窗口结束时才会进行输出,比如窗口时间为一天,只有在一天结束时才会输出结果,这时便失去了实时计算的意义。

  • 作用:EMIT触发是一种可以提前把窗口内容输出的机制,比如窗口时间为一天的窗口,设置其5s输出一次,使下游更快的获得到窗口计算的结果。

猜你喜欢

转载自blog.csdn.net/m0_51561690/article/details/128546381
今日推荐