什么是 Flink Pattern
在 Apache Flink 中,Pattern 是 Flink CEP(Complex Event Processing)模块 的核心概念之一。它用于定义你希望从数据流中检测出的 事件序列模式(Event Sequence Pattern)。
🎯 一、什么是 Flink Pattern?
Pattern
是对一系列事件行为的描述规则,用来匹配流中符合某种顺序、条件或时间范围的事件组合。
你可以用 Pattern
来表示:
- 用户连续登录失败
- 某个设备短时间内多次报警
- 用户点击 A → B → C 的行为路径
- 异常交易行为等
🧱 二、Pattern 的基本结构
一个完整的 Pattern
通常由以下几部分组成:
组成部分 | 描述 |
---|---|
名称(Name) | 为每个模式步骤命名,便于后续提取结果 |
条件(Condition) | 定义该步骤需满足的事件属性条件 |
数量限定(Quantifier) | 控制事件出现次数(如 oneOrMore, times(3)) |
时间限制(Time Limit) | 设置整个模式匹配的最大时间窗口(within) |
🔍 三、Pattern 示例解析
示例目标:
识别“用户在10秒内连续登录失败超过3次”的异常行为
Pattern<Event, ?> pattern = Pattern.<Event>begin("开始").where(new SimpleCondition<Event>() {@Overridepublic boolean filter(Event event) {return event.getType().equals("登录失败");}}).times(3).within(Time.seconds(10));
✅ 解释:
部分 | 含义 |
---|---|
.begin("开始") | 定义第一个匹配步骤,命名为 “开始” |
.where(...) | 匹配事件类型为“登录失败” |
.times(3) | 要求连续发生3次 |
.within(Time.seconds(10)) | 整个匹配必须在10秒内完成 |
🧩 四、Pattern 的常用方法详解
1. 起始和连接模式
方法 | 说明 |
---|---|
begin("name") | 定义模式起始条件 |
next("name") | 严格近邻:要求下一个事件紧接上一个之后 |
followedBy("name") | 非严格近邻:允许中间有其他事件 |
notNext() / notFollowedBy() | 排除某个事件出现 |
// 严格顺序:A 后面必须是 B,不能有其他事件插入
Pattern<Event, ?> strictPattern = Pattern.<Event>begin("start").where(new SimpleCondition<Event>() {public boolean filter(Event event) { return event.getType().equals("A"); }}).next("middle").where(new SimpleCondition<Event>() {public boolean filter(Event event) { return event.getType().equals("B"); }});
2. 事件出现次数控制(Quantifiers)
方法 | 描述 |
---|---|
.times(n) | 精确匹配 n 次 |
.oneOrMore() | 至少一次 |
.times(2, 4) | 出现 2~4 次 |
.optional() | 可选匹配,可有可无 |
.greedy() | 贪婪匹配(尽可能多匹配) |
Pattern<Event, ?> optionalPattern = Pattern.<Event>begin("start").where(new SimpleCondition<Event>() {public boolean filter(Event event) { return event.getType().equals("A"); }}).followedBy("maybe").where(new SimpleCondition<Event>() {public boolean filter(Event event) { return event.getType().equals("B"); }}).optional() // 可选步骤.followedBy("end").where(new SimpleCondition<Event>() {public boolean filter(Event event) { return event.getType().equals("C"); }});
3. 时间约束(Time Constraints)
方法 | 描述 |
---|---|
.within(Time.time) | 模式匹配必须在这个时间窗口内完成 |
.withinWindow(Time.time) | 设置单步之间的时间间隔(仅限某些版本) |
Pattern<Event, ?> timedPattern = Pattern.<Event>begin("start").where(new SimpleCondition<Event>() {public boolean filter(Event event) { return event.getType().equals("A"); }}).times(2).within(Time.seconds(5)); // 两次 A 必须在5秒内出现
📌 五、完整 Java 示例代码
import org.apache.flink.cep.CEP;
import org.apache.flink.cep.PatternSelectFunction;
import org.apache.flink.cep.PatternStream;
import org.apache.flink.cep.pattern.Pattern;
import org.apache.flink.cep.pattern.conditions.SimpleCondition;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;import java.util.List;
import java.util.Map;public class FlinkPatternExample {public static void main(String[] args) throws Exception {StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();// 模拟输入事件流DataStream<Event> eventStream = env.fromElements(new Event("userA", "登录失败", 1000L),new Event("userA", "登录失败", 2000L),new Event("userA", "登录失败", 3000L),new Event("userA", "登录成功", 4000L));// 定义 Pattern:连续3次登录失败,在10秒内Pattern<Event, ?> pattern = Pattern.<Event>begin("开始").where(new SimpleCondition<Event>() {@Overridepublic boolean filter(Event event) {return event.getType().equals("登录失败");}}).times(3).within(Time.seconds(10));// 将 Pattern 应用于数据流PatternStream<Event> patternStream = CEP.pattern(eventStream, pattern);// 提取并处理匹配到的事件patternStream.select(new PatternSelectFunction<Event, String>() {@Overridepublic String select(Map<String, List<Event>> patternMap) throws Exception {List<Event> events = patternMap.get("开始");return "发现异常!用户 [" + events.get(0).userId + "] 在 10 秒内连续登录失败:" + events.size() + " 次";}}).print();env.execute("Flink Pattern Example");}// 事件类public static class Event {public String userId;public String type;public long timestamp;public Event(String userId, String type, long timestamp) {this.userId = userId;this.type = type;this.timestamp = timestamp;}public String getType() {return type;}public String getUserId() {return userId;}@Overridepublic String toString() {return "{userId: " + userId + ", type: " + type + ", timestamp: " + timestamp + "}";}}
}
📊 六、运行输出示例
发现异常!用户 [userA] 在 10 秒内连续登录失败:3 次
⚙️ 七、Pattern 使用建议
场景 | 建议 |
---|---|
多步骤行为分析 | 使用 begin().next().followedBy() 构建清晰逻辑 |
异常检测 | 结合 times() 和 within() 控制频率 |
排除特定事件 | 使用 notFollowedBy() |
复杂状态流转 | 使用 begin().where(...).followedBy(...).where(...) |
性能优化 | 设置合理的时间窗口,避免状态无限增长 |
✅ 八、Pattern 的作用总结
功能 | 说明 |
---|---|
行为识别 | 如用户操作路径、漏斗转化率 |
异常检测 | 如频繁请求、登录失败、支付异常 |
业务规则匹配 | 如风控策略、营销活动触发条件 |
流式规则引擎 | 实时判断是否符合预设逻辑 |
与 Flink 状态结合 | 支持高并发、低延迟的状态化检测 |
🧠 九、Pattern 与其他组件的关系
组件 | 作用 |
---|---|
Pattern | 定义要检测的事件序列规则 |
PatternStream | 表示匹配成功的事件流 |
CEP.pattern(stream, pattern) | 将 Pattern 应用于原始流 |
select() / process() | 对匹配结果进行处理 |
📘 十、扩展学习方向
如果你希望我为你演示以下内容,请继续提问:
- Flink Pattern 与 Kafka 集成实战
- 带超时处理的 Pattern(如未完成则触发告警)
- 使用侧输出(sideOutput)处理未匹配的事件
- 多个 Pattern 的组合使用(OR、AND、NOT)
- 自定义 Pattern 匹配逻辑(使用
IterativeCondition
)
📌 一句话总结:
Flink Pattern 是一种用于描述事件序列匹配规则的 DSL,它是构建实时行为识别、风控系统、日志分析的核心工具。
相关文章:
什么是 Flink Pattern
在 Apache Flink 中,Pattern 是 Flink CEP(Complex Event Processing)模块 的核心概念之一。它用于定义你希望从数据流中检测出的 事件序列模式(Event Sequence Pattern)。 🎯 一、什么是 Flink Pattern&am…...
ADB基本操作和命令
1.ADB的含义 adb 命令是 Android 官方提供,调试 Android 系统的工具。 adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。 adb 是一种功能强大的命令行工具&#x…...
NSString的三种实现方式
oc里的NSString有三种实现方式,为_ _NSCFConstantString、__NSCFString、NSTaggedPointerString 1._ _NSCFConstantString(字面量字符串) 从字面意思上可以看出,_ _NSCFContantString可以理解为常量字符串,这种类型的字符串在编译期就确定了…...
2025年PMP 学习二十 第13章 项目相关方管理
第13章 项目相关方管理 序号过程过程组过程组1识别相关方启动2规划相关方管理规划3管理相关方参与与执行4监控相关方参与与监控 相关方管理,针对于团队之外的相关方的,核心目标是让对方为了支持项目,以达到项目目标。 文章目录 第13章 项目相…...
学习黑客Kerberos深入浅出:安全王国的门票系统
Kerberos深入浅出:安全王国的门票系统 🎫 作者: 海尔辛 | 发布时间: 2025-05-18 🔑 理解Kerberos:为什么它如此重要? Kerberos是现代网络环境中最广泛使用的身份验证协议之一,尤其在Windows Active Dire…...
蓝桥杯19681 01背包
问题描述 有 N 件物品和一个体积为 M 的背包。第 i 个物品的体积为 vi,价值为 wi。每件物品只能使用一次。 请问可以通过什么样的方式选择物品,使得物品总体积不超过 M 的情况下总价值最大,输出这个最大价值即可。 输入格式 第一行输…...
使用 Auto-Keras 进行自动化机器学习
使用 Auto-Keras 进行自动化机器学习 了解自动化机器学习以及如何使用 auto-keras 完成它。如今,机器学习并不是一个非常罕见的术语,因为像 DataCamp、Coursera、Udacity 等组织一直在努力提高他们的效率和灵活性,以便将机器学习的教育带给普…...
算法刷题Day9 5.18:leetcode定长滑动窗口3道题,结束定长滑动窗口,用时1h
12. 1852.每个子数组的数字种类数 1852. 每个子数组的数字种类数 - 力扣(LeetCode) 思想 找到nums 所有 长度为 k 的子数组中 不同 元素的数量。 返回一个数组 ans,其中 ans[i] 是对于每个索引 0 < i < n - k,nums[i..(i …...
Protect Your Digital Privacy: Obfuscate, Don’t Hide
Protect Your Digital Privacy: Obfuscate, Don’t Hide In today’s digital world, hiding completely online is nearly impossible. But you can protect yourself by deliberately obfuscating your personal information — making it harder for others to track, pro…...
Spark 的运行模式(--master) 和 部署方式(--deploy-mode)
Spark 的 运行模式(--master) 和 部署方式(--deploy-mode),两者的核心区别在于 资源调度范围 和 Driver 进程的位置。 一、核心概念对比 维度--master(运行模式)--deploy-mode(部署…...
从零开始实现大语言模型(十五):并行计算与分布式机器学习
1. 前言 并行计算与分布式机器学习是一种使用多机多卡加速大规模深度神经网络训练过程,以减少训练时间的方法。在工业界的训练大语言模型实践中,通常会使用并行计算与分布式机器学习方法来减少训练大语言模型所需的钟表时间。 本文介绍PyTorch中的一种…...
生产模式下react项目报错minified react error #130的问题
这天,线上突然出现了一个bug,某个页面打开空白,看控制台报错minified react error #130,在本地看却是正常的,百思不得其解。 后来发现是由于线上项目它的包更新过了,而我本地的包没有更新,所以我…...
本地无损放大软件-realesrgan-gui
—————【下 载 地 址】——————— 【本章下载一】:https://drive.uc.cn/s/84516041df174 【本章下载二】:https://pan.xunlei.com/s/VOQDybD4ruF0-m8UJrCF-HtLA1?pwdxz9e# 【百款黑科技】:https://ucnygalh6wle.feishu.cn/wiki/…...
Java面试深度解析:微服务与云原生技术应用场景详解
Java面试深度解析:微服务与云原生技术应用场景详解 面试场景 面试官:我们今天的面试会围绕微服务与云原生技术展开,结合一个在线教育平台的业务场景进行提问。希望你放松心态,正常发挥。 码农明哥:好的好的…...
短剧小程序系统开发源码上架,短剧项目市场分析
引言 随着短视频内容消费的爆发式增长,短剧小程序凭借其碎片化、强互动、低成本的特点,成为内容创业与资本布局的新风口。2024年以来,行业规模突破500亿元,预计2027年将超千亿17。本文将深度解析短剧小程序系统开发的技术优势、市…...
常见的请求头(Request Header)参数
1. Accept 作用:告知服务器客户端支持的响应数据格式(如 JSON、XML、HTML)。示例:Accept: application/json(优先接收 JSON 格式数据)。 2. Content-Type 作用:说明请求体的数据格式(…...
渗透测试核心技术:内网渗透与横向移动
内网渗透是红队行动的关键阶段,攻击者通过突破边界进入内网后,需快速定位域控、横向移动并维持权限。本节从内网环境搭建、信息收集、横向移动技巧到权限维持工具,系统讲解如何在内网中隐蔽行动并扩大战果。 1. 内网环境搭建与基础配置 目标: 模拟真实企业网络,构建包含…...
2025/5/18
继续研究一下大佬的RAG项目。开始我的碎碎念。 RAG可以分成两部分:一个是问答,一个是数据处理。 问答是人提问,然后查数据库,把查的东西用大模型组织成人话,回答人的提问。 数据处理是把当下知识库里的东西…...
使用国内源加速Qt在线安装
简介: 在线安装Qt时,会发现下载非常缓慢,可以用过使用国内镜像源来加速安装过程。 在线安装包的下载过程: 1,打开下载页面 https://www.qt.io/download-open-source 2,点击 Download the Qt online ins…...
【图像生成大模型】HunyuanVideo:大规模视频生成模型的系统性框架
HunyuanVideo:大规模视频生成模型的系统性框架 引言HunyuanVideo 项目概述核心技术1. 统一的图像和视频生成架构2. 多模态大语言模型(MLLM)文本编码器3. 3D VAE4. 提示重写(Prompt Rewrite) 项目运行方式与执行步骤1. …...
Java IO流(超详细!!!)
Java IO流 文章目录 Java IO流1.文件相关基础普及1.1 常用文件操作1.3 目录的操作和文件删除 2.IO流原理及流的分类2.1 字节流2.1.1 InputStream:字节输入流2.1.2 OutputStream 2.2 字符流2.2.1 Reader2.2.1 Writer 2.3 节点流和处理流2.3.1节点流2.3.2 处理流2.3.2…...
规则联动引擎GoRules初探
背景说明 嵌入式设备随着物联网在生活和生产中不断渗透而渐渐多起来,数据的采集、处理、分析在设备侧的自定义配置越来越重要。一个可通过图形化配置的数据处理过程,对于加速嵌入式设备的功能开发愈发重要。作为一个嵌入式软件从业者,笔者一…...
Android开发-翻页类视图
在Android应用中,翻页类视图(Paging Views) 是一种非常直观且用户友好的方式来展示内容。无论是用于展示图片轮播、引导页还是分页加载数据列表,翻页效果都能极大地提升用户体验。本文将介绍几种实现翻页效果的常见组件和方法&…...
高能数造闪耀 CIBF 2025,以创新技术引领新能源智造新征程
在全球新能源产业加速发展的关键节点,CIBF 2025 展会成为行业技术与成果交流的重要平台。高能数造(西安)技术有限公司深度参与此次盛会,凭借在新能源电池智能制造领域的深厚积累与创新突破,为行业发展注入强劲动力&…...
数据结构与算法——栈和队列
栈和队列 栈概念与结构栈的实现栈的初始化栈的销毁判断栈是否为空入栈出栈取栈顶元素栈中有效元素个数 队列概念与结构队列的实现队列结点结构队列结构初始化队列队列判空销毁队列入队列,队尾出队列,队头取队头数据取队尾数据队列有效数据个数 栈 概念与…...
新电脑软件配置三 pycharm
快捷键放大和缩小字体 按住ctrl鼠标滚轮向上 缩小同理...
浅入ES5、ES6(ES2015)、ES2023(ES14)版本对比,及使用建议---ES6就够用(个人觉得)
JavaScript(ECMAScript)的发展经历了多个版本,每个版本都引入了新特性和改进。以下仅是对三个常用版本(ES5、ES6(ES2015) 和 ES2023)的基本对比及使用建议: 目前常见项目中还是用ES6…...
【Odoo】Pycharm导入运行Odoo15
【Odoo】Pycharm导入运行Odoo15 前置准备1. Odoo-15项目下载解压2. PsrtgreSQL数据库 项目导入运行1. 项目导入2. 设置项目内虚拟环境3. 下载项目中依赖4. 修改配置文件odoo.conf 运行Pycharm快捷运行 前置准备 1. Odoo-15项目下载解压 将下载好的项目解压到开发目录下 2. …...
【运营商查询】批量手机号码归属地和手机运营商高速查询分类,按省份城市,按运营商移动联通电信快速分类导出Excel表格,基于WPF的实现方案
WPF手机号码归属地批量查询与分类导出方案 应用场景 市场营销:企业根据手机号码归属地进行精准营销,按城市或省份分类制定针对性推广策略客户管理:快速对客户手机号码进行归属地分类,便于后续客户关系管理数…...
中级统计师-统计学基础知识-第四章 假设检验
一、假设检验的基本原理 1. 基本思想 反证法:假设原假设成立,通过样本矛盾性进行反驳小概率原理:设定显著性水平 α \alpha α(通常取 0.05),若观测结果的概率 p ≤ α p \leq \alpha p≤α,…...
等于和绝对等于的区别
1. (等于) 特点:比较时会自动进行类型转换(隐式转换),尝试将两边的值转为相同类型后再比较。规则: 如果类型相同,直接比较值。如果类型不同,按以下规则转换: …...
家庭关系处理个人总结
首先要说到前面的是,每个家庭的成员背景环境经济状况不同,原生家庭差异,导致面临具体问题是不同的。就类似软件“没有银弹”的概念,没有一种方法可以解决每个人问题。 举个例子,面对婆媳矛盾 网上父辈的人 会说 百行孝…...
【Python训练营打卡】day29 @浙大疏锦行
DAY 29 复习日 知识点回顾 1. 类的装饰器 2. 装饰器思想的进一步理解:外部修改、动态 3. 类方法的定义:内部定义和外部定义 作业:复习类和函数的知识点,写下自己过去29天的学习心得,如对函数和类的理解,…...
React 19版本refs也支持清理函数了。
文章目录 前言一、refs 支持清理函数二、案例演示1.useEffect写法2.React 19改进 的ref写法 总结 前言 React 19版本发布了ref支持清理函数了,这样就可以达到useEffect一样的效果了。为啥需要清理函数呢,这是因为节约内存。 清理事件监听(避…...
uniapp的适配方式
文章目录 前言✅ 一、核心适配方式对比📏 二、rpx 单位:uni-app 的核心适配机制🧱 三、默认设计稿适配(750宽)🔁 四、字体 & 屏幕密度适配🛠 五、特殊平台适配(底部安全区、刘海…...
Java面试场景:从音视频到AI应用的技术探讨
面试场景:音视频与AI应用技术的碰撞 在某互联网大厂的面试中,面试官王先生与求职者明哥展开了一场关于音视频技术与AI应用的对话。 第一轮提问:音视频场景 面试官:明哥,你能谈谈在音视频场景中,Spring B…...
es聚合-词条统计
es语句 ---普通结构----"tags":{"type": "keyword","index": true},GET /knowledge_test/_search {"size": 0,"aggs": {"tag_count": {"terms": {"field": "tags",&quo…...
【沉浸式求职学习day43】【Java面试题精选3】
沉浸式求职学习 1.Java中this和super的区别2.为什么返回类型不算方法重载3.方法重写时需要注意什么问题4.深克隆和浅克隆有什么区别5.如何实现深克隆6.什么是动态代理7.静态代理和动态代理的区别8.如何实现动态代理?9.JDK Proxy 和 CGLib 有什么区别?10.…...
OpenAI推出Codex — ChatGPT内置的软件工程Agents
OpenAI继续让ChatGPT对开发者更加实用。 几天前,他们增加了连接GitHub仓库的支持,可以"Deep Research"并根据你自己的代码提问。 今天,该公司在ChatGPT中推出了Codex的研究预览版,这是迄今为止最强大的AI编码Agent。 它可以编写代码、修复错误、运行测试,并在…...
Win 11开始菜单图标变成白色怎么办?
在使用windows 11的过程中,有时候开始菜单的某些程序图标变成白色的文件形式,但是程序可以正常打开,这个如何解决呢? 这通常是由于快捷方式出了问题,下面跟着操作步骤来解决吧。 1、右键有问题的软件,打开…...
中级统计师-统计学基础知识-第三章 参数估计
统计学基础知识 第三章 参数估计 第一节 统计量与抽样分布 1.1 总体参数与统计量 总体参数:描述总体特征的未知量(如均值 μ \mu μ、方差 σ 2 \sigma^2 σ2、比例 π \pi π)。统计量:由样本数据计算的量(如样本…...
学习黑客HTTP 请求头
HTTP 请求头(Request Headers)是 HTTP 请求中非常重要的一部分,它们以键值对的形式向服务器传递关于请求的附加信息、客户端的能力或上下文。 理解请求头对于 Web 开发、API 交互、网络调试和安全都至关重要。下面我将常见的 HTTP 请求头字段…...
日志参数含义
一 学习率相关 base_lr:基础学习率,初始设定的学习率 -lr:当前实际使用的学习率,通常是 base_lr 经过学习率调整策略后的值,比如lrbase_lr*(1start_factor) 时间统计 time:每次迭代总时间,单位…...
[Linux]安装吧!我的软件包管理器!
一、常见安装方式 在 Linux 中,有 3 种常见的软件安装方式: (1)yam、apt (2).rpm 安装包安装 (3)源码安装 二、什么是软件包 在 Linux 下安装软件,通常的办法是下载…...
Flink 作业提交流程
Apache Flink 的 作业提交流程(Job Submission Process) 是指从用户编写完 Flink 应用程序,到最终在 Flink 集群上运行并执行任务的整个过程。它涉及多个组件之间的交互,包括客户端、JobManager、TaskManager 和 ResourceManager。…...
牛客网NC276110题解:小红的数组重排
牛客网NC276110题解:小红的数组重排 题目解析 算法思路 对数组进行排序(非降序)检查特殊情况: 如果存在三个连续相等的元素,则无解如果前两个元素都是0,则无解 若不存在特殊情况,则排序后的数…...
从零启动 Elasticsearch
elastic 有弹力的 ElaticSearch (ES)是一个基于 Lucene 的分布式全文检索引擎。可以做到近乎实时地存储、检索数据,并且本身具有良好的扩展性,可以扩展到上百台服务器,处理PB级别(1 Petabyte 1024TB&…...
nginx服务器实验
1.实验要求 1)在Nginx服务器上搭建LNMP服务,并且能够对外提供Discuz论坛服务。 在Web1、Web2服务器上搭建Tomcat 服务。 2)为nginx服务配置虚拟主机,新增两个域名 www.kgc.com 和 www.benet.com,使用http://www.kgc.…...
王树森推荐系统公开课 排序02:Multi-gate Mixture-of-Experts (MMoE)
专家模型 与上一节相同,模型的输入是一个向量,包含用户特征、物品特征、统计特征、场景特征,把向量输入三个神经网络,三个神经网络都是由很多全连接层组成,但是并不共享参数,三个神经网络各输出一个向量&a…...
【OpenCV基础 1】几何变换、形态学处理、阈值分割、区域提取和脱敏处理
目录 一、图像几何变化 1、对图片进行放大、缩小、水平放大和垂直放大 2、旋转、缩放、控制画布大小 二、图像形态学处理 1、梯度运算 2、闭运算 3、礼帽运算 4、黑帽运算 三、图像阈值分割 1、二值化处理 2、反二值化处理 3、截断阈值处理 4、超阈值零处理 5、低…...