flink窗口(flink窗口函数有哪些)

本篇文章给大家谈谈flink窗口,以及flink窗口函数有哪些对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

flink窗口的种类及详述

flink窗口的种类及详述:

滚动窗口(tumblingwindow)将事件分配到长度固定且互不重叠的桶中。

实际案例:简单且常见的分维度分钟级别同时在线用户数、总销售额

Java设置语句:window(TumblingProcessingTimeWindows.of(Time.seconds(5)))

该语句为设置滚动窗口的窗口时长为5秒钟

sql设置语句:FROM TABLE(TUMBLE(

        TABLE source_table

        , DESCRIPTOR(row_time)

        , INTERVAL '60' SECOND))

Windowing TVF 滚动窗口的写法就是把 tumble window 的声明写在了数据源的 Table 子句中,即 TABLE(TUMBLE(TABLE source_table, DESCRIPTOR(row_time), INTERVAL '60' SECOND)),包含三部分参数。

第一个参数 TABLE source_table 声明数据源表;第二个参数 DESCRIPTOR(row_time) 声明数据源的时间戳;第三个参数 INTERVAL '60' SECOND 声明滚动窗口大小为 1 min

滑动窗口:分配器将每个元素分配给固定窗口大小的窗口。与滚动窗口分配器类似,窗口的大小由 window size 参数配置。还有一个window slide参数用来控制滑动窗口的滑动大小。因此,如果滑动大小小于窗口大小,则滑动窗口会重叠。在这种情况下,一个元素会被分配到多个窗口中。

实际案例:简单且常见的分维度分钟级别同时在线用户数,1 分钟输贺弊出一次,计算最近 5 分钟的数据

java设置语源游句:window(SlidingProcessingTimeWindows.of(Time.seconds(10), Time.seconds(5)))

window size :窗口大小为 10秒钟

window slide:窗口间隔为5秒钟

sql设置语句: hop(row_time, interval '1' minute, interval '5' minute) 

第一个参数为事件时间的时间戳;第二个参数为滑动窗口的滑动步长;第三个参数为滑动窗口大小。

会话窗口:分配器通过活动会话对元素进行分组。与滚动窗口和滑动窗口相比,会话窗口不会雹拍销重叠,也没有固定的开始和结束时间。当会话窗口在一段时间内没有接收到元素时会关闭。会话窗口分配器需要配置一个会话间隙,定义了所需的不活动时长。当此时间段到期时,当前会话关闭,后续元素被分配到新的会话窗口。

实际案例:计算每个用户在活跃期间(一个 Session)总共购买的商品数量,如果用户 5 分钟没有活动则视为 Session 断开

设置语句:基于事件时间的会话窗口window(EventTimeSessionWindows.withGap(Time.minutes(10)))

基于处理时间的会话窗口

Java设置:window(ProcessingTimeSessionWindows.withGap(Time.minutes(10)))

会话间隙,不活动时长为10秒钟

sql设置:session(row_time, interval '5' minute)

Group Window Aggregation 中 Session 窗口的写法就是把 session window 的声明写在了 group by 子句中

Session 窗口即支持 处理时间 也支持 事件时间。但是处理时间只支持在 Streaming 任务中运行,Batch 任务不支持。

渐进式窗口:在其实就是 固定窗口间隔内提前触发的的滚动窗口,其实就是 Tumble Window + early-fire 的一个事件时间的版本。例如,从每日零点到当前这一分钟绘制累积 UV,其中 10:00 时的 UV 表示从 00:00 到 10:00 的 UV 总数。渐进式窗口可以认为是首先开一个最大窗口大小的滚动窗口,然后根据用户设置的触发的时间间隔将这个滚动窗口拆分为多个窗口,这些窗口具有相同的窗口起点和不同的窗口终点。

 应用场景:周期内累计 PV,UV 指标(如每天累计到当前这一分钟的 PV,UV)。这类指标是一段周期内的累计状态,对分析师来说更具统计分析价值,而且几乎所有的复合指标都是基于此类指标的统计(不然离线为啥都要累计一天的数据,而不要一分钟累计的数据呢)。

实际案例:每天的截止当前分钟的累计 money(sum(money)),去重 id 数(count(distinct id))。每天代表渐进式窗口大小为 1 天,分钟代表渐进式窗口移动步长为分钟级别

sql设置:FROM TABLE(CUMULATE(

       TABLE source_table

       , DESCRIPTOR(row_time)

       , INTERVAL '60' SECOND

       , INTERVAL '1' DAY))

Windowing TVF 滚动窗口的写法就是把 cumulate window 的声明写在了数据源的 Table 子句中,即 TABLE(CUMULATE(TABLE source_table, DESCRIPTOR(row_time), INTERVAL '60' SECOND, INTERVAL '1' DAY)),其中包含四部分参数:

第一个参数 TABLE source_table 声明数据源表;第二个参数 DESCRIPTOR(row_time) 声明数据源的时间戳;第三个参数 INTERVAL '60' SECOND 声明渐进式窗口触发的渐进步长为 1 min。第四个参数 INTERVAL '1' DAY 声明整个渐进式窗口的大小为 1 天,到了第二天新开一个窗口重新累计

