flink将窗口增量聚合算子和窗口全量聚合算子连用

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

在flink中,开窗后的聚合方式有两种,增量聚合和全量聚合,前者处理速度快,不积压数据,但是拿不到窗口中全量的信息,后者积压数据但是能拿到窗口内全量的数据。两者各有利弊。

因此滚动聚合窗口和全量聚合窗口连用,即利用了滚动聚合性能好,资源占用率低的优点,又能拥有全量窗口函数中的窗口信息。

此时的增量聚合函数中只每次处理1条数据,当所有的数据在增量函数完成后,最后再经过一次窗口函数,因此窗口全量聚合算子中只有一条reduce聚合后的数据。

winodw().reduce(ReduceFunction(),ProcessWindowFunction())

// 开窗,Tumbling(10s)
        SingleOutputStreamOperator<TrafficPageViewBean> unionWateredKeyedReduced = unionWateredKeyed.window(TumblingEventTimeWindows.of(Time.seconds(10)))
                .reduce(new ReduceFunction<TrafficPageViewBean>() {
                    @Override
                    public TrafficPageViewBean reduce(TrafficPageViewBean t0, TrafficPageViewBean t1) throws Exception {
                        t1.setSvCt(t1.getSvCt() + t0.getSvCt());
                        t1.setPvCt(t1.getPvCt() + t0.getPvCt());
                        t1.setDurSum(t1.getDurSum() + t0.getDurSum());
                        t1.setUjCt(t1.getUjCt() + t0.getUjCt());
                        t1.setUvCt(t1.getUvCt() + t0.getUvCt());
                        return t1;
                    }
                }, new ProcessWindowFunction<TrafficPageViewBean, TrafficPageViewBean, Tuple4<String, String, String, String>, TimeWindow>() {
                    @Override
                    public void process(Tuple4<String, String, String, String> tp4, Context context, Iterable<TrafficPageViewBean> iterable, Collector<TrafficPageViewBean> collector) throws Exception {
                        /*
                            将滚动聚合窗口和全量聚合窗口连用,即利用了滚动聚合性能好,资源占用率低的优点,又能拥有全量窗口函数中的窗口信息
                            此时的迭代器中只有1条:当所有的数据reduce完成后在经过一次窗口函数,因此窗口函数中只有一条reduce聚合后的数据
                         */
                        TrafficPageViewBean reduced = iterable.iterator().next();

                        // 组装窗口字段
                        long start = context.window().getStart();
                        long end = context.window().getEnd();

                        reduced.setStt(DateFormatUtils.toYmdHms(start));
                        reduced.setEdt(DateFormatUtils.toYmdHms(end));
                        // 置于一个新的ts作为去重比较字段
                        reduced.setTs(System.currentTimeMillis());
                        // 发送出去!!!
                        collector.collect(reduced);
                    }
                });

Flink中增量聚合函数和全量聚合函数的关系 在上一篇博客当中,我们对Window的整体分类即使用进行了介绍,今天我们将从另外一个角度对Window进行分类,这个角度就是聚合角度。 Window的聚合操作分为2种:一种是增量聚合,另外一种是全量聚合,增量聚合是指窗口内每进入一条数据就计算一次,而全量聚合是指在窗口 被触发的时候才会对窗口内的所有数据进行一次计算。 (1)增量聚合 常见的增量聚合函数有:reduce(reduceFunction)、aggregate(aggregateFunction)、sum()、min()、max()。 增量聚合. 阅读详情

相关推荐

flink重温笔记(八):Flink 高级 API 开发——flink 四大基石之 Window(涉及Time)

>前言:今天是学习 flink 的第八天啦!学习了 flink 高级 API 开发中四大基石之一: window(窗口)知识点,这一部分只要是解决数据窗口计算问题,其中时间窗口涉及时间,计数窗口,会话窗口,以及 windowFunction 的各类 API,前前后后花费理解的时间还是比较多的,查阅了很多官方文档,我一定要好好掌握! >Tips:二月底了,春天来临之际我要再度突破自己,加油!

