Flink窗口类型及使用详解

【Flink】各种窗口的使用(处理时间窗口、事件时间窗口、窗口聚合窗口) streaming流式计算是一种被设计用于处理无限数据集的数据处理引擎,而无限数据集是指一种不断增长的本质上无限的数据集,而window是一种切割无限数据为有限块进行处理的手段。Window是无限数据流处理的核心,Window将一个无限的stream拆分成有限大小的”buckets”桶,我们可以在这些桶上做计算操作。ProcessFunction:不分流直接聚合,不可以使用定时器和状态变量,因为其没有经过keyBy,定时器和状态变量都是针对key的,只有processElement。 阅读详情

在 Apache Flink 中,窗口(Window) 是将无界数据流划分为有限块进行处理的核心机制,主要用于聚合(如 sum、avg、count)或复杂事件处理。Flink 提供了丰富的窗口类型,主要分为两大类:


一、按驱动方式分类(Keyed Stream 使用)

1. 时间窗口(Time Windows)
  • 滚动时间窗口 (Tumbling Time Windows)

    • 固定长度、不重叠的窗口。
    • 示例:每5分钟统计一次销售额。
    • 代码:
      .window(TumblingEventTimeWindows.of(Time.minutes(5)))
      
  • 滑动时间窗口 (Sliding Time Windows)

    • 固定长度、可重叠的窗口(需指定窗口大小和滑动步长)。
    • 示例:每1分钟输出过去5分钟内的访问量。
    • 代码:
      .window(SlidingEventTimeWindows.of(Time.minutes(5), Time.minutes(1)))
      
  • 会话窗口 (Session Windows)

    • 动态长度,根据数据活跃度划分(不活跃间隔触发关闭)。
    • 示例:用户连续操作间隔超过10分钟则关闭会话。
    • 代码:
      .window(EventTimeSessionWindows.withGap(Time.minutes(10)))
      

2. 计数窗口(Count Windows)
  • 滚动计数窗口 (Tumbling Count Windows)

    • 固定元素数量、不重叠。
    • 示例:每100个点击事件统计一次。
    • 代码:
      .countWindow(100)
      
  • 滑动计数窗口 (Sliding Count Windows)

    • 固定元素数量、可重叠(需指定窗口大小和滑动步长)。
    • 示例:每50个新事件触发一次最近100个事件的统计。
    • 代码:
      .countWindow(100, 50)
      

二、特殊窗口类型

1. 全局窗口(Global Window)
  • 将所有数据分配到单个窗口,需自定义触发器(Trigger)决定何时计算。
  • 适用于自定义窗口逻辑(如基于业务规则触发)。
  • 代码:
    .window(GlobalWindows.create())
    
2. 增量聚合窗口(通过 reduce() / aggregate() 优化)
  • 使用 ReduceFunction 或 AggregateFunction 在窗口内增量计算,降低状态开销。
  • 示例:实时更新每分钟的销售额总和。
  • 代码:
    .window(...).reduce(new MyReduceFunction())
    
3. ProcessFunction 底层窗口(非 Keyed 流)
  • 通过 ProcessFunction 或 KeyedProcessFunction 手动管理时间与状态,实现完全自定义窗口逻辑。

三、窗口分配器(Window Assigners)

创建窗口时需指定分配器,常见类型包括:

  • TumblingEventTimeWindows / TumblingProcessingTimeWindows
  • SlidingEventTimeWindows / SlidingProcessingTimeWindows
  • EventTimeSessionWindows / ProcessingTimeSessionWindows
  • GlobalWindows

四、窗口函数(Window Functions)

窗口分配后,需定义计算逻辑:

  1. 全量窗口函数
    • ProcessWindowFunction:访问窗口内全量数据及元信息(如窗口起止时间)。
  2. 增量聚合函数
    • ReduceFunction / AggregateFunction:逐条处理数据,高效但无法访问元信息。
  3. 组合使用
    • 增量聚合 + ProcessWindowFunction:兼顾效率与元信息访问(推荐)。

选择窗口的关键点

  1. 时间语义:根据业务选择 Event Time(事件时间)或 Processing Time(处理时间)。
  2. 数据特征:
    • 固定周期统计 → 滚动窗口。
    • 平滑移动统计 → 滑动窗口。
    • 用户行为分段 → 会话窗口。
  3. 性能需求:优先使用增量聚合(reduce/aggregate)。

示例代码(事件时间滚动窗口)

