聊聊Flink的必知必会(三)|热讯
时间:2023-06-17 05:04:43来源:博客园

概述

在进行流处理时,很多时候想要对流的有界子集进行聚合分析。例如有如下的需求场景:(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

标签:

  • 上一篇文章: 激光小腿脱毛是否烧伤皮肤
  • 下一篇文章: 最后一页
  • 生活指南
  • 多个圆柱形工件同时抓取机构(有一个t形工件)

    个圆柱形工件同时抓取机构,有一个t形工件这个问题很多朋友还不知道,

  • 四川举行2023年“安全宣传咨询日”活动

    强化红线意识,普及安全知识,弘扬安全文化。

  • 【热闻】今日热文:乳腺增生钙化是怎么回事(乳腺增生钙化)

    当前大家对于乳腺增生钙化都是颇为感兴趣的,大家都想要了解一下乳腺增

  • 11岁闺蜜生日送什么礼物_环球报资讯

    以下是一些适合11岁女孩的生日礼物建议:1 闺蜜的喜爱之物:如果

  • 2023长沙小升初微机派位志愿怎么填_当前热文

    2023年长沙城区小学毕业生将填报微机派位志愿时间在6月18日,城区小学

  • 体育总局科教司关于2023年优秀运动员本科保送推荐名单的公示_世界报道

    根据教育部、国家体育总局等六部委《关于进一步做好退役运动员就业安置

  • 新疆众和:公司高纯铝、电子铝箔市场占有率位居行业前列,电极箔市场占有率在行业内排名第二

    同花顺金融研究中心6月16日讯,有投资者向新疆众和提问,请问贵公司当

  • 旧院黑鸡养殖前景(旧院黑鸡多少钱一斤)|世界微速讯

    旧院黑鸡养殖技巧介绍旧院黑鸡是一种优质的土鸡品种,由于其肉质细嫩、

  • 新股中签不想买怎么解冻资金?新股中签后不缴款会怎样?_微速讯

    新股中签不想买怎么解冻资金?如果您在新股申购中签后不想购买,可以

  • 今日报丨美国疾控中心:枪支暴力推波助澜 青少年谋杀率飙升

    美国枪支暴力不断,对青少年的心理健康以及人身安全造成了严重威胁。美

  • 五方光电(002962):6月16日技术指标出现看涨信号-“红三兵”

    截至发稿,五方光电(002962)报13 43元 股,成交量31 679万手,换手率

  • 山狸子学名叫什么?山狸子是什么动物?

    山狸子学名叫什么?豹猫山狸子学名叫豹猫。豹猫是猫科、豹猫属动物。

  • 环球热点评!股票跌时清仓还是留半仓?新手买全仓还是半仓?

    股票跌时清仓还是留半仓?股票跌时清仓还是留半仓,需要结合市场行情

  • 《阴阳师》月见黑怎么获得为什么月见黑是大佬

    《阴阳师》月见黑怎么获得?有关b股的相关内容来喽!感兴趣的小伙伴

  • 环球速递!网贷停息挂账具体是真的还是假的?解决网贷逾期的团队是真的吗?

    网贷停息挂账具体是真的还是假的?网贷停息挂账可能是真的,也有可

  • 全球热消息:Win10怎么设置默认输入法?win10输入法调整成win7模式怎么设置?

    Win10怎么设置默认输入法?点击桌面左下角win按钮再点击开始菜单里的

  • 民生
    • 南宁博物馆将开展系列主题活动迎端午

    • IMF敦促:继续加息!啥情况? 看热讯

    • 广宇集团为控股子公司借款进行担保 金额共计3000万元-天天热头条

    • 映翰通:5月19日至6月14日张立殷、戴义波减持公司股份合计1.52万股