Flink窗口API、窗口分配器和窗口函数

目录

1.Flink窗口API

1.1分为 按键分区(Keyed)和非按键分区(Non-Keyed)

1.1.1按键分区窗口(Keyed Windows)

1.1.2非按键分区(Non-Keyed Windows)

1.2窗口API的调用

2.窗口分配器

1.2.1时间窗口

(1)滚动处理时间窗口

(2)滑动处理时间窗口

(3)处理时间会话窗口

(4)滚动事件时间窗口

(5)滑动事件时间窗口

(6)事件时间会话窗口

1.2.2 计数窗口

(1)滚动计数窗口

(2)滑动计数窗口

1.2.3 全局窗口

3.窗口函数

3.1增量聚合函数( ReduceFunction / AggregateFunction )

归约函数( ReduceFunction)

聚合函数( AggregateFunction )

3.2全窗口函数( full window functions )

(1)窗口函数

(2)处理窗口函数

触发器 (Trigger)

移除器(Evictor)


1.Flink窗口API

1.1分为 按键分区(Keyed)和非按键分区(Non-Keyed)

1.1.1按键分区窗口(Keyed Windows)

经过按键分区keyBy操作后,数据流会按照key被分为多条逻辑流(logical streams),这就是KeyedStream。基于KeyedStream进行窗口操作时,窗口计算会在多个并行子任务上同时执行。相同key的数据会被发送到同一个并行子任务,而窗口操作会基于每个key进行单独的处理。

每个key上都定义了一组窗口,各自独立地进行统计计算。

需要先对DataStream调用.keyBy()进行按键分区,然后再调用.window()定义窗口。

stream.keyBy(...)

       .window(...)

1.1.2非按键分区(Non-Keyed Windows)

如果没有进行keyBy,那么原始的DataStream就不会分成多条逻辑流。这时窗口逻辑只能在一个任务(task)上执行,就相当于并行度变成了1。

没有keyby的窗口: 窗口内的所有数据进入同一个子任务,并行度值只能为1

stream.windowAll(...)

1.2窗口API的调用

窗口操作主要有两个部分 : 窗口分配器(Window Assigners) 和 窗口函数(Window Functions)

stream.keyBy(<key selector>)

       .window(<window assigner>)

       .aggregate(<window function>)

  • keyby()指定一个分区,每个key都会单独进行处理
  • window()传入一个窗口分配器,指定窗口类型
  • aggregate()定义窗口具体的处理逻辑

2.窗口分配器

定义窗口分配器,调用window()方法。

传入一个WindowAssigner 作为参数,返回 WindowedStream。如果是非按键分区窗口,那么直接调用.windowAll()方法,同样传入一个 WindowAssigner,返回的是 AllWindowedStream。

窗口按照驱动类型可以分成时间窗口和计数窗口

1.2.1时间窗口

时间窗口又可以分为滚动、滑动和会话三种

(1)滚动处理时间窗口

stream.keyBy(...)

       .window(TumblingProcessingTimeWindows.of(Time.seconds(5)))

       .aggregate(...)

  • TumblingProcessingTimeWindows 创建滚动窗口
  • of方法中传入一个time类型的参数size,表示滚动窗口的大小为5秒
  • of方法中传入两个time类型的参数 of(size,offset)表示(滚动窗口的大小,步长)

(2)滑动处理时间窗口

stream.keyBy(...)

       .window(SlidingProcessingTimeWindows.of(Time.seconds(10)Time.seconds(5)))

       .aggregate

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值