流计算中的window计算基本概念 | 青训营笔记

76 阅读2分钟

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

在学习流计算之前,我们首先要弄懂什么是流计算?

流计算:实时获取来自不同数据源的海量数据,经过实时分析处理,获得有价值的信息。

数据的特点在于其实时性越高,数据价值也就越高。这也就是流计算前景广泛的原因。

但是实时的数据是永不停止的,我们不能获取所有数据并得出一个结果,而且大部分情况下我们也不需要获取所有的数据,更关心的是最近的状态,于是我们可以将数据流切分成一个一个小片段,称其为计算窗口,也就是windowing。比如获取最近几分钟或者最近几百条信息,然后在每个窗口基础上进行统计。windowing也就是将无边界的实时数据流划分为计算窗口的统计手段。

window包含:

1.滚动窗口(Tumble Window):每条数据只属于一个窗口,窗口不会重合。

2.滑动窗口(Sliding Window):每条数据可能会属于多个窗口,窗口包含重合部分,紧挨着的滑动窗口就是滚动窗口。

3.会话窗口(Session Window):窗口可以合并,会话窗口通过session活动来对元素进行分组,会话窗口跟滚动窗口和滑动窗口相比,没有窗口重叠,没有固定窗口大小。相反,当它在一个固定的时间周期内不再收到元素,即会话断开,那这个窗口就会关闭。

不是所有数据都会被正常分配,这里就涉及迟到数据的概念:一个迟到元素是指元素到达窗口算子时,该元素本该被分配到某个窗口,但由于延迟,窗口已经触发计算。目前flink有三种处理迟到数据方式:

  • 直接将迟到数据丢弃
  • 将迟到数据发送到另一个流
  • 重新执行一次计算,将迟到数据考虑进来,更新计算结果