Flink dataStream,如何开窗,如何进行窗口内计算

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

目录

开窗方式

windowAll()

window()

窗口类型

基于时间

基于数量

开窗后的处理函数

全量聚合函数(也叫窗口函数)

增量聚合函数

增量聚合函数携带一个全量聚合函数


开窗方式

windowAll()

对于没有keyBy的数据流

window()

对于KeyBy后的数据流

窗口类型

基于时间

事件时间语义

滑动

滚动

会话

处理时间语义

滑动

滚动

会话

基于数量

滑动

滚动

开窗后的处理函数

开完窗口后数据的处理方式,首先要对数据进行聚合,聚合的方式分两种,一种全量聚合,一种增量聚合

全量聚合函数(也叫窗口函数)

  • process 记住这一个就够了
  • apply process效果一样,但是没有process全面

每个窗口的所有数据调用一次该函数,在这个函数中有个迭代器,可以获取当前窗口的所有数据

优点:可以获取整个窗口的全量数据,对数据的可处理性更强,比如排序。而且最重要的是他能获取当前的窗口信息

缺点:资源占用率高,效率低

增量聚合函数

  • aggrgate 输入可以与输出类型不一致,api复杂
  • reduce 输入和输出类型必须一致,api简单
    • max\maxBy
    • min\minBy
    • sum

每条记录调用一次该函数,这个函数中总有上一条和当前条两个数据

优点:资源占用率低,效率高

缺点:无法进行复杂逻辑的处理,无法获取窗口信息

增量聚合函数携带一个全量聚合函数

增量聚合的缺点过于明显,但是平时的业务对于全量聚合函数的需求又没这么高,因此Flink提供了一个增量聚合函数携带全量聚合函数的混合使用API,数据处理逻辑还是走增量聚合的逻辑,省资源、效率高,但是一个窗口的数据处理完成后,会调用一次全量聚合函数。又完美了应用了全量聚合函数的特点,可以获取窗口时间。

在这里插入图片描述
其中全量窗口函数有两个WindowFunction 和ProcessWindowFunction,两种功能一致,后者更强大,官方推荐ProcessWindowFunction

https://blog.youkuaiyun.com/java_creatMylief/article/details/142514640icon-default.png?t=O83Ahttps://blog.youkuaiyun.com/java_creatMylief/article/details/142514640?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522DD9F04EF-8E83-4C08-BE8F-EF1D7CE719FD%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=DD9F04EF-8E83-4C08-BE8F-EF1D7CE719FD&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-6-142514640-null-null.nonecase&utm_term=%E6%BB%9A%E5%8A%A8&spm=1018.2226.3001.4450

Flink-算子-窗口 窗口(Window)是的。窗口可以将数据流。本文的重心将放在 Flink 如何进行窗口操作以及开发者如何尽可能地利用 Flink 所提供的功能。下面展示了 Flink 窗口在keyed和non-keyed上使用的基本结构。我们可以看到,这两者唯一的区别仅在于:keyed streams 要调用keyBy(...)后再调用, 而non-keyed streams 只用直接调用。留意这个区别,它能帮我们更好地理解后面的内容Java/Scala上面方括号([…])中的命令是可选的。 阅读详情

相关推荐

Flink实时计算核心原理与实践:从时间状态到流处理架构深度解析

流处理技术是处理海量、高速、持续数据流的核心架构范式,其核心在于对无界数据的有序处理与状态管理。其基本原理是通过事件时间、水位线等机制处理乱序数据,并借助状态管理和检查点机制保障计算的一致性与容错性。这项技术的核心价值在于实现从传统批处理的事后分析到实时流处理的事中决策的跨越,支撑低延迟、高吞吐的数据处理需求。典型应用场景包括实时风控、实时监控、实时推荐和实时ETL等。本文以Apache Flink为例,深入剖析其四大基石——时间、状态、检查点和窗口,并结合生产环境中的状态后端选型与检查点调优等热词,提供从

weixin_30323631的博客 346

Flink中的时间和窗口

窗口、时间语义、水位线、双流Join

m0_70949976的博客 1777