DataStream<T> stream = ...;
stream
  .keyBy(<key selector>)
  .window(TumblingEventTimeWindows.of(Time.seconds(30))) // 30秒滚动窗口
  .reduce(new MyReduceFunction()); // 增量聚合

掌握这些窗口类型后,可灵活应对实时计算的各类场景(如监控、风控、报表等)。如需深入某个窗口的细节或触发器(Trigger)、驱逐器(Evictor)等高级用法,可进一步探讨!

Flink四大基石之窗口(Window)使用详解 本文深入探讨 Flink 中高级 API 里窗口(Window)的相关知识,涵盖为什么需要窗口、其控制属性、应用代码结构、生命周期、分类,以及窗口函数的各类细节,并辅以实例进行讲解,旨在助力开发者透彻理解并熟练运用 Flink 的窗口机制处理流数据。 阅读详情

相关推荐

Flink 1.13+ 窗口TVF实战:3种窗口聚合与1个实时监控场景代码

本文深入解析Flink 1.13+窗口TVF的实战应用,重点介绍TUMBLE、HOP和CUMULATE三种窗口函数在实时数据处理中的使用场景和代码实现。通过一个完整的实时交易监控案例,展示如何利用窗口TVF技术进行高效聚合计算,提升流处理能力。文章还涵盖窗口偏移量控制、多级窗口聚合等高级技巧,帮助开发者掌握Flink窗口函数的核心优势。

weixin_30621711的博客 389

Flink中的窗口

本文主要介绍了窗口的分类以及各个窗口的API

m0_37689903的博客 3612

Flink系列之:窗口聚合的进阶应用与性能调优

本文深入探讨了Flink窗口聚合的进阶应用与性能调优策略。从窗口聚合的核心原理出发,详细解析了四大窗口类型的适用场景,并介绍了增量聚合函数与Local-Global两阶段聚合优化技术。通过实际案例分享生产环境中的调优经验,包括状态管理、资源分配和迟到数据处理等关键技巧,帮助开发者提升Flink窗口聚合的性能与可靠性。

weixin_34347651的博客 389

Flink窗口

文章目录窗口的概念窗口的分类按照驱动类型分类(1)时间窗口(2)计数窗口(Count Window)按照窗口分配数据的规则分类(1)滚动窗口(Tumbling Windows)(2)滑动窗口(Sliding Windows)(3)会话窗口(Session Windows)(4)全局窗口(Global Windows)窗口API概览按键分区窗口(Keyed)和非按键分区(Non-Keyed)代码中窗口API的调用窗口分配器(Window Assigners)1、时间窗口(1)滚动处理时间窗口(2)滑动处理时间

yingzi的技术博客 8802

Flink 翻滚窗口、滑动窗口、会话窗口核心区别

Flink 翻滚窗口、滑动窗口、会话窗口核心区别

luohualiushui1的专栏 1250

Flink的窗口操作详解:所有类型的窗口与示例

1.背景介绍 数据流处理(Data Stream Processing)是一种处理大规模、实时数据的技术,它的核心是将数据流(Stream)转换为结果。在大数据时代,实时数据处理成为了企业和组织的关键技能之一。Apache Flink是一个开源的流处理框架,它可以处理大规模、高速的数据流,并提供了丰富的数据处理功能。Flink的窗口操作是流处理中的一种

AI天才研究院 618

Flink窗口详解

