zoukankan      html  css  js  c++  java
  • Flink Windows窗口简介和使用

    Apache Flink–DataStream–Window

    什么是Window?有哪些用途? 
    下面我们结合一个现实的例子来说明。

    我们先提出一个问题:统计经过某红绿灯的汽车数量之和? 
    假设在一个红绿灯处,我们每隔15秒统计一次通过此红绿灯的汽车数量,如下图: 
    这里写图片描述 
    可以把汽车的经过看成一个流,无穷的流,不断有汽车经过此红绿灯,因此无法统计总共的汽车数量。但是,我们可以换一种思路,每隔15秒,我们都将与上一次的结果进行sum操作(滑动聚合),如下: 
    这里写图片描述 
    这个结果似乎还是无法回答我们的问题,根本原因在于流是无界的,我们不能限制流,但可以在有一个有界的范围内处理无界的流数据。

    因此,我们需要换一个问题的提法:每分钟经过某红绿灯的汽车数量之和? 
    这个问题,就相当于一个定义了一个Window(窗口),window的界限是1分钟,且每分钟内的数据互不干扰,因此也可以称为翻滚(不重合)窗口,如下图: 
    这里写图片描述 
    第一分钟的数量为8,第二分钟是22,第三分钟是27。。。这样,1个小时内会有60个window。

    再考虑一种情况,每30秒统计一次过去1分钟的汽车数量之和: 
    这里写图片描述 
    此时,window出现了重合。这样,1个小时内会有120个window。

    扩展一下,我们可以在某个地区,收集每一个红绿灯处汽车经过的数量,然后每个红绿灯处都做一次基于1分钟的window统计,即并行处理: 
    这里写图片描述

    通常来讲,Window就是用来对一个无限的流设置一个有限的集合,在有界的数据集上进行操作的一种机制。window又可以分为基于时间(Time-based)的window以及基于数量(Count-based)的window。

    Flink DataStream API提供了Time和Count的window,同时增加了基于Session的window。同时,由于某些特殊的需要,DataStream API也提供了定制化的window操作,供用户自定义window。

  • 相关阅读:
    Mybatis学习笔记14
    Mybatis学习笔记13
    Mybatis学习笔记12
    poj 2513
    poj 2001
    poj 1080
    poj 1703
    poj 1521
    poj 1384
    poj 1726
  • 原文地址:https://www.cnblogs.com/zourui4271/p/13544394.html
Copyright © 2011-2022 走看看