Flink for java之四:Time and Window

一、Time

Flink主要是做流式计算,数据是通过滚动(rolling)过来的,就像溪流一样,源源不断地进来。原文Windows are at the heart of processing infinite streams. Windows split the stream into “buckets” of finite size, over which we can apply computations. 也就是说,window将无限的数据流切割成有限数据集,然后运用各种operators做业务逻辑运算。分为Keyed window和Non-Keyed window两种结构,Non-Keyed的window算子一般是以All作为后缀。

Flink支持三种Time:

    1、Event Time:事件实际产生的时间,在进入Flink前就已经存在,且必须指定watermark的生成方式

    2、Ingestion Time:摄取事件,也就是刚进入Flink source的时间

    3、Processing Time:执行算子操作机器的当前系统时间(每个算子都不一样)

Time的设置:默认是ProcessingTime,如果使用Event time,source之后还需要指定Timestamp Assigner和Watermark

       实时系统中,由于网络等各种原因造成的数据延时颇为常见,造成事件发送到Flink的事件晚于事件本身产生的时间。如果基于event time构建window,对于late element,不能无限期等待下去,必须有个机制保证一定的时间后,必须触发window去进行计算,这个特殊的机制,就是watermark。关于水位线watermarker,推荐博文:Flink WaterMark 详解

    关于time和watermark,举一个生活中的例子,考试。考试规定9:00--11:00考语文,14:00--16:30考数学,迟到15分钟就不让进考场。那么9:00就是一个watermark,告诉系统,9:00该来的考生(数据)都来了,可以开考了(触发计算);然后继续等待下一个watermark 14:00,告诉系统,新的一批数据(考生)来了,又可以开考了(触发计算)。15分钟就是一个延迟值,超过延时值再来的数据会被果断丢弃;而在延时值之间到来的数据,有不同的处理策略,比如可以同样处理,但记录,如果通过监控发现延时值数据太多,就要分析原因。

两种Watermark

Periodic Watermark:ExecutionConfig.setAutoWatermarkInterval(msec)(默认是200ms,设置watermark设置的周期),实现AssignerWithPeriodicWatermarks接口。

Puncuated Watermark:基于某些事件触发watermark的生成和发送(由用户代码实现,例如遇到特殊元素),实现AssignerWithPuncuatedWatermarks接口。


二、Windows

创建:属于改窗口的第一个元素到达时就会创建改窗口。

销毁:time-base 当时间超过窗口的结束时间戳+指定时延AllowedLateness,窗口将被移除;count-base 当足够数量的element到来时,窗口将会被移除。

第一种划分法:根据基于Count和Time

1、Count-base Windows

      1.1 Count Tumbling-windows

      1.2 Count Sliding-windows

      1.3 Global windows

2、Time-base Windows

      2.1 Time Tumbling-window

      2.2 Time Sliding-window

      2.3 Time Session-windows

      2.4 Global windows

第二种划分法:Tumbling翻滚、Sliding滑动、Session会话、Global全局

1、Tumbling-window

每一段时间窗口的时长都是相同的,不管这个时间窗口内有无数据、数据多寡,都会准时开启和关闭,时间设置是左闭右开,比如我们设置的时长是5min,则:

[00:00:00 -- 00:04:59]

[00:05:00 -- 00:09:59]

[00:10:00 -- 00:14:59]

---------

2、Sliding-window

滑动窗口在不同的窗口之间,会有一部分的重叠overlap,比如设置时长10min,slide-time 5min,则:

[00:00:00 -- 00:09:59]

[00:05:00 -- 00:14:59]

[00:10:00 -- 00:19:59]

---------

3、Session-windows

类似于Web项目中的session,设置一定gap size,当超过gap size时间没有数据过来,就销毁当前时间,一直等到下一个数据到来再创建新的时间窗口。

4、Global windows

用在自定义触发器Trigger的场景


2.3 windowAssinger

windowAssinger窗口分配器:负责将每个传入的元素分配给一个或多个窗口。keyStream是window,Non-Key Stream是windowAll。分类参考2.1

count-based window和Time-based window


总结:


三、窗口函数

在定义了窗口分配器之后,需要为每一个窗口明确指定计算逻辑,这就是窗口函数要做的事情。当系统决定一个窗口已经准备好执行之后,这个窗口函数将被用来处理窗口中的每一个元素(可能是分组的)。

3.1 ReduceFunction

输出:


3.2 AggregateFunction

输出:


3.3 ReduceFunctionOnWindowAll

输出:


3.4 ProcessWinFuntion

输出:


四、Trigger和Evictor

4.1 Trigger触发器

指定窗口函数在什么条件下可被触发,还可以决定创建和删除窗口之间的任何时间清除窗口的内容。仅限于清除窗口中元素,而不是元数据,这意味着新数据依然可以添加到窗口中。例如当窗口的数据达到5个时,或水位线watermark达到窗口边界时触发计算。

4.2 Evictor驱逐者

将在触发器之后或者在函数被应用前后,清除窗口中的元素。


4.3 延时Lateness


Flink源码:https://github.com/apache/flink

Flink官网:https://ci.apache.org/projects/flink/flink-docs-release-1.12/

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

推荐阅读更多精彩内容