m0_60732994的博客 2042

Flink系列Table API和SQL之:开窗Over聚合

Flink系列Table API和SQL之:开窗Over聚合

zhengzaifeidelushang的博客 1756

Flink 窗口处理函数 WindowFunction

在之前的文章中我们已经了解了 Flink 的,并介绍了其中涉及的组件:WindowAssigner、WindowFunction、Trigger、Evictor。在中我们知道可以通过不同类型的窗口分配器 WindowAssigner 将元素分配到窗口中。在指定 WindowAssigner 后,需要在每个窗口上指定我们要执行的计算逻辑,这就是窗口函数(WindowFunction)的责任。一旦系统确定窗口准备好处理数据,窗口函数就会被调用来处理窗口中的每个元素。

SmartSi 609

Flink系列之:窗口聚合

和普通的 GROUP BY 子句一样,包含分组窗口函数的 GROUP BY 子句的查询会对各组分别计算,各产生一个结果行。使用 GROUPING SETS 的窗口聚合要求 window_start 和 window_end 列必须位于 GROUP BY 子句中,但不能位于 GROUPING SETS 子句中。使用 CUBE 的窗口聚合要求 window_start 和 window_end 列必须位于 GROUP BY 子句中,但不能位于 CUBE 子句中。CUBE 是用于指定常见类型的分组集的简写符号。

zhengzaifeidelushang的博客 1098

告别信息过载:我是如何用Feedly RSS阅读器打造个人专属信息流的(附Chrome插件使用技巧)

本文分享了如何利用Feedly RSS阅读器有效管理信息过载,打造个人专属信息流的方法。通过科学组织订阅源、智能过滤和跨平台同步技巧,帮助用户从被动接收转为主动筛选,提升信息获取效率。特别推荐使用Feedly的Chrome插件和AI过滤功能,实现高效的信息管理。

weixin_42526015的博客 357

实战解析:在.NET中实现Dify API流式请求与响应的完整方案

本文详细解析了在.NET应用中对接Dify API时实现流式请求与响应的完整方案。针对传统后端“接收完才返回”的痛点,文章提供了基于ASP.NET Core的实战代码,通过配置HttpCompletionOption.ResponseHeadersRead和手动Flush响应流,构建高效的中转管道,确保AI回复能够像ChatGPT一样实时逐字推送到前端,显著提升用户体验。

weixin_29267307的博客 296

Flink窗口聚合案例(增量聚合、全量聚合)

上面我们time window和count window讨论了聚合,下面我们从另外一个角度对window进行分类,从聚合角度。 window的集合操作分为2种:一种是增量聚合,一种时候全量聚合,增量聚合是指窗口内每进入一条数据就计算一次,而全量聚合是指在窗口被处罚的时候才会对窗口内的所有数据进行一次聚合 1、增量聚合:窗口内每进入一条数据就计算一次 常见的增量聚合的函数有:reduce(reduceFunction)、aggregate(aggregateFunction)、sum()、mi..

有的话没说出来之前,你是他的主人,一旦说出来你就成了他的奴隶||想要干好事,别太把自己当人,别把别人太不当人||认识这个人就是开了一扇窗户,就能看到不一样的东西,听到不一样的声音,能让你思考、觉悟,这已经够了 5455

【硬件设计】_基于STM32单片机的智能台灯系统

智能台灯系统是一款多功能的智能照明设备,能够自动调节亮度、监测人体活动、感知环境光照,并具备定时和报警功能,极大提升了用户体验与功能的灵活性,主要包括以下功能:系统提供自动和手动两种模式以调节台灯亮度。在自动模式下,台灯会根据周围光强智能调整;而在手动模式下,用户可通过按键自行设置亮度。利用红外光电开关检测台灯与用户之间的距离,若距离过近,系统将发出报警提示。通过时钟模块设置定时提醒,并在OLED显示屏上显示当前时间,当达到设定的定时时间时,蜂鸣器将发出报警音。

