本文介绍: 主要是对时间流和水印产生背景作用进行了介绍,对窗口分类窗口函数进行初步了解。


一、背景

Flink需要支持流重放并且还要不影响结果,因此不能仅仅支持计算时间还要支持事件时间事件流在传输处理过程耗时不同,导致下游节点接受到的数据流可能是乱序的。由于程序不能无限制等待所有事件到达之后再处理,因此需要决定何时停止等待前序事件,这就是Watermarks作用
Flink中流入的数据分为三种类型:事件流、watermarkcheckpoint barriers。其中watermarkcheckpoint barriers都是flink根据一些策略生产的。
在这里插入图片描述

二、时间语义

Flink支持三种时间语义

1.事件时间event time

事件产生的时间记录的是设备生产或者存储事件的时间。

2.读取时间(ingestion time

Flink读取事件时记录的时间

3.处理时间(processing time

Flink 具体算子处理事件的时间

三、水印-Watermarks

Watermarks主要是定义何时停止等待较早事件。在Flink采用的是固定延迟策略,也就是假定所有的事件都是有一个最大延迟

1.延迟正确

开发人员需要延迟结果正确性作出权衡。如果Watermarks边界时间设置相对较短,那么会快速产生一个可能不太准确的结果。如果Watermarks边界时间设置的小队较长,那么会延迟很久的情况下产生一个相对比较准确的结果。

2.延迟事件

如果算子接受到了Watermark(t) ,则表示事件流的时间已经到达了 t; watermark 之后的时间戳 ≤ t 的任何事件都被称之为延迟事件。

3.顺序

顺序流中,watermark也是顺序的分布在整个事件流中,并且是周期性出现的。
在这里插入图片描述

4.无序

针对无序流由于事件不是按照时间戳顺序出现,所以watermark非常重要。watermark到达算子就表明这个时间戳之前的所有事件都已经到达了此算子,此算子可以进行相应计算。并且在操作完成后会生成一个新的watermark以供下游算子参考
在这里插入图片描述

5.并行

watermark是在数据源输入时产生的,各个分区输入是互相独立的。当watermark到达某个算子时,算子会产生一个新的watermark。如果算子有多个输入流,算子会输出输入流中事件时间的最小值
在这里插入图片描述

四、Windows

Flink窗口场景上处理有非常丰富的api应用过程中经常遇到分析一个时间段内的浏览量、最高量、平均值场景

1.窗口维度分类

对于无界数据流进行一些数据统计不现实,所以需要在一定的窗口内对数据进行统计和分析。按照划分维度可以分为时间窗口和数量窗口
在这里插入图片描述

1.1 时间窗口

时间窗口就是以时间点来定义窗口的开始和结束,在窗口开放期间符合条件的事件会进入窗口,在窗口结束前会对窗口内的事件进行计算和处理。

1.2 数量窗口

数量窗口就是以事件个数定义窗口的开始和结束,在窗口开放期间事件会进入窗口,在窗口结束前会对窗口内的事件进行计算和处理。

2.窗口规则分类

除了维度窗口外,每个窗口的划分还有更细致的划分滚动窗口( Tumbling Window )、滑动窗口( Sliding Window )、会话窗口( Session Window ),以及全局窗口( Global Window )。

2.1 滚动窗口

滚动窗口是指固定大小的窗口,对数据流按时间或者事件个数进行均匀的划分。窗口之间首尾想接的没有重叠比如计算分钟页面浏览量。

2.2 滑动窗口

滑动窗口大小也是固定的,但是滑动窗口首尾不是相接的有一定重叠比如计算每10秒计算前一分钟的页面浏览量。

2.3 会话窗口

会话窗口就是基于会话来对数据进行分组

2.4 全局窗口

全局窗口会把相同key的所有数据放到同一个窗口中。

3.内置窗口

Flink计算窗口主要有两个抽象概念:窗口分配器和窗口函数,窗口分配器主要是指如果将事件分配到窗口,窗口函数是指如何对窗口内的事件进行处理。

Flink内置窗口分配如下
在这里插入图片描述
基于时间的窗口即可以根据事件时间也可以根据处理时间来划分窗口,基于计算的窗口只有在事件数量达到要求才会触发计算。

4.窗口函数

窗口函数可以进行增量计算和全量计算。

4.1 增量计算

开发者需要继承ReduceFunction或AggregateFunction。当每个事件被加到窗口时,都会调用 ReduceFunction 或者 AggregateFunction 来增量计算。

4.2 全量计算

开发者需要继承ProcessWindowFunction。当触发窗口时,会调用ProcessWindowFunction全量计算。

总结

主要是对时间流和水印产生背景作用进行了介绍,对窗口分类和窗口函数进行初步了解。


参考链接

1.Flink实时流
2.Flink流式分析

原文地址:https://blog.csdn.net/wlphlj/article/details/134685248

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_34130.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注