欢迎光临散文网 会员登陆 & 注册

流处理系统 第四章 高级窗口

2022-03-28 17:28 作者:huanyigntianhe  | 我要投稿

本章主要是讲解一些窗口函数相关的高级话题。首先会讲一下基于处理时间的窗口函数(processing-time windowing)的两种实现,对比加深理解基于事件时间(event-time windowing)的窗口函数,并且了解什么时候该用处理时间窗口函数,什么时候该用事件时间的窗口函数。接着讲解会话窗口(session windows), 最后会介绍一下自定义窗口函数(custom windowing)的重要性。

处理时间窗口

处理时间窗口函数的重要性体现在两个方面

(1)在特定场景下,例如使用情况监控,人们只对事件的观察时间比较关心,这时候用处理时间窗口函数比较方便

(2)某些情况下,事件发生的事件非常重要,比如用户行为分析,收费记账等,这个时候处理时间窗口函数就是错误的,谨记分辨这种情况

处理时间窗口函数的实现方式有两种:

(1)利用触发器。让触发器基于处理时间,忽略掉事件时间

(2)将处理时间赋值给事件时间,这时事件时间相关的窗口函数便是处理时间窗口函数

例子:

两种输入:灰色代表一组输入数据,粉色代表另一组数据

同一组输入数据两组处理顺序

基于事件时间窗口函数计算后的结果

第一种方法实现的处理时间窗口计算后的结果

第二种方法实现的处理时间窗口函数结果

对比可以发现,事件时间窗口函数的计算结果对输入数据的处理时间不敏感,而处理时间窗口函数反之。另外第二种处理时间窗口函数的实现又时间平移的效果。

会话窗口

会话窗口的两个特点:

(1)数据驱动。窗口的位置、大小是与数据自身相关的,而不是预先定义好的

(2)非对齐。窗口不是均匀的。

会话窗口的定义非常简单,我们只需要定义时间间隔,如果两个事件间隔小于定义好的间隔,就可以将两个对应的窗口合并,形成一个新的会话窗口。上图就是一个简单的例子,原本五个会话窗口合并形成了最后的两个窗口

下边是一个复杂一点的例子,更好的阐释合并的过程

自定义窗口

前边章节提到过固定长度窗口,滑动窗口和会话窗口,这些窗口函数组合可以实现非常复杂的数据处理任务,而Beam除此之外还提供了自定义窗口功能

自定义窗口需要实现两个基本函数:

(1)窗口分配

(2)窗口合并

自定义实现固定窗口:

非对齐的固定窗口:

按照元素对齐的固定窗口:

自定义会话窗口:

自定义带长度限制的会话窗口:

对比之前的会话窗口合并动态图,不难发现由于会话长度的限制,后边一些会话窗口并没有合并

可见自定义窗口是一个非常强大的工具,现在大部分流处理系统没有提供自定义窗口的功能。

流处理系统 第四章 高级窗口的评论 (共 条)

分享到微博请遵守国家法律