当前位置: 首页 > news >正文

Flink-Window详细讲解-countWindow

一.countWindow和countWindowall区别

1.countWindow

如果您使用 countWindow(5),这意味着您将数据流划分成多个大小为 5 的窗口。划分后的窗口如下:

  • 窗口 1: [1, 2, 3, 4, 5]
  • 窗口 2: [6, 7, 8, 9, 10]

当每个窗口中的元素数量达到 5 时,将触发计算。这意味着窗口 1 中的计算会在处理 5 个元素后触发,窗口 2 中的计算会在处理 10 个元素后触发。

2.countWindowAll

假设您有一个数据流,其中的数据元素逐个增加:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

现在,我们使用 countWindowAll(5) 来观察这个数据流。

  1. 初始状态:当数据流中的元素数量达到 5 时,即 [1, 2, 3, 4, 5],将会触发第一次计算。

  2. 后续状态:现在,数据流中的元素数量已经超过 5 了,但由于 countWindowAll 会持续监视整个数据流,所以并不会立即触发第二次计算。数据流继续增加。

  3. 再次触发计算:当数据流中的元素数量达到 10,即 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],将会触发第二次计算。这是因为虽然数据流中的元素已经超过 5,但是 countWindowAll 是持续监视整个数据流的元素数量,只有在数据流中的元素数量从不小于 5 变为不小于 10 时,才会再次触发计算。

综上所述,countWindowAll 会持续监视整个数据流的元素数量,只有当元素数量达到阈值并且之前没有达到过,才会触发计算。这使得 countWindowAll 不仅触发一次计算,而是每次在元素数量达到阈值时都会触发计算。

二.countWindow和countWindowall代码验证

