Flink ProcessFunction不同流异同及应用场景
ProcessFunction系列对比概览
| 函数类别 | 关键特性 | 应用场景示例 |
|---|---|---|
ProcessFunction | 基础类,处理单个事件,支持事件时间、水位线、状态管理、定时器。 | 单独处理每个事件,执行复杂逻辑,如基于事件内容动态响应。 |
KeyedProcessFunction | 基于键的处理,每个键有自己的状态。支持事件时间、水位线、状态管理、定时器。 | 按用户分组统计点击量,用户会话管理,状态跟踪。 |
CoProcessFunction | 处理两个数据流,独立处理来自两流的事件,支持事件时间、水位线、状态管理、定时器。 | 实时融合交易流与价格流,实时计算订单总价;日志与用户信息流的匹配处理。 |
ProcessJoinFunction | 专为流连接设计,处理两个数据流,简化版的CoProcessFunction,不支持定时器。 | 简单的流连接操作,如订单ID与用户信息的关联。 |
BroadcastProcessFunction | 处理普通流与广播流,广播流的每个元素发给所有普通流元素,适用于全局状态更新。 | 实时规则更新,广播新的规则至所有交易验证逻辑。 |
KeyedBroadcastProcessFunction | 类似BroadcastProcessFunction,但作用于键控流,每个键控流元素接收广播流所有元素。 | 每个用户个性化推荐算法更新,全局规则变化按用户分发。 |
ProcessWindowFunction | 在窗口聚合后处理窗口内所有元素,提供窗口上下文信息,如窗口开始/结束时间,适合窗口内复杂计算。 | 计算每小时温度波动,统计窗口内中位数、分位数等。 |
ProcessAllWindowFunction | 处理全窗口数据,非键控,适用于全局操作,如计算整个数据流的汇总统计信息。 | 计算整个数据流的总和或平均值,无需考虑分组。 |
异同点总结
- 状态管理与事件时间:所有函数均支持事件时间和水位线处理,状态管理(除了
ProcessJoinFunction),但Keyed系列额外支持键控状态。 - 流处理:
CoProcessFunction、ProcessJoinFunction处理多个流,而BroadcastProcessFunction和KeyedBroadcastProcessFunction支持广播状态传播。 - 窗口处理:
ProcessWindowFunction和ProcessAllWindowFunction专用于窗口处理,前者基于键控窗口,后者处理全窗口数据。 - 灵活性:
ProcessFunction和KeyedProcessFunction最为灵活,适用于广泛的复杂逻辑处理;ProcessWindowFunction在窗口上下文中提供了额外的处理能力。
1. ProcessFunction
概述:ProcessFunction是最基本的形式,它不依赖于任何键或窗口,为每个输入事件提供完全的控制权。它允许访问事件的时间戳和水位线信息,并提供了注册和处理定时器的能力。
应用场景:适合需要对每个事件进行独立、复杂处理的场景,如基于事件的复杂逻辑判断、状态更新或基于时间的操作。
示例:处理单个事件,根据事件的内容动态注册定时器,进行后续处理。
2. KeyedProcessFunction
概述:KeyedProcessFunction是对ProcessFunction的扩展,用于处理已经按照某个键(key)分组的数据流。它除了具备ProcessFunction的所有功能外,还可以访问键控状态,即每个键都有独立的状态。
应用场景:适用于需要基于键的聚合或状态管理的场景,如统计每个用户的点击次数、维持每个商品的库存状态等。
示例:统计每个用户的登录次数,同时在特定事件后发送通知。
3. CoProcessFunction
概述:用于处理两个数据流的连接操作,每个流可以有不同的类型。它允许独立地处理来自两个流的事件,并提供了注册定时器的功能。
应用场景:当需要根据两个不同的数据流进行联合处理时使用,例如在实时交易系统中,将订单流和价格流合并,实时计算订单的最新总价。
示例:实时融合两个数据源,比如订单流和用户流,根据订单ID匹配用户信息,进行个性化推荐。
4. ProcessJoinFunction
概述:专用于处理两个流的连接操作,但与CoProcessFunction相比,它更专注于流的连接逻辑,而不提供事件时间处理或定时器功能。
应用场景:适用于简单的流连接,当只需要对两个流进行匹配和简单的处理时使用。
示例:基于键匹配两个流的记录,如用户行为日志与用户详情表的关联查询。
5. BroadcastProcessFunction
概述:用于处理一个普通数据流和一个广播数据流。广播流的每个元素都会被发送给所有普通流的元素,适合实现广播状态模式。
应用场景:当需要将某些全局配置或规则广播给所有流的处理逻辑时,比如实时更新的黑名单列表应用于每一条交易验证。
示例:实时更新规则引擎,当规则发生变化时,广播新规则至所有交易流,进行动态规则匹配。
6. KeyedBroadcastProcessFunction
概述:类似于BroadcastProcessFunction,但作用于键控流上,每个键控流的元素会接收到广播流的所有元素,同时保持了键控状态。
应用场景:在需要根据键进行状态管理和同时应用全局更新的场景,如每个用户个性化推荐算法的更新。
示例:根据用户偏好动态调整推荐算法,当推荐算法模型更新时,广播更新至每个用户的推荐逻辑中。
7. ProcessWindowFunction
概述:在窗口聚合操作结束后,对窗口内所有元素进行进一步处理。提供了窗口上下文信息,如窗口的开始和结束时间,可以访问窗口内所有元素并执行复杂计算。
应用场景:当窗口聚合后还需要进行复杂的计算或转换时,如计算窗口内的中位数、分位数等。
示例:计算每个小时内的温度变化率,不仅统计平均温度,还计算温度的最大波动。
8. ProcessAllWindowFunction
概述:与ProcessWindowFunction类似,但处理的是非键控的全窗口,即所有输入数据被视为一个整体处理,常用于全局窗口。
应用场景:适用于需要在整个数据集上执行全局操作,而不考虑键的场景,如计算整个数据流的总体统计信息。
示例:计算整个数据流的总和或平均值,不考虑数据的分组。
Apache Flink在IoT指标开发流处理全过程案例
Flink assignTimestampsAndWatermarks 深度解析:时间语义与水印生成
Flink面试必问题:时间和窗口处理面试题及参考答案(3万字长文)
KeyedProcessFunction 在 Flink项目中的应用实战
Flink必问面试题:生产实践应用场景相关问题汇总及参考答案(3万字长文)
Flink必问面试题:Join相关问题汇总及参考答案
Flink必问面试题:水印(Watermark)30题及参考答案
相关文章:
Flink ProcessFunction不同流异同及应用场景
ProcessFunction系列对比概览 函数类别关键特性应用场景示例ProcessFunction基础类,处理单个事件,支持事件时间、水位线、状态管理、定时器。单独处理每个事件,执行复杂逻辑,如基于事件内容动态响应。KeyedProcessFunction基于键…...
Matplotlib 文本
可以使用 xlabel、ylabel、text向图中添加文本 mu, sigma 100, 15 x mu sigma * np.random.randn(10000)# the histogram of the data n, bins, patches plt.hist(x, 50, densityTrue, facecolorg, alpha0.75)plt.xlabel(Smarts) plt.ylabel(Probability) plt.title(Histo…...
信创产业政策,信创测试方面
信创产业的政策支持主要体现在多个方面,这些政策旨在推动产业的快速发展,加强自主创新能力,保障国家信息安全,以及促进产业结构的优化升级。 首先,政府通过财政支持、税收优惠等方式,加大对信创产业的资金…...
微信云数据库迁移到unicloud云数据库
背景 早期只有一个微信小程序,后来了解到uniapp的跨端解决方案,开始从小程序代码迁移到uniapp。对于后端采用的微信云开发方案,迁移的时候主要要解决从openid的用户体系转移到unicloud提供的uni-id体系(使用uid)。 方案 利用微信云数据库的…...
快速上手文心一言指令
“文心一言”指的是百度公司开发的自然语言处理与生成技术,它类似于ChatGPT,是一种基于大规模语言模型的AI对话系统,能够理解和生成自然语言文本,进行问答、创作等多种任务。由于“文心一言”是一个复杂的系统,其内部指…...
零基础STM32单片机编程入门(五)FreeRTOS实时操作系统详解及实战含源码视频
文章目录 一.概要二.什么是实时操作系统三.FreeRTOS的特性四.FreeRTOS的任务详解1.任务函数定义2.任务的创建3.任务的调度原理 五.CubeMX配置一个FreeRTOS例程1.硬件准备2.创建工程3.调试FreeRTOS任务调度 六.CubeMX工程源代码下载七.讲解视频链接地址八.小结 一.概要 FreeRTO…...
leetCode.96. 不同的二叉搜索树
leetCode.96. 不同的二叉搜索树 题目思路 代码 // 方法一:直接用卡特兰数就行 // 方法二:递归方法 class Solution { public:int numTrees(int n) {// 这里把 i当成整个结点,j当成左子树最左侧结点,并一次当根节点尝试// f[ i ] f[ j - 1…...
PyAutoGUI 使用详解
文章目录 简介PyAutoGUI 的原理安装 PyAutoGUI基本使用示例鼠标控制键盘控制截屏图像识别消息框 高级功能防止误操作多屏幕支持鼠标平滑移动 结论 简介 PyAutoGUI 是一个用于自动化控制鼠标和键盘的 Python 库。它可以帮助开发者编写脚本,以模拟用户在计算机上的操…...
MySQL——备份
为什么要备份? 保证重要的数据不丢失 方便数据转移 MySQL数据库备份方式: 1. 直接拷贝物理文件 2. 在可视化工具中手动导出 —— 在想要导出的表或者库中,右键选择备份或导出 3. 使用命令行导出 mysqldump ——cmd打开命令行 —…...
科东软件精彩亮相华南工博会,展现未来工业前沿技术
近日,华南国际工业博览会在深圳成功举办。科东软件携众多前沿技术、解决方案及最新应用案例精彩亮相,为参展观众带来了一场工业智能的科技盛宴。 鸿道操作系统(Intewell) 科东软件重点展示了鸿道操作系统(Intewell&…...
详解flink sql, calcite logical转flink logical
文章目录 背景示例FlinkLogicalCalcConverterBatchPhysicalCalcRuleStreamPhysicalCalcRule其它算子FlinkLogicalAggregateFlinkLogicalCorrelateFlinkLogicalDataStreamTableScanFlinkLogicalDistributionFlinkLogicalExpandFlinkLogicalIntermediateTableScanFlinkLogicalInt…...
PostgreSQL的系统视图pg_statio_all_indexes
PostgreSQL的系统视图pg_statio_all_indexes 在 PostgreSQL 数据库中,pg_statio_all_indexes 视图提供了有关所有索引的 I/O 活动的统计信息。这些统计信息对于了解索引的使用情况和性能调优非常有帮助。 pg_statio_all_indexes 视图的结构 以下是 pg_statio_all…...
【C++ Primer Plus学习记录】函数和C-风格字符串
将字符串作为参数时意味着传递的是地址,但可以使用const来禁止对字符串参数进行修改。 假设要将字符串作为参数传递给函数,则表示字符串的方式有三种: (1)char数组 (2)用引号括起来的字符串常…...
力扣双指针算法题目:移动零
1.题目 . - 力扣(LeetCode) 2.思路解析 这个题目的思路和“使用递归排序快速排序解决数组的排序问题”相同 class solution { public:void QuickSort(vector<int>& nums, int left, int right){if (left > right) return;int key left…...
day60---面试专题(微服务面试题-参考回答)
微服务面试题 **面试官:**Spring Cloud 5大组件有哪些? 候选人: 早期我们一般认为的Spring Cloud五大组件是 Eureka : 注册中心Ribbon : 负载均衡Feign : 远程调用Hystrix : 服务熔断Zuul/Gateway : 网关 随着SpringCloudAlibba在国内兴起 , …...
laravel+phpoffice+easyexcel实现导入
资源包下载地址 https://download.csdn.net/download/QiZong__BK/89503486 easy-excel下载: "dcat/easy-excel": "^1.0", 命令行: composer require dcat/easy-excel 前端代码 <!doctype html> <html lang"en&…...
Spring Boot集成多数据源的最佳实践
Spring Boot集成多数据源的最佳实践 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 为什么需要多数据源? 在实际的应用开发中,有时候…...
Java项目:基于SSM框架实现的班主任助理管理系统【ssm+B/S架构+源码+数据库+开题报告+毕业论文】
一、项目简介 本项目是一套基于SSM框架实现的班主任助理管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功…...
数据在内存中的存储方式
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C语言 目录 前言 一、整数的存储 二、大小端字节序及其判断 1.什么是大小端 2.为什么有大小端 3.用c语言编写程序判断大小端 三、浮点数的存储 1.浮点数…...
Selenium 监视数据收发
实际上,在我提供的示例中,确实使用了浏览器实例。webdriver.Chrome()这行代码正是创建了一个Chrome浏览器的WebDriver实例。Selenium Wire扩展了标准的Selenium WebDriver,允许你通过这个浏览器实例来监听网络请求。 当你运行类似这样的代码…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