flink的水位线和窗口

水位线在事件时间的世界中充当时钟的角色,是唯一的时间尺度。窗口闭合和定时器触发等操作都依赖水位线的大小来决定。水位线是一种特殊的事件,由程序员通过编程插入到数据流中,并随着数据流向下游传递。水位线的默认计算公式为:水位线 = 观察到的最大事件时间 – 最大延迟时间 – 1毫秒。不同算子可能看到不同大小的水位线,因为下游算子可能未接收到上游算子的水位线,导致下游算子的时钟落后于上游算子。耗时较长的操作可能阻塞水位线的传播,从而影响下游算子的计算和定时器触发。

机器之心 272

Flink中的窗口

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

m0_37689903的博客 3612

Flink原理与实战(java版)#第4章 Flink的时间与窗口(第二节窗口(二))

介绍了Flink的窗口函数、触发器、允许的延迟以及如何使用窗口

alanchanchn的专栏 1万+

DINOv3实战指南:如何利用零样本视觉模型革新工业质检

本文详细介绍了如何利用DINOv3零样本视觉模型革新工业质检流程。通过无需标注数据的自监督学习技术,DINOv3能快速部署高精度检测系统,显著降低成本和提升效率。文章涵盖模型选型、数据准备、实时检测优化及典型行业解决方案,为工业质检提供革命性AI实践指南。

ansible6ops的博客 124

FlinkSql,如何开窗,如何进行窗口内计算

将表应用一下TVF(table-valued function )函数,返回一个开窗的表,开窗TVF函数目前有三个。直接查询,报错,对于开窗后的表需要用,window_start,window_end。以最简单的Tumble,滚动窗口作为例子,无论什么开窗方式,查询方法是一样的。问题:每10分钟求最近10分钟交易额最大的前2条记录。问题:每10分钟求最近10分钟的总交易额。

javaMylife的博客 2499

比亚迪开放平台接口实战:车身状态监测与智能车联应用开发

本文详细介绍了如何利用比亚迪开放平台的车身状态接口进行智能车联应用开发。通过核心类BYDAutoBodyworkDevice,开发者可以安全获取车辆VIN、车门车窗状态、蓄电池电压、方向盘转角等实时数据,并利用监听器实现状态实时响应。文章提供了从SDK集成、接口调用到典型应用场景(如远程车况检查、车队管理)的完整实战指南,助力开发者快速构建基于比亚迪车辆数据的创新应用。

weixin_29176179的博客 728

【无标题】

可以看到,在Flink的流式计算中,数据都是以DataStream的形式来表示。而对流数据的计算,基本上都是一个先分流后合流的过程。而window开窗函数可以理解为是一种更高级的分流的方法。Window将一个无限的流式数据DataStram拆分成有限大小的"Bucket"桶,通过对桶中数据的计算最终完成整个流式数据的计算。他也是处理流式数据时的一种常见的方法,在KafkaStream、Spark Streaming等这些流式框架中都有。 6.1 Window类型 Flink中的Window整体上可以分为两类

weixin_45365187的博客 180

对CryptoDriver里密钥格式定义的探索(1)

一入网络安全才发现深似海,传统汽车MCU码农转型之路异常艰难。在CP AUTOSAR中的CryptoDriver SWS对密钥格式的需求来源于RFC,其中要求了RSA、ECC、SHE等key material的格式。再往下看,我就有些迷糊了,例如关于RSA Private Key的OCTEE STRING格式根据IETF RFC8017,Public Key又得根据RFC5280,完全不得其解。所以今天先从生成密钥对,并对其进行解析开始,一步一步拆解。

认真搞搞汽车MCU 529

GPU服务器维修全流程:从检测到解锁

《GPU服务器维修维保全流程指南》摘要:本文系统介绍GPU服务器从检测到解锁的完整维修流程。检测环节包含物理检查(氧化层、散热、PCB板)和电子诊断(ECC报错率、电源波动等);核心维修技术涵盖PCB板修复(微孔镀铜、BGA返修)和芯片级维修(成功率78-92%);解锁验证阶段包括性能解锁(VBIOS重写)和72小时稳定性测试。文末提供故障速查表及维保建议,强调定期除尘可降低38%故障率,推荐环境粉尘浓度控制在≤0.3mg/m³。

