Flink window 用法介绍(3)

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: Flink window 用法介绍(3)

image.png


适用场景:


适合做BI统计等(每个时间段的聚合计算)




  • 滑动事件窗口


滑动窗口分配器将元素分配到固定元素的窗口中 与滚动窗口类似 
窗口的大小由窗口大小参数配置
另一个滑动窗口参数控制滑动窗口开始的频率
因此滑动窗口如果滑动参数小于窗口大小的话 窗口是可以重叠的
在这种情况下会被分配到多个窗口中
例如:
有10分钟的窗口和5分钟的滑动 那么窗口中每5分钟的窗口里包含着上个10分钟产生的数据


  • 滑动窗口是固定窗口的更广义的一种形式 滑动窗口由固定的窗口长度和滑动间隔组成


  • 窗口的长度固定 可以由重叠


image.png


适用场景:


对最近一段时间内的统计(求某接口最近 5min的失败率来决定是否要报警)


  • 会话窗口


session窗口分配器通过session活动来对元素进行分组 
session窗口根滚动窗口和滑动窗口相比
不会有重叠和固定的开始时间和结束时间的情况 
相反 当它在一个固定的时间周期内不再收到元素 即非活动间隔产生
那么这个窗口就会关闭 
一个session窗口通过一个session间隔来配置 
这个session间隔定义了非活跃周期的长度 当这个非活跃周期产生 那么当前session将关闭并且后续的元素将会被分配到新的session窗口中去


  • 由一系列事件组合一个指定时间长度的timeout间隙组成 类似于web应用的session 也就是一段时间内没有接收到新数据就会生成新窗口


  • 特点:时间无对齐


image.png


  • 计数窗口


  • 滚动计数窗口


  • 滑动计数窗口


Windows API


  • 窗口分配器 window()


可以用 .window()定义一个窗口 
基于这个window去做一些聚合或者其他处理操作
注意:这个方法必须在keyBy之后才能用
Flink提供了更简单的方法 .timeWindow(时间窗口)和.countWindow(计数窗口)


代码


val minTempPerWindow = dataStream
    .map(r => (r.id, r.temperature))
    .keyBy(_._1)
    .timeWindow(Time.seconds(15))
    .reduce((r1, r2) => (r1._1, r1._2.min(r2._2)))


  • 窗口分配器(window assigner)


  • 滚动窗口(tumbling window)


  • 滑动窗口(sliding window)


  • 会话窗口(session window)


  • 全局窗口(global window)


  • window方法接受的输入参数是一个 WindowAssigner


  • WindowAssigner负责将每条输入的数据分发到正确的window中


  • Flink提供了通用的 WindowAssigner


  • 创建不同类型的窗口


- 滚动时间窗口(tumbling time window)
  .timeWindow(Time.seconds(15))
- 滑动事件窗口(sliding time window)
  .timeWindow(Time.seconds(15), Time.seconds(5))
- 会话窗口(session window)
  .window(EventTimeSessionWindows.withGap(Time.minutes(10)))
- 滚动计数窗口(tumbling count Window)
  .countWindow(5)
- 滑动计数窗口(sliding count window)
  .countWindow(10,2)


窗口函数


window function 定义了要对窗口中收集的数据做的计算操作


  • 增量聚合函数(incremental aggregation functions)


每条数据到来就进行计算 保持一个简单的状态


  • 全窗口函数(full window functions)


先把窗口所有数据收集起来 等到计算的时候会遍历所有数据


其他可选API



  • .trigger()一触即发


定义了window什么时候关闭 触发计算并输出结果


  • .evitor 移除器


定义了移除某些数据的逻辑


  • .allowLateness()


允许处理迟到的数据


  • .sideOutputLateData()


将迟到的数据放入侧输出流


  • .sideOutputLateData()


将迟到的数据放入侧输出流



image.png


相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
4月前
|
数据安全/隐私保护 流计算
Flink的Interval Join是基于水印(Watermark)和时间窗口(Time Window)实现的
Flink的Interval Join是基于水印(Watermark)和时间窗口(Time Window)实现的
90 2
|
8月前
|
Java 流计算
Flink broadcast的用法
Flink broadcast的用法
79 0
|
SQL Java Maven
【Flink】小白级入门,Flink sql 的基础用法(下)
【Flink】小白级入门,Flink sql 的基础用法
295 0
|
SQL Java 大数据
【Flink】小白级入门,Flink sql 的基础用法(上)
【Flink】小白级入门,Flink sql 的基础用法
380 0
|
BI API 数据处理
带你理解并使用flink中的Time、Window(窗口)、Windows Function(窗口函数)
flink中,streaming流式计算被设计为用于处理无限数据集的数据处理引擎,其中无限数据集是指一种源源不断有数据过来的数据集,window (窗口)将无界数据流切割成为有界数据流进行处理的方式。实现方式是将流分发到有限大小的桶(bucket)中进行分析。flink 中的streaming定义了多种流式处理的时间,Event Time(事件时间)、Ingestion Time(接收时间)、Processing Time(处理时间)。
511 0
带你理解并使用flink中的Time、Window(窗口)、Windows Function(窗口函数)
|
存储 Java Apache
Flink Window 、Time(二)| 学习笔记
快速学习 Flink Window 、Time 。
122 0
|
BI API 数据处理
【Flink】(四)详解 Flink 中的窗口(Window)
【Flink】(四)详解 Flink 中的窗口(Window)
740 0
【Flink】(四)详解 Flink 中的窗口(Window)
|
API 流计算 Windows
关于Flink框架窗口(window)函数最全解析
在真实的场景中数据流往往都是没有界限的,无休止的,就像是一个通道中水流持续不断地通过管道流向别处,这样显然是无法进行处理、计算的,那如何可以将没有界限的数据进行处理呢?我们可以将这些无界限的数据流进行切割、拆分,将其得到一个有界限的数据集合然后进行处理、计算就方便多了。Flink中窗口(Window)就是来处理无界限的数据流的,将无线的数据流切割成为有限流,然后将切割后的有限流数据分发到指定有限大小的桶中进行分析计算。
关于Flink框架窗口(window)函数最全解析
|
存储 缓存 数据处理
|
存储 分布式计算 测试技术
彻底搞清Flink中的Window
在流处理应用中,数据是连续不断的,因此我们不可能等到所有数据都到了才开始处理。当然我们可以每来一个消息就处理一次,但是有时我们需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户点击了我们的网页。在这种情况下,我们必须定义一个窗口,用来收集最近一分钟内的数据,并对这个窗口内的数据进行计算。
439 0
彻底搞清Flink中的Window

热门文章

最新文章