FLink的窗口机制与流处理Join的方案

FLink底层引擎是一个流式引擎,支持流处理和批处理,而window是streaming到batch的桥梁。因为流处理过程中,数据是源源不断流进来的,需要对数据进行实时处理的话,可以通过来一个消息处理一个的方式,也可以通过把一段时间内的数据聚合之后,再一起处理的形式,此时需要定义一个窗口来收集过去那段时间内的数据再进行处理。

Flink 提出了三种时间的概念,分别是event time(事件时间:事件发生时的时间),ingestion time(摄取时间:事件进入流处理系统的时间),processing time(处理时间:消息被计算处理的时间)。

窗口类型

窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。一种经典的窗口分类为:

  • Tumbling window (滚动窗口,无重叠)

滚动窗口分配器将每个元素分配给指定窗口大小的窗口。滚动窗口具有固定的大小并且不重叠。例如,如果指定大小为5分钟的滚动窗口,则将评估当前窗口,并且每五分钟将启动一个新窗口,如下图所示。
sliding window
sliding window
  • sliding window (滑动窗口,时间有重叠)

滑动窗口分配器将元素分配给固定长度的窗口。类似于滚动窗口分配器,窗口的大小由窗口大小参数配置。另外一个参数控制滑动窗口的启动频率。因此,如果频率小于窗口尺寸,滑动窗可以重叠。在这种情况下,元素被分配到多个窗口。
例如,使用大小为10分钟的窗口,滑过5分钟。如下图所示。


Tumbling window
Tumbling window
  • session window(会话窗口,无重叠)

会话窗口通过活动会话分配组元素。与滚动窗口和滑动窗口相比,会话窗口不重叠,没有固定的开始和结束时间。相反,当会话窗口在一段时间内没有接收到元素时,即当发生不活动的间隙时关闭。会话窗口分配器配置有会话间隙,定义所需的不活动时间长度。当此时间段到期时,当前会话关闭,后续元素被分配到新的会话窗口。

session window
session window

还可以分别结合以时间驱动或者数据驱动,如:sliding time window,tumbling count window。

窗口常用的组件:

Window Assigner :决定某个元素被分配到哪个/哪些窗口中去。

Trigger : 触发器,进行窗口的处理或清除,每个窗口都会拥有一个的Trigger。

Evictor : “驱逐者”,类似filter作用。在Trigger触发之后,window被处理前,EVictor用来处理窗口中无用的元素。

窗口应用在join操作

由以上可以得知,若要对两条数据流进行join操作,则一定是基于window形式的,同样的还有和join操作类似的CoGroupedStreams。可以发现,Flink中joinStream会通过调用windowStream来实现。如图。

Flink流类型

接下来,对join的一个实现类WindowJoin进行分析。基本思想为在一个时间窗内对两条数据结构为键值对数据流进行inner join操作。

重要参数配置:根据Flink的时间概念,时间属性时间选为ingestion time,并设置了窗口大小和数据传输速率。

函数调用

  • where():给两条数据流指定各自的keySelector,获取key的类型

  • equal()判断key是否相同

  • window():制作一个ID标识符,配置窗口中的

    • 输入流DataStream、keySelector、key type等元数据
    • 窗口组件window assigner、Trigger、EVictor
    image.png
  • apply():配置join操作方法

  • 最后通过execute()执行inner join操作

问题

join 窗口的双流数据都是被缓存在内存中的,也就是说如果某个key上的窗口数据太多就会导致 JVM OOM。双流join的难点也正是在这里。例如可以借鉴Flink在批处理join中的优化方案,也可以像HDFS对中间结果的操作那样,当数据超过阈值时能spill到硬盘。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容