一、Window类型 1、时间窗口(TimeWindow) (1)滚动时间窗口(Tumbling Window) 将数据依据固定的窗口长度对数据进行切分 特点:时间对齐,窗口长度固定,没有重叠 (2)滑动时间窗口(Sliding Window) 滑动窗口是固定窗口的更广义的一种形式,滑动窗口由固定的窗口长度和滑动间隔组成 特点:窗口长度固定,可以有重叠 (3)会话窗口(Se...

勇心在馨 3890

干扰管理学习日志4-------信道估计方法 LS(最小二乘)、MMSE(最小均方误差)

信道估计,就是从接收数据中将假定的某个信道模型的模型参数估计出来的过程。如果信道是线性的话,那么信道估计就是对系统冲激响应进行估计。需强调的是信道估计是信道对输入信号影响的一种数学表示,而“好”的信道估计则是使得某种估计误差最小化的估计算法。本文主要讲述非盲信道估计中的LS估计和MMSE估计。LS全称为,即估计的信道参数与实际信道参数的差,进行平方求和后得到的误差累积最小。MMSE估计是LS估计的改进,在LS估计的最终结果的基础上乘以加权矩阵,使之与实际信道参数更为接近。

taiyuezyh的博客 1万+

窗口的类型_Flink的窗口类型详解

这是我的第87篇原创窗口函数真奇妙,聚合计算快又好,数据分析宝中宝,表哥表妹不能少,不!能!少!在我刚入行的时候,还不懂啥窗口函数,想出一张报表那叫一个费劲啊,各种自关联、行转列、列转行玩的不亦乐乎。后来知道有个叫“窗口函数/聚合函数”的东西,简直把我惊呆了,感觉好几年的功夫都白练了。之前给大家分享过Hive的窗口函数全解,点击查看:【面试必问】窗口函数全解-HIVE。无限数据流的统计问...

weixin_29865939的博客 866

路径规划:D*Lite寻路算法详解

D*Lite详解目录

mkr67n的博客 2万+

使用 Unity Sentis 和 Compute Shader,det_10g.onnx 进行高效人脸五官定位

在计算机视觉领域,人脸五官定位是一个重要的任务。本文将介绍如何使用 Unity Sentis 和 Compute Shader,结合模型,实现高效的人脸五官定位。我们将详细讲解每一步骤,并提供完整的代码示例。

m0_55632444的博客 2394

Flink的窗口类型详解

这是我的第87篇原创窗口函数真奇妙,聚合计算快又好,数据分析宝中宝,表哥表妹不能少,不!能!少!在我刚入行的时候,还不懂啥窗口函数,想出一张报表那叫一个费劲啊,各种自关联、行转列、列转行玩...

weixin_52346300的博客 502

腾讯会议+OBS虚拟摄像头:解决多人屏幕共享的终极指南(附常见问题排查)

本文详细介绍了如何利用OBS虚拟摄像头技术,解决腾讯会议中多人屏幕共享的痛点。通过将OBS作为视频混流中心,可以突破腾讯会议单屏共享的限制,实现多屏幕、多窗口内容的同步展示,并提升演示的专业度。文章涵盖了Windows与Linux双平台的配置步骤、高阶场景搭建以及常见问题(如黑屏、画中画)的排查方法,是团队协作与专业演示的实用指南。

i8j9k0l1的博客 931

hive 窗口函数_Flink的窗口类型详解

这是我的第87篇原创窗口函数真奇妙,聚合计算快又好,数据分析宝中宝,表哥表妹不能少,不!能!少!在我刚入行的时候,还不懂啥窗口函数,想出一张报表那叫一个费劲啊,各种自关联、行转列、列转行玩的不亦乐乎。后来知道有个叫“窗口函数/聚合函数”的东西,简直把我惊呆了,感觉好几年的功夫都白练了。之前给大家分享过Hive的窗口函数全解,点击查看:【面试必问】窗口函数全解-HIVE。无限数据流的统计问...

weixin_39611047的博客 330

Claude Code 使用 OpenAI Codex(GPT-5.3-Codex)完整配置教程

通过 LiteLLM 可以让 Claude Code 调用任何模型,包括:OpenAIDeepSeekGemini本地模型↓↓优点:不依赖 Anthropic API可自由切换模型支持统一 AI Gateway这种“LLM Gateway 架构”正在成为 AI 开发工具的主流实践。

Jacobe_zhao的博客 1万+

STM32CubeMX配置FSMC驱动外部SRAM全流程详解

FSMC(灵活静态存储控制器)是STM32实现高速并行外部存储扩展的核心外设,其本质是将片外SRAM地址空间映射为CPU可直接读写的内存区域。原理上依赖于精确的时序寄存器配置(如BTRx)、GPIO复用功能启用及AHB3总线时钟同步机制,技术价值在于免DMA搬运的零拷贝访问能力与确定性低延迟。典型应用场景包括工业HMI缓存、医疗设备实时数据采集、嵌入式图形加速等对带宽和确定性要求严苛的系统。本文围绕STM32F407ZG平台,结合STM32CubeMX工程化配置、硬件信号完整性设计与HAL库底层映射逻辑,系

weixin_34718952的博客 232

Flink 窗口:流处理的核心利器

在 Flink 中,窗口是一种将无界数据流切分为有限的、可管理的数据块的机制。它就像是一个 “数据收集器”,按照一定的规则收集数据流中的元素,当满足特定条件(如达到时间间隔或元素数量)时,对收集到的数据进行处理。窗口的主要作用在于对无界数据流进行分段处理,使得我们能够在流数据上执行基于时间或数据量的聚合、统计等操作。通过窗口,我们可以将连续的数据流按照时间维度(如每小时、每天)或数据量维度(如每 100 条数据)进行分组,从而对每个分组内的数据进行独立的计算和分析。

weixin_41870061的博客 1168

使用 MATLAB/Simulink 构建一个 基于神经网络控制的单相并网逆变器系统

单相并网逆变器广泛应用于户用光伏小型储能和电动汽车V2G等场景。其核心控制目标是实现高质量的并网电流,即电流与电网电压同频同相(单位功率因数),且总谐波畸变率 (THD)极低。非线性因素:电力电子器件的开关死区非线性电感寄生参数。参数不确定性:滤波器元件(L, C)的老化温漂。电网扰动:电压谐波频率波动不平衡。模型依赖性:PI、PR等控制依赖于精确的系统模型,模型失配导致性能下降。动态响应:在光照突变(光伏)或负载突变(储能)下,需快速、无超调地响应。

xiaoheshang_123的博客 274

flink2

一、流处理API 显示数据类型:.var---->value上specify type (一)source (二)Transform【转换算子】 1、简单转换算子【DataStream ->DataStream】:a、mapb、flatMap:根据旧集合生成一个新的集合 例: flatMap(List(1,2,3))(i => List(i,i))。结果是List(1,1,2,2,3,3) List("a b", "c d").flatMap(line => line.split("

sunxj1222的博客 362

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Flink事件时间与窗口操作实战指南

这段代码展示了如何使用Apache Flink进行流处理,特别是基于事件时间(EventTime)的数据处理。代码的主要步骤包括环境设置、数据源读取、数据转换、窗口操作以及结果输出。通过设置事件时间语义、生成水位线和处理乱序数据,代码实现了对传感器数据的实时处理。窗口操作包括滚动窗口、滑动窗口和会话窗口,允许处理迟到数据并将其写入侧输出流。最终,代码展示了如何对窗口内的数据进行聚合,并输出结果。这段代码是学习Flink流处理的基础示例,涵盖了事件时间、水位线、窗口操作等核心概念。

渣渣盟的博客 3735

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Flink 1.13+ 窗口TVF实战:3种窗口聚合与1个级联窗口案例详解

本文深入解析Flink 1.13+窗口TVF(表值函数)的实战应用,涵盖滚动窗口、滑动窗口和累积窗口3种聚合方式,并详细演示级联窗口的实现案例。通过SQL示例和性能优化建议,帮助开发者掌握实时数据处理中的窗口计算技术,提升流处理效率。

weixin_34037515的博客 333

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Flink基础概念&编程模型

Flink基础概念&编程模型 Flink程序的基础构建模块是流(Streams)与转换(transformations) 每一个数据流起始于一个或者多个source,并终止于一个或者多个sink 下面是一个由Flink程序映射为Streaming Dataflow的示意图 并行数据流示意图 时间窗口: 流上的聚合需要由窗口来划定范围,比如,计算过去的5分钟,或者最后10...

zhangvalue的博客 755

flink窗口类型

你可以通过实现Trigger// 实现相关方法,如 onElement, onEventTime, onProcessingTime 等Flink 的窗口操作提供了极大的灵活性,允许开发者根据具体需求选择合适的时间或计数窗口,或者实现基于事件驱动的复杂逻辑。通过合理选择和使用这些窗口类型和触发器,可以有效地处理各种流数据场景。

abcy071213的博客 171

通过代码形式介绍Flink的窗口类型

滚动窗口适用于固定时间间隔的聚合操作。滑动窗口适用于需要更细粒度分析的场景。会话窗口适用于处理基于活动间隔的数据。选择合适的窗口类型取决于具体的应用场景和数据处理需求。

xuweilin的博客 407

Flink时间窗口详解

在使用 Flink 时间窗口时,合理选择事件时间、处理时间或摄入时间,能够满足不同业务场景下对时间语义的需求。通过实际的代码示例,我们也看到了如何在 Flink 中实现时间窗口操作,从数据源的定义、数据的转换,到窗口的分配和计算,每一步都紧密相连,共同完成对数据流的实时处理和分析。与其他流处理框架相比,Flink 在时间窗口处理方面展现出了强大的优势,无论是对事件时间的原生支持,还是丰富灵活的窗口操作,都使得它能够在复杂的业务场景中脱颖而出。

m0_71836706的博客 1049
上一篇: 事实表与维度表的区别解析
下一篇: Flink窗口触发器类型及实现原理
走过冬季
博客等级 码龄9年 1609粉丝 341原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值