2401_85381181的博客 1732

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

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

javaMylife的博客 2499

在摩尔线程 MTT S80 上使用 Ollama 进行 DeepSeek R1 蒸馏版模型推理

本文主要介绍了如何在摩尔线程 MTT S80 上通过 Ollama 快速完成DeepSeek R1 蒸馏系列模型的推理。

摩尔线程blog中心 3601

✨使用 vLLM + Docker 部署 Qwen3-Embedding-8B 并实现高效文本向量生成(附 `curl` 测试)

本文介绍了如何使用 vLLM 和 Docker 部署 Qwen3-Embedding-8B 嵌入模型服务,并通过标准 OpenAI 兼容接口进行调用和结果解析。如果你在部署中遇到任何问题,欢迎留言讨论!

用大模型重构生活:猫奴程序员的AI智能日常记录 6243

20250124 Flink 增量聚合 vs 全量聚合

以下通过对比 **增量聚合** 和 **全量聚合(ProcessWindowFunction)** 的工作机制,结合具体示例解释其原理和优势。| **场景** | **增量聚合** | **全量聚合** |Long sum = iterable.iterator().next();- **增量聚合**:仅保存聚合中间结果(如 `sum=100`, `max=50`)。

一條狗的博客 2220

Android TV开发:RecyclerView焦点控制实践与优化

在Android TV应用开发中,焦点控制是提升用户体验的关键技术。不同于移动端触摸交互,TV端通过遥控器方向键导航,需要精确的焦点管理机制。RecyclerView作为动态列表的核心组件,其焦点控制涉及视图复用、导航逻辑和视觉反馈等核心技术点。通过合理配置focusable属性、自定义焦点查找算法以及优化动画性能,开发者可以解决TV端常见的焦点跳转异常、视觉反馈延迟等问题。特别是在视频点播、智能家居控制等场景中,良好的焦点控制能显著提升操作效率。本文结合网格布局焦点环绕、分页加载焦点保持等实战案例,深入解

weixin_34195142的博客 469

Flink的Aggregate算子的用法

窗口聚合函数 如果定义了 WindowAssigner之后,下一步就可以定义窗口内数据的计算逻辑,这也就是 Window Function的定义。 Flink中提供了四种类型的 Window Function, 分别为ReduceFunction、AggregateFunction以及 ProcessWindowFunction,(sum和 max)等。 前三种类型的 Window Fucntion 按照计算原理的不同可以分为两大类: 一类是增量聚合函数:对应有 ReduceFunct...

weixin_46266718的博客 4964

【即插即用模块】注意力篇 | TGRS 2025 | MFA聚特征+HPDown保细节+HFF融层级,三大模块各司其职,性能翻倍!

本文介绍了MTMLNet网络中的三大核心模块:MFA(多阶段特征聚合)、HPDown(混合池化下采样)和HFF(分层特征融合)。MFA通过双尺度深度卷积和注意力机制增强特征提取能力;HPDown结合平均池化和最大池化,有效保留下采样过程中的特征信息;HFF采用三注意力机制实现自适应特征融合。这三个模块协同工作,在红外小目标检测与分割任务中取得了SOTA效果。实验表明,各模块在特征提取、信息保留和融合方面均优于传统方法,可灵活应用于各类视觉任务中。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 287

【25届数字IC秋招总结】面试经验13——豪威科技面试

25届数字ic面试记录———豪威科技

lalala0635的博客 363

Flink之窗口聚合算子

Flink窗口聚合算子

AnameJL的博客 1607

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Flink中Window Function(窗口函数)的三种类型对比及应用

Flink中窗口函数的使用主要包含增量聚合函数、全量窗口函数和增量聚合+全量窗口组合函数三种类型,本文将从该三种类型函数的特点、应用场景、对比和示例方面进行讲解。

专注于大数据领域相关技术推广、学习、交流和合作。 2131

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Flink窗口计算