2401_89353317的博客 891

Flink DataStream窗口机制

1 Windows(窗口) Windows是处理无限流的核心。Windows将流分成有限大小的buckets,我们可以在其上应用计算 1.1 Keyed Windows keyBy(...).window(...) call for the keyed streams 拥有keyed streams将使窗口化计算可以由多个任务并行执行,因为每个逻辑keyed streams都可以独立于其余逻辑流...

2.wa 946

数仓建模:维度表合并时,如何处理可能出现的数据冲突?

通过以上方法,可以有效地处理维度表合并时可能出现的数据冲突,确保合并后的数据完整性、一致性和准确性,满足业务需求和数据仓库的性能要求。在合并过程中,需要根据实际情况选择合适的处理方法,并进行充分的测试和验证。(2)实战中总结的SQL技巧,帮助SQLBOY在SQL语言上有质的飞越,无论你应对业务难题及面试都会游刃有余【如果您觉得本文还不错,对你有帮助,那么不妨可以关注一下我的数字化建设实践之路专栏,这里的内容会更精彩。技巧总结,让你认识不一样的数仓。,数据库会抛出异常,可根据异常处理机制解决。

石榴姐yyds 1133

Flink专题四:Flink DataStream 窗口介绍及使用

由于工作需要最近学习flink 现记录下Flink介绍和实际使用过程 这是flink系列的第四篇文章 Flink DataStream 窗口介绍及使用窗口介绍时间窗口翻滚窗口(数据以一个时间断为节点不会有重复)滑动窗口会话窗口全局窗口窗口函数减少函数聚合函数进程窗口函数 窗口介绍 Flink 认为 Batch 是 Streaming 的一个特例,所以 Flink 底层引擎是一个流式引擎,在上面实现了流处理和批处理。而窗口(window)就是从 Streaming 到 Batch 的一个桥梁。Flink .

beyond的博客 1900

NR PUCCH(一) PUCCH format 0/1

NR中PUCCH物理信道用来发送上行控制信息Uplink Control Information(UCI),当然UCI也可以在PUSCH上发送。UCI 内容包括:CSI,HARQ ACK/NACK ,SR 及上述三者的组合信息。 那先看下PUCCH format ,序列的生成及资源映射的相关内容。 NR中支持5种格式PUCCH,根据PUCCH format占用时域符号长度分为短PUCCH(1-2个符号,PUCCH 0/2)和长PUCCH(4-14个符号,PUCCH1/3/4)。使用短PUCCH 能够支

asd199086的博客 6060

Test-Time Adaptation Induces Stronger Accuracy and Agreement-on-the-Line

TTA不管是否提高了OOD的泛化性都增强了线性的趋势,TTA的初始目的是为了增强OOD的表现,一个人可能会觉得TTA使得ACL更强的原因是他消除了ID和OOD之间的差距,因此所有模型间ID vs OOD的准确率接近于y=x这条线,但是实际上这个解释不能够反映我们的经验发现,因为虽然TTA将分布之间的偏移简化为一种放缩的分布,但是这个放缩的因子幅值可能很大,也就是α<<1但是r>>1,这就会导致很偏离y=x这条线,而且理论分析也是,虽然ID和OOD的差距很大,但是线性关系还在。

m0_62673638的博客 149

flink中窗口和水位线-基于DataStream API

在之前的文章中,有在FllinkSQL来实现窗口和水位线—flink中水位线和窗口的工作原理,这次使用DataStream API的方式来实现窗口和水位线,

weixin_44437669的博客 698

Qt代码-军用仿真系统基础框架

ui->mapClickLabel->setText(QString("地图点击:(%.1f, %.1f)米").arg(worldPos.x()).arg(worldPos.y()));emit simulationEvent(QString("添加实体: %1 (ID: %2)").arg(attr.name).arg(entity.id()));// 像素坐标→世界坐标(米)

寒寒豆豆软件公司的博客 170