全局窗口:分配器将具有相同 key 的所有元素分配给同一个全局窗口。仅当我们指定自定义触发器时,窗口才起作用。否则,不会执行任何计算,因为全局窗口没有我们可以处理聚合元素的自然结束的点(译者注:即本身自己不知道窗口的大小,计算多长时间的元素)

window(GlobalWindows.create())

平时滑动窗口用得比较多,其次是滚动窗口

Flink详解系列之六--窗口机制

窗口是flink处理无限流的核心,窗口将流拆分为有限大小的“桶”,我们可以在指枝这些桶上进行计算。

根据上游数据是否为Keyed Stream类型(是否将数据按照某个指定的Key进行分区),将窗口划分为Keyed Window和Non-Keyed Windows。两者的区别在于KeyStream调用相应的window()方法来指定window类型腊兆,数据会根据Key在不同的Task中并行计算,而Non-Keyed Stream需要调用WindowsAll()方法来指定window类型,所有的数据都会在一个Task进行计算,相当于没有并行。

窗口分配器负责将一个事件分配给一个或多个窗口,内置窗口包括: 滚动窗口(Tumbling Windows)、滑动窗口(Sliding Windows)、会话窗口(Session Windows)、全局窗口(Global Windows),也可以通过继承WindowAssigner类来自定义窗口。

Flink中所有的内置窗口(全局窗口除外)都有基于轮逗租时间的实现,这个时间可以是事件时间(event time),也可以是处理时间(processing time)。其中,处理滚动窗口和滑动窗口的算子,在1.12版本之前使用timeWindow(),在1.12版本被标记为 废弃 ,转而使用window()来作为窗口处理算子,这里只介绍最新版本的使用算子。

由于Flink默认使用的时间基准是UTC±00:00时间,在中国需要使用UTC+08:00时间,所以最后一个示例中窗口大小为1天,时间偏移量就是8小时。

最后一个示例,中的Time.hours(-8)含义与滚动窗口一致。从滑动窗口的使用来看,滚动窗口其实是滑动窗口的一个特例,但窗口大小和滑动间隔相等的时候,滑动窗口就是一个滚动窗口。

动态的会话gap需要实现SessionWindowTimeGapExtractor接口。

基于计数的窗口是根据事件的个数来对窗口进行划分的,概念跟基于时间的滚动窗口差不多,只不过窗口大小的划分,有时间变成了事件的个数。

全局窗口分配器将所有具有相同key的元素分配到同一个全局窗口中,这个窗口模式仅适用于用户还需自定义触发器的情况。否则,由于全局窗口没有一个自然的结尾,无法执行元素的聚合,将不会有计算被执行。

使用示例如下:

触发器决定了一个窗口何时可以被窗口函数处理,每一个窗口分配器都有一个默认的触发器,如果默认的触发器不能满足你的需要,你可以通过调用trigger(...)来指定一个自定义的触发器。触发器的接口有5个方法来允许触发器处理不同的事件:

Flink有一些内置的触发器:

GlobalWindow默认的触发器是NeverTrigger,是永远不会触发的,因此,如果你使用的是GlobalWindow的话,需要定义一个自定义触发器。

Flink的窗口模型允许指定一个除了WindowAssigner和Trigger之外的可选参数Evitor,这个可以通过调用evitor(...)方法来实现。这个驱逐器(evitor)可以在触发器触发之前或者之后清理窗口中的元素。为了达到这个目的,Evitor接口有两个方法:

注:指定一个Evitor要防止预聚合,因为窗口中的所有元素必须得在计算之前传递到驱逐器中

Flink会自动把窗口接收到的元素存入到state中。等到barrier的时候,保存这些state。

根据窗口使用的函数不同,保存窗孙山高口元素的state不同,有 ListState, ReducingState, AggregatingState, or FoldingState。

注意barrier是一个tuple的形式传输的。 所以不可能在运行process函数的时候,触发checkpoint机制 。

几种情况:

橘唯或色表示barrier

红则尺色表示故障

遇到barrier的时候才保存窗口内容和Managed state

flink开窗函数

FlinkSQL

窗口:

TUMBLE(TABLE data, DESCRIPTOR(timecol), size)

HOP(TABLE data, DESCRIPTOR(timecol), slide, size [, offset ])

SESSION(time-attr, gap-interval)

gap-interval: INTERVAL 'string' timeUnit

累积窗口函数:饥漏CUMULATE(TABLE data, DESCRIPTOR(timecol), step, size)

窗口分组聚合GROUPING SETS

over函数

CUBE

Flink DataStream

增量聚合和全量聚合

增量聚合: 窗此肢行口不维护原始数据,森哗只维护中间结果,每次基于中间结果和增量数据进行聚合。

如: ReduceFunction、AggregateFunction

全量聚合: 窗口需要维护全部原始数据,窗口触发进行全量聚合。如:ProcessWindowFunction

基于Apache Flink的流处理 第六章 基于时间和窗口的算子

默认情况下是处理时间,设置其他时间特性使用

滚动窗口不会重叠,滑动窗口枯漏可以重叠,会话窗口是根据没有收纯肆到信息的间隔来划定窗口。滚动窗口比较常用。

这里使用.window就可以创没裤烂建默认窗口了,类型为TimeWindow。

[img]

关于flink窗口和flink窗口函数有哪些的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表