Flink ---窗口机制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangguosb/article/details/85196897

背景

  在流计算中,数据流是无限的,无法直接进行计算,因此Flink提出了window的概念(若干元素的集合)作为流计算的基本单元进行数据处理。

窗口机制

  窗口机制实质上是Flink的算子operator对数据流的处理过程:数据流如何被拆分成window,何时触发计算逻辑等,如下图所示。
处理过程: 当数据流中的元素到达算子operator后,首先由WindowAssigner决定将该元素分配到哪个窗口(包括创建窗口);每个窗口对应一个Trigger,当有新的元素插入或者定时器超时后,如果存在Evictor则通过它对窗口中的元素进行过滤;否则,直接调用窗口函数进行逻辑计算输出结果;
在这里插入图片描述

关键组件

  1. WindowAssigner
    作用:将流中的元素分配到对应窗口(零个或多个);

A WindowAssigner assigns zero or more Windows to an element;

  1. Window
    作用:若干元素的集合;
    创建:数据流的元素到达时由WindowAssigner分配和创建;

Generally speaking, a window defines a finite set of elements on an unbounded stream. This set can be based on time (as in our previous examples), element counts, a combination of counts and time, or some custom logic to assign elements to windows.

  1. Trigger
    作用:决定窗口何时被计算或清除;
    特点:每个窗口都绑定一个Trigger;
    触发时机:有新的元素插入或者Trigger上的定时器超时;
    执行动作:continue(不做任何操作),fire(处理窗口数据),purge(移除窗口和窗口中的数据),或者 fire + purge;

A Trigger determines when a pane of a window should be evaluated to emit the results for that part of the window.

  1. Evictor(可选
    作用:过滤窗口中的元素,相当于filter;
    执行时机:trigger后,window function后;

An Evictor can remove elements from a pane before/after the evaluation of WindowFunction and after the window evaluation gets triggered by a Trigger;

  1. Window Functions
    作用:具体的处理逻辑;

参考:

  1. 云邪博客:http://wuchong.me/blog/2016/05/25/flink-internals-window-mechanism/
  2. 官网:https://flink.apache.org/news/2015/12/04/Introducing-windows.html
  3. https://ci.apache.org/projects/flink/flink-docs-release-1.7/dev/stream/operators/windows.html#windows

猜你喜欢

转载自blog.csdn.net/yangguosb/article/details/85196897