聊聊Flink的必知必会(三) 世界热点
时间:2023-06-17 09:33:49来源:博客园

概述

在进行流处理时,很多时候想要对流的有界子集进行聚合分析。例如有如下的需求场景:(1)每分钟的页面浏览(PV)次数。


【资料图】

(2)每用户每周的会话次数。

(3)每分钟每传感器的最高温度。

(4)当电商发布一个秒杀活动时,想要每隔10min了解流量数据。

对于这些需求的处理,程序需要处理元素组,而不是单个元素,因此,通常使用窗口来限定在数据流上的聚合(如count、sum等)的范围,例如"过去5min内的计数"或"最后100个元素的总和",所以在处理流数据时,通常更有意义的是考虑有限窗口上的聚合,而不是整个流。

在阿里的限流框架Sentinel中,关键的资源数据统计算法也是基于窗口的概念来做的。

窗口(window)是处理无限流的核心,使用窗口计算无界流上的聚合。窗口将流分割为有限大小的组,用户可以对这样的组进行计算。窗口可以是由时间驱动的(例如,每30s),也可以是由数据驱动的(例如,每100个元素)。如下所示

Flink流窗口

通俗点来说,窗口(window)可以将无界流分成有限大小的「桶」,我们基于这个「桶」之上,可以构建各种各样的计算。而无界流的拆分方式可以按时间、或者事件的数量,我们可以根据业务场景来定义窗口的大小。

如何对定义创建流窗口?Flink支持不同类型的窗口,分别介绍如下。

(1)滚动窗口:Tumbling Window,是在流中创建不重叠的相邻窗口。它们是固定长度的窗口,没有重叠。可以根据时间对元素进行分组(例如,从10:00到10:05的所有元素进入一个组),或者根据计数(前50个元素进入一个单独的组)对元素进行分组。例如,可以用它来回答这样的问题:“在不重叠的5min间隔内计算流中元素的数量”。

(2)滑动窗口:Sliding Window,类似于滚动窗口,但是窗口可以重叠。滑动窗口是固定长度的窗口,通过用户给定的窗口滑动参数与前面的窗口重叠。例如,如果需要计算最后5min的指标,但希望每分钟显示一个输出时。

(3)会话窗口:Session Window,当对发生的事件进行分组时,将时间接近的分到一组(一个窗口中)。还可以提供会话间隔的配置参数,该参数指示在关闭会话之前需要等待多长时间。

(4)全局窗口:Global Window,Flink将所有元素放到一个窗口中。通常在这种情况下,每个元素都被分配给一个单一的per-key全局窗口(Global Window)。如果不指定任何触发器,就不会触发任何计算。这只有在定义自定义触发器时才有用,该触发器定义了窗口何时结束。

这几种窗口类型表示,可按如下图表示

窗口分配器

窗口分配器用于定义如何将元素分配给窗口。这是通过在调用window()(针对Keyed Stream)或windowAll()(针对non-keyed stream)时指定所选择的WindowAssigner实现的。WindowAssigner负责将每个传入元素分配给一个或多个窗口。

内置窗口分配器

Flink为最常见的场景(滚动时间窗口、滑动时间窗口、全局窗口和会话窗口)提供了预定义的窗口分配器,它们分别如下。

(1)滚动时间窗口:例如,每分钟PV数据(浏览量),代码如下:

TumblingEventTimeWindows.of(Time.minutes(1))

(2)滑动时间窗口:例如,每10s计算一次每分钟的页面浏览量,代码如下:

SlidingEventTimeWindows.of(Time.minutes(1),Time.seconds(10))

(3)会话窗口:例如,每个会话的PV数据,其中会话定义为会话之间至少30min的间隔,代码如下:

EventTimeSessionWindows.withGap(Time.minutes(30))

所有内置的窗口分配器(全局窗口除外)都根据时间向窗口分配元素。基于时间的窗口分配程序(包括会话窗口)有事件时间和处理时间两种形式。示例如下:

自定义窗口分配器