Flink窗口计算

syb18810107241的专栏 1125

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Flink之窗口的使用(java)

Flink之窗口的使用 前言 我们前面其实一直都有在使用窗口,那么我们现在来针对窗口的各种类型做一个演示。 1.1 窗口简述 聚合事件(比如计数、求和)在流上的工作方式与批处理不同。比如,对流中的所有元素进行计数是不可能的,因为通常流是无限的(无界的)。所以,流上的聚合需要由 window 来划定范围,比如 “计算过去的5分钟” ,或者 “最后100个元素的和” 。window是一种可以把无限数据切割为有限数据块的手段。 1.2 窗口类型 tumbling window:滚动窗口 sliding w

fy1235的博客 1288

flink学习笔记3-flink窗口

flink窗口概述 将无界数据流划分成一个个的有界流,并在有界流中进行计算 flink时间分类 处理时间Processing time:当前算子获取到流中数据的时间戳, 事件时间Event time: 最原始数据中自身携带的时间,如从数据库读取数据,而数据库表中有一个字段为updatetime,那么这个字段就可以作为事件时间 获取时间Ingestion time: flink从source中获取数据的时间戳 flink设置时间特征(全局设置) 时间特征的默认值为处理时间 env.setStreamTi

zhaocuit的博客 696

Flink时间语义和Flink Window

Flink时间语义和Flink Window1、Flink时间语义 1、Flink时间语义 Flink实时计算划分窗口时,如果使用时间作为划分窗口的依据,时间有不同的类型,分为Event Time、Ingestion Time、Processing Time。如下图所示: Event Time:是事件创建的时间。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink通过时间戳分配器访问事件时间戳。 Ingestion Time:是数据进入Flink的时间。

Tate的博客 618

ProcessWindowFunction算子单独使用性能较差,如何结合ReduceFunction和AggregateFunction算子结合使用

ProcessWindowFunction结合ReduceFunction、AggregateFunction使用的优化小技巧

Monstar_L的博客 748

Apache Flink 算子(Operator)深度解析

Flink算子(Operator)是流处理程序的基本计算单元,负责数据转换、聚合等操作,构成有向无环图(DAG)。核心概念包括并行度(Parallelism)和算子链(Operator Chain),前者决定并发度,后者优化性能。基础转换算子包含map、flatMap、filter和keyBy等。窗口算子分为Keyed和Non-Keyed两类,支持增量/全量聚合。状态算子(Stateful Operator)通过Keyed State维护状态,ProcessFunction提供底层功能如定时器和侧输出。双流

zfqzpp的专栏 1372

基于flink的Keyed的CountWindow聚合操作

上篇:基于flink的CountWindow算子的使用 增量聚合数据与量聚合数据的区别 增量聚合数据 :占用更小的空间、可以进行高效进行聚合 全量聚合数据:赞起来,窗口触发再进行处理 案例1:keyed的CountWindow的使用【增量聚合】 直接代码: package cn._51doit.flink.day04; import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.api

weixin_39868387的博客 410

flink窗口计算

有了事件时间,基于窗口的聚合(事件时间列上的一种特殊的分组和聚合),每个时间窗口是一个组,每一行数据可以属于多个窗口。的字符串不会触发窗口计算,同时,清除器会清理30秒之前的数据,比如,某一次输入后,到了30秒之后继续输出,会重新开始统计。因此,如果滑动窗口的步长小于窗口大小,则滑动窗口可以重叠。:滚动窗口分配器将每个元素分配给指定大小的窗口,滚动窗口具有固定的大小,并且不重叠。事件被窗口分配器分配到窗口后,接下来需要指定想要在每个窗口上执行的计算函数(即窗口函数),以便对窗口内的数据进行处理。

z1987865446的博客 1158
上一篇: java,zip压缩文件,指定目录结构
下一篇: flink timer定时器
JNWsong
博客等级 码龄9年 287粉丝 204原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值