1.countWindow
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;public class WordCountWithCountWindow {public static void main(String[] args) throws Exception {StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();DataStream<String> text = env.socketTextStream("localhost", 9999);DataStream<Tuple2<String, Integer>> counts = text.flatMap(new Tokenizer()).keyBy(0).countWindow(5)  // 使用 countWindow.sum(1);counts.print();env.execute("WordCountWithCountWindow");}public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {@Overridepublic void flatMap(String value, Collector<Tuple2<String, Integer>> out) {String[] words = value.toLowerCase().split("\\W+");for (String word : words) {if (word.length() > 0) {out.collect(new Tuple2<>(word, 1));}}}}
}

2.countWindowAll

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;public class WordCountWithCountWindowAll {public static void main(String[] args) throws Exception {StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();DataStream<String> text = env.socketTextStream("localhost", 9999);DataStream<Tuple2<String, Integer>> counts = text.flatMap(new Tokenizer()).countWindowAll(5)  // 使用 countWindowAll.sum(1);counts.print();env.execute("WordCountWithCountWindowAll");}public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {@Overridepublic void flatMap(String value, Collector<Tuple2<String, Integer>> out) {String[] words = value.toLowerCase().split("\\W+");for (String word : words) {if (word.length() > 0) {out.collect(new Tuple2<>(word, 1));}}}}
}

三.countWindow和countWindowall两种方式对比

countWindow

应用场景

  • 滑动窗口聚合:适用于需要对连续的数据元素进行滑动窗口聚合计算的场景,例如每处理固定数量的数据点就进行一次平均值、总和等计算。
  • 数据流分段处理:适用于将数据流划分为连续的段进行处理的场景,例如每处理一段数据就执行某种操作。
  • 实时流式处理:在实时数据流处理中,将数据分批次处理,以平稳地处理不断流入的数据。

优势

  • 更精细的控制:可以将数据流划分为多个小窗口,对每个小窗口进行独立的计算,具有更精细的控制。
  • 灵活性:窗口大小可调整,适应不同大小的数据处理需求。
  • 内存管理:每个小窗口的数据量较小,可能更适合内存管理。

劣势

  • 窗口间隔:可能需要更多的逻辑来管理不同窗口之间的数据和计算。

countWindowAll

应用场景

  • 批量数据处理:适用于需要将整个数据集视为一个窗口进行处理的场景,通常用于有限的数据集或一次性处理。
  • 实时报警与监控:适用于监控数据流,一旦累计的数据达到阈值,即触发报警或监控。
  • 小数据集处理:对于较小的数据集,将其作为一个整体进行处理可能更合适。

优势

  • 简单性:将整个数据流作为一个窗口,简化了窗口管理和数据处理逻辑。
  • 全局计算:可以在全局范围内进行计算,不需要关注窗口间隔。

劣势

  • 内存需求:对于大规模的数据流,可能需要更多内存来处理整个数据流。
  • 处理延迟:需要等待整个数据流中的数据达到一定数量才会触发计算,可能会引入一定的处理延迟。

综上所述,选择使用 countWindow 还是 countWindowAll 取决于您的数据处理需求、数据流的规模以及对计算控制和延迟的关注程度。在实际应用中,您可能会根据具体情况选择合适的窗口类型。

相关文章:

Flink-Window详细讲解-countWindow

一.countWindow和countWindowall区别 1.countWindow&#xff1a; 如果您使用 countWindow(5)&#xff0c;这意味着您将数据流划分成多个大小为 5 的窗口。划分后的窗口如下&#xff1a; 窗口 1: [1, 2, 3, 4, 5]窗口 2: [6, 7, 8, 9, 10] 当每个窗口中的元素数量达到 5 时&…...

React 18 state 如同一张快照

参考文章 state 如同一张快照 也许 state 变量看起来和一般的可读写的 JavaScript 变量类似。但 state 在其表现出的特性上更像是一张快照。设置它不会更改已有的 state 变量&#xff0c;但会触发重新渲染。 设置 state 会触发渲染 可能会认为用户界面会直接对点击之类的用…...

EasyPoi导出 导入(带校验)简单示例 EasyExcel

官方文档 : http://doc.wupaas.com/docs/easypoi pom的引入: <!-- easyPoi--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.0.0</version></dep…...

八大排序

目录 选择排序-直接插入排序 插入排序-希尔排序 选择排序-简单选择排序 选择排序-堆排序 交换排序-冒泡排序 交换排序-快速排序 归并排序 基数排序 选择排序-直接插入排序 基本思想: 如果碰见一个和插入元素相等的&#xff0c;那么插入元素把想插入的元素放在相等元素…...

网络安全【黑客技术】自学

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 掌握技术的听说也需要心怀正义&#xff0c;不要利用技术行不轨之事&…...

【网络通信】socket编程——TCP套接字

TCP依旧使用代码来熟悉对应的套接字&#xff0c;很多接口都是在udp中使用过的 所以就不会单独把他们拿出来作为标题了&#xff0c;只会把第一次出现的接口作为标题 文章目录 服务端 tcp_servertcpserver.hpp(封装)初始化 initServer1. 创建socket2. 绑定 bindhtons —— 主机序…...

ROS2系统学习番外篇2---用VSCode开发ROS2程序

在ROS2系统学习3—第一个“Hello World”程序—即工作空间创建与包创建中已经介绍了如何创建ROS的工作空间以及包。在开发大型工程时,往往需要在IDE下面进行开发,因此本篇介绍使用VSCode来搭建ROS2开发环境的方法。 首先用VSCode打开ROS2的工作空间。 使用快捷键编译ROS2 …...

06 - Stream如何提高遍历集合效率?

前面我们讲过 List 集合类&#xff0c;那我想你一定也知道集合的顶端接口 Collection。 在 Java8 中&#xff0c;Collection 新增了两个流方法&#xff0c;分别是 Stream() 和 parallelStream()。 1、什么是 Stream&#xff1f; 现在很多大数据量系统中都存在分表分库的情况…...

【Spring】使用注解的方式获取Bean对象(对象装配)

目录 一、了解对象装配 1、属性注入 1.1、属性注入的优缺点分析 2、setter注入 2.1、setter注入的优缺点分析 3、构造方法注入 3.1、构造方法注入的优缺点 二、Resource注解 三、综合练习 上一个博客中&#xff0c;我们了解了使用注解快速的将对象存储到Spring中&#x…...

[webpack] 基本配置 (一)

文章目录 1.基本介绍2.功能介绍3.简单使用3.1 文件目录和内容3.2 下载依赖3.3 启动webpack 4.基本配置4.1 五大核心概念4.2 基本使用 1.基本介绍 Webpack 是一个静态资源打包工具。它会以一个或多个文件作为打包的入口, 将我们整个项目所有文件编译组合成一个或多个文件输出出去…...

模板学堂|SQL数据集动态参数使用场景及功能详解

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场&#xff08;https&#xff1a;//dataease.io/templates/&#xff09;。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板&#xff0c;方便用户根据自身的业务需求和使用场景选择对应的仪表板模板&a…...

Wlan——射频和天线基础知识

目录 射频的介绍 射频和Wifi 射频的相关基础概念 射频的传输 信号功率的单位 射频信号传输行为 天线的介绍 天线的分类 天线的基本原理 天线的参数 射频的介绍 射频和Wifi 什么是射频 从射频发射器产生一个变化的电流&#xff08;交流电&#xff09;&#xff0c;通过…...

前端实习周记第三周周记

第二周总结 第二周主要是做了一些PC端细节内容。大的地方改的不多&#xff0c;但是小的细节蛮多。 值得一提的是&#xff0c;第二周做的微信小程序&#xff0c;改了很多逻辑。改逻辑需要与后端进行联调&#xff0c;收获很大&#xff0c;思路也愈发清楚。 记录做了什么是好习…...

Android 13 Launcher界面——移除Launcher的删除和卸载功能

目录 一.背景 二.将卸载功能进行屏蔽 三.将移除功能屏蔽 四.将Remove按钮与Uninstall按钮屏蔽...

深度学习:使用卷积神经网络CNN实现MNIST手写数字识别

引言 本项目基于pytorch构建了一个深度学习神经网络&#xff0c;网络包含卷积层、池化层、全连接层&#xff0c;通过此网络实现对MINST数据集手写数字的识别&#xff0c;通过本项目代码&#xff0c;从原理上理解手写数字识别的全过程&#xff0c;包括反向传播&#xff0c;梯度…...

docker search 镜像报错: connect: no route to host (桥接模式配置静态IP)

如下 原因 可能有多种&#xff1a; ① 没有开放防火墙端口 ② ip地址配置有误 解决 我是因为虚拟机采用了桥接模式&#xff0c;配置静态ip地址有问题。 先确认虚拟机采用的是 桥接模式&#xff0c;然后启动虚拟机。 1、打开命令行&#xff0c;输入下面指令&#xff0c;打开…...

【VUE】[Violation] Added non-passive event listener to a scroll-blocking...

环境 chrome: 115.0.5790.170vue: ^3.3.4element-plus: ^2.3.4vite: ^4.4.7 问题 [Violation] Added non-passive event listener to a scroll-blocking <某些> 事件. Consider marking event handler as passive to make the page more responsive. See <URL> …...

runit-docker中管理多个服务

runit-docker中管理多个服务 介绍Runit, systemctl和supervisor是三种不同的服务管理工具区别runit优点程序构成快速开始runit实现服务退出执行指定操作runit监管服务打印日志到syslogrunit监管服务后台运行runit监管服务一些错误总结 介绍 runit 是一个轻量级的、稳定的、跨平…...

Intune 应用程序管理

由于云服务提供了增强的安全性、稳定性和灵活性&#xff0c;越来越多的组织正在采用基于云的解决方案来满足他们的需求。这正是提出Microsoft Endpoint Manager等解决方案的原因&#xff0c;它结合了SCCM和Microsoft Intune&#xff0c;以满足本地和基于云的端点管理。 与 Int…...

Oracle DB 安全性 : TDE HSM TCPS Wallet Imperva

• 配置口令文件以使用区分大小写的口令 • 对表空间进行加密 • 配置对网络服务的细粒度访问 TCPS 安全口令支持 Oracle Database 11g中的口令&#xff1a; • 区分大小写 • 包含更多的字符 • 使用更安全的散列算法 • 在散列算法中使用salt 用户名仍是Oracle 标识…...

推荐一些可以用于论文降重的软件(硕博防挂科必看指南)

引言&#xff1a;2026年的“学术大清洗”&#xff0c;你还在用落后时代的工具“自杀”吗&#xff1f; 前天深夜&#xff0c;我收到了一位某C9高校博士在读铁粉的求救私信&#xff1a;“学长&#xff0c;我真的要疯了&#xff01;为了盲审不出意外&#xff0c;我花钱用降重软件…...

ARM 架构 JuiceFS 性能优化:基于 MLPerf 的实践与调优妒

Qt是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...

HagiCode Desktop 混合分发架构解析:如何用 PP 加速大文件下载成

一、Actor 模型&#xff1a;不是并发技巧&#xff0c;而是领域单元 Actor 模型的本质是&#xff1a; Actor 是独立运行的实体 Actor 之间只通过消息交互 Actor 内部状态不可被外部直接访问 Actor 自行决定如何处理收到的消息 Actor 模型真正解决的是&#xff1a; 如何在不共享状…...

简单几步:REX-UniNLU快速部署,打造个人中文文本分析工具

简单几步&#xff1a;REX-UniNLU快速部署&#xff0c;打造个人中文文本分析工具 想快速搭建一个能理解中文、分析情感、识别实体的智能系统吗&#xff1f;REX-UniNLU是一个基于ModelScope DeBERTa的高精度中文自然语言处理系统&#xff0c;通过简洁的Web界面&#xff0c;让你无…...

Visio中高效导出无白边SVG矢量图的完整指南

1. 为什么需要无白边SVG矢量图&#xff1f; 写论文或者做演示文稿时&#xff0c;经常需要在文档中插入各种图表。Visio作为一款专业的绘图工具&#xff0c;能够帮助我们快速创建流程图、架构图等专业图形。但直接将Visio图形导出为SVG格式时&#xff0c;往往会发现图片周围有大…...

计算机中级-数据库系统工程师-操作系统-设备管理

一、设备管理1. 考点核心考点&#xff1a;设备管理主要包含三个考点&#xff1a;I/O设备管理软件、Spooling技术和磁盘调度算法2. 设备管理的概述自学内容&#xff1a;包括设备的分类、设备管理的目标与任务&#xff0c;建议直接阅读教材相关内容3. I/O设备管理软件1&#xff0…...

从F450到F330:匿名拓控者P2飞控在紧凑空间内的DIY无人机实践

1. 从F450到F330的尺寸革命 去年我第一次用F450机架组装无人机时&#xff0c;就发现这个经典尺寸在室内飞行简直是场灾难。特别是像我这种住在小户型的人&#xff0c;卧室宽度不到3米&#xff0c;F450的450mm轴距让它转身都困难。这次换成F330机架后&#xff0c;330mm的轴距立刻…...

JS——动态判断节假日(支持自定义节假日与调休规则)

1. 为什么需要动态判断节假日&#xff1f; 在日常开发中&#xff0c;我们经常会遇到需要判断某一天是否是节假日的场景。比如电商平台的促销活动页面需要显示"节假日不发货"的提示&#xff0c;或者企业考勤系统需要自动计算员工的休假天数。传统的做法是硬编码节假日…...

Oracle数据库中,将JSON字符串转换为多行数据

在Oracle数据库中&#xff0c;在将JSON字符串转换为多行数据时&#xff0c;通常可以使用JSON函数与一些SQL技巧来实现。下面是一些常见的方法来处理这个问题&#xff1a;方法1&#xff1a;使用JSON_TABLE函数JSON_TABLE 函数可以将JSON数组转换为关系表。例如&#xff0c;如果有…...

别再纠结了!用Nuitka一键打包你的Python项目(含PyTorch依赖处理)

深度解析Nuitka&#xff1a;Python项目打包与PyTorch依赖处理实战指南 在Python生态中&#xff0c;项目打包一直是个令人头疼的问题——尤其是当你需要处理像PyTorch这样的复杂依赖时。传统的PyInstaller虽然简单易用&#xff0c;但在处理深度学习框架时常常会遇到各种兼容性问…...