一个Flink窗口程序的总体结构如下Keyed Stream表示如下,在Keyed Stream的情况下,可以使用传入事件的任何属性作为key。在Keyed Stream的窗口计算由多个任务并行执行,因为每个逻辑Keyed Stream都可以独立于其他流进行处理。所有引用相同key的元素将被发送到相同的并行任务。

// Keyed Windowsstream    .keyBy(...)    .window()    .reduce/aggregate/apply()

non-keyed-stream表示如下,在Keyed Stream的情况下,可以使用传入事件的任何属性作为key。在Keyed Stream的窗口计算由多个任务并行执行,因为每个逻辑Keyed Stream都可以独立于其他流进行处理。所有引用相同key的元素将被发送到相同的并行任务。

// Keyed Windowsstream    .windowAll()    .reduce/aggregate/apply()

参考《Flink原理深入与编程实战》

Flink的Window

标签:

最新
  • 聊聊Flink的必知必会(三) 世界热点

    概述在进行流处理时,很多时候想要对流的有界子集进行聚合分析。例

  • 【独家】上交会新科技展开空中通勤未来图景 国产电动垂直起降飞行器首次亮相

    东方网记者程琦6月16日报道:第九届上交会在上海世博展览馆如火如荼进行

  • 要闻速递:柠檬蜂蜜水什么时候喝最好(蜂蜜柠檬水什么时候喝效果最好)

    柠檬蜂蜜水什么时候喝最好1、蜂蜜柠檬茶没有所谓的最佳饮用时间,什么

  • 臧峰宇:马克思主义基本原理同中华优秀传统文化相结合的内在机理|焦点简讯

    2023年第23期《学习活页文选》选发了臧峰宇同志文章《马克思主义基本原

  • 70后80后的专属回忆|蓝精灵65周年特展来到广州

    刚刚举办完“一条线两个人——詹忠效金城线描艺术联展”的广州国际金融

  • 世界信息:江苏省淮安市发布暴雨蓝色预警

    淮安市气象台2023年06月16日16时50分发布暴雨蓝色预警:预计17日夜里-1

  • Sauce非理性Extra旋风杯,感受极致的快乐,从旋转开始_今日讯

    人的一生想要活明白,那一定要拥有一个核心理念,那就是追求快乐,一辈

  • 深圳市光明区总结部署征兵工作号召有志青年积极入伍

    6月15日,光明区组织召开2023年上半年征兵工作总结暨下半年征兵任务部

  • 顺德乐从社区卫生服务中心HPV最新消息_世界实时

    2023年6月16日更新。一、预约时间:2023年6月17日8:00开放(疫苗库存数

  • 今日热门!信立泰:6月14日接受机构调研,包括知名机构希瓦资产的多家机构参与

    2023年6月15日信立泰002294发布公告称公司于2023年6月14日接受机构调研

  • 一篮子货币是什么意思 美元指数构成的一篮子货币包括哪些

    "一篮子货币 "是指一种特定的汇率指标,通常用于衡量一个国家货币的国

  • 宝马电车三大品牌深度分析:鼻孔越大,销量越垮?

    宝马电车是“杂牌电动车”?

  • 看热讯:包头房价十连跌,包头楼市降温,包头楼市6月分析

    包头楼市2023年6月第一周数据出炉,其中:一、包头楼市二手房挂牌价从7

  • 【环球时快讯】“七天无理由退货”规则不能滥用

    原标题:“七天无理由退货”规则不能滥用一般人网购商品是因为有需要,

  • 全球信息:柬埔寨专家:借RCEP的“东风”,中柬经贸合作迎来新机遇

    柬埔寨专家:借RCEP的“东风”,中柬经贸合作迎来新机遇,东盟,中柬,rce

  • 视讯!容联七陌携手乌当农商银行 加速农信数字化升级

    贵州乌当农商银行成立于2015年,前身为成立于1953年的乌当区农村信用社

  • 旅游
    • 【环球速看料】私募基金和公募基金如何区分?私募基金和公募基金的区别

    • Csgo开手套什么箱子最划算?csgo开箱手套有什么用?

    • 激光内雕玻璃之应用于展览展示

    • 信用卡逾期之后会出现什么后果?信用卡太多有什么影响?