打开窗,让 Flink 驻进

最近天气时好时坏,忽冷忽热,感冒的人有点多,注意防寒保暖。笔者讲解 Apache Flink 培训系列课程已经有一段时间了,一些读者反馈完成了所有实验并应用到生产实际案例,这真的非常棒,...

DataFlow范式 472

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Flink流式计算从入门到实战 三

文章目录四、Flink DataStream API1、Flink程序的基础运行模型2、Environment 运行环境3、Source3.1 基于File的数据源3.2 基于Socket的数据源3.3 基于集合的数据源3.4 从Kafka读取数据3.5 自定义Source4、Sink4.1 输出到到控制台4.2 输出到文件4.3 输出到Socket4.4 输出到kafka4.5 自定义Sink5、Transformation5.1 Map5.2 FlatMap5.3 filter 过滤5.4 keyBy5

roykingw的专栏 2608

Camera2Demo

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

Flink DataStream Keyed和Non-Keyed窗口、WindowAssigner、窗口生命周期、窗口函数、迟到数据和窗口结果的处理

目录1. Keyed窗口(window)、Non-Keyed窗口(windowAll)2. WindowAssigner(基于时间)2.1 必须指定Time.hours(-8L)的offset2.2 Tumbling Windows2.3 Sliding Windows2.4 Session Windows2.5 Global Windows3. WindowAssigner(基于数据)4. 认识窗口的生命周期5. 认识窗口函数5.1 ReduceFunction和ProcessWindowFunction

Bulut0907 1303

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Flink 多流转换 (四) 窗口联结(Window Join)

文章目录窗口联结的调用窗口联结实例 Flink 为这种场景专门提供了一个窗口联结(window join)算子,可以定义时间窗口,并将两条流中共享一个公共键(key)的数据放在窗口中进行配对处理。类似于SQL中的Join 窗口联结的调用 窗口联结在代码中的实现,首先需要调用 DataStream 的.join()方法来合并两条流,得到一个 JoinedStreams;接着通过.where()和.equalTo()方法指定两条流中联结的 key;然后通过.window()开窗口,并调用.apply()传入联结

weixin_45417821的博客 2320

flink入门基础知识整理(持续更新)

本文为FLink入门基础知识整理,包括概念、APi、核心抽象等

weixin_42396063的博客 3848

Flink1.17实战教程(第三篇:时间和窗口)

在Flink中,用来衡量事件时间进展的标记,就被称作“水位线”(Watermark)。具体实现上,水位线可以看作一条特殊的数据记录,它是插入到数据流中的一个标记点,主要内容就是一个时间戳,用来指示当前的事件时间。而它插入流中的位置,就应该是在某个数据到来之后;这样就可以从这个数据中提取时间戳,作为当前水位线的时间戳了。1)周期性水位线生成器(Periodic Generator)周期性生成器一般是通过onEvent()观察判断输入的事件,而在onPeriodicEmit()里发出水位线。

moments的博客 2439

窗口 API 概览

定义窗口分配器(Window Assigners)是构建窗口算子的第一步,它的作用就是定义数据应该被“分配”到哪个窗口。而窗口分配数据的规则,其实就对应着不同的窗口类型。所以可以说,窗口分配器其实就是在指定窗口的类型。窗口分配器最通用的定义方式,就是调用 window()方法。这个方法需要传入一个WindowAssigner 作为参数,返回 WindowedStream。如果是非按键分区窗口,那么直接调用。

m0_73814022的博客 1234

【深入浅出flink】第9篇:详细解读flink中GlobalWindows、window、windowAll的区别与联系

刚学习flink的同学可能会有疑惑,GlobalWindows、window、windowAll到底有什么关系?GlobalWindows和windowAll的并行度都是1吗?window和windowAll的区别是什么?看了这篇文章,你将完全明白它们之间的区别与联系。

雷恩Layne 6984
上一篇: FlinkSql,如何开窗,如何进行窗口内计算
下一篇: flink广播流与主数据流加载顺序问题,怎么保证字典数据优先加载
JNWsong
博客等级 码龄9年 287粉丝 204原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值