Kafka Streams 和 Apache Flink 的无状态流处理与有状态流处理
Kafka Streams 和 Apache Flink 与数据库和数据湖相比的无状态和有状态流处理的概念和优势。
在数据驱动的应用中,流处理的兴起改变了我们处理和操作数据的方式。虽然传统数据库、数据湖和数据仓库对于许多基于批处理的用例来说非常有效,但在要求低延迟、可扩展性和实时决策的场景中,它们显得力不从心。
本文以Kafka Streams和Apache Flink为例,探讨无状态和有状态流处理的关键概念。这些原则适用于任何流处理引擎,无论是开源引擎还是云服务引擎。
让我们分析一下与传统静态数据方法相比的差异、实际用例、与 AI/ML 的关系以及巨大的价值流处理。
1.从静态到动态:重新思考数据处理
在传统系统中,数据通常先存储在数据库或数据湖中,然后再进行查询计算。这种方法非常适合批量处理任务,例如生成报告或仪表板。该流程通常如下所示:
-
存储数据:数据到达并存储在数据库或数据湖中。
-
查询和计算:应用程序稍后使用 Web 服务、请求-响应 API 或 SQL 脚本请求数据以供分析或处理。
但是,当需要以下情况时,这种方法就会失败:
-
立即采取行动:实时响应事件,例如欺诈检测。
-
可扩展性:每秒处理数千或数百万个事件。
-
持续洞察:持续分析动态数据。
进入流处理:一种数据在流经系统时被持续处理的范例。无需等待先存储数据,像Kafka Streams和Apache Flink这样的流处理引擎使业务能够在数据到达时立即采取行动。
2.案例:实时预防欺诈
这篇文章以一个反欺诈场景来说明流处理的强大功能。在这个例子中,来自各种来源(例如信用卡支付、移动应用购买)的交易都被实时监控。
系统使用三种方法标记可疑活动:
-
无状态处理:每笔交易都独立评估,并立即标记高价值付款。
-
状态处理:在时间窗口内(例如 1 小时)分析交易以检测模式,例如异常高的交易数量。
-
人工智能集成:通过预测欺诈活动的可能性,使用预先训练的机器学习模型进行实时欺诈检测。
这个例子强调了流处理如何实现即时、可扩展和智能的欺诈检测,这是传统批处理无法实现的。
为了避免混淆:虽然我在示例中使用 Kafka Streams 进行无状态处理,使用 Apache Flink 进行有状态处理,但这两个框架都能够处理这两种类型的处理。
2.1 流处理的其他行业示例
-
预测性维护(工业物联网):持续监控传感器数据以预测设备故障并安排主动维护。
-
实时广告(零售):根据实时用户互动和行为模式投放个性化广告。
-
实时投资组合监控(金融):持续分析市场数据和投资组合表现,以在市场波动期间触发即时警报或自动交易。
-
供应链优化(物流):实时跟踪货物以优化路线、减少延误并提高效率。
-
状况监测(医疗保健):持续分析患者生命体征以检测异常并触发即时警报。
-
网络监控(电信):实时检测中断或性能问题,以提高服务可靠性。
这些示例突出了流处理如何推动不同行业的实时洞察和行动。
3.什么是无状态流处理?
无状态流处理专注于独立处理每个事件。在这种方法中,系统无需维护任何先前事件的上下文或记忆。每个传入事件都是独立处理的,这意味着所应用的逻辑仅取决于该特定事件中的数据。
这使得无状态处理高效且易于扩展,因为它不需要状态管理或事件之间的协调。它非常适合诸如过滤、转换和简单的 ETL 操作等用例,在这些用例中,无需历史数据或上下文即可处理单个事件。
3.1 示例:实时支付监控
设想一个实时监控交易的反欺诈系统,用于检测和阻止可疑活动。每笔交易,无论是通过信用卡、移动应用程序还是支付网关,都会在发生时进行评估。该系统会检查是否存在异常情况,例如金额异常高、来自陌生地点的交易或快速的购买序列。
通过即时分析这些属性,系统可以标记高风险交易以供进一步检查或自动阻止。这种实时评估可确保立即发现潜在欺诈行为,从而降低财务损失的可能性并增强整体安全性。
用标记高额付款以便进一步检查。以下是 Kafka Streams 示例:
-
每笔交易在到达时都会进行评估。
-
如果交易金额超过 100(以您选择的货币计算),则会将其发送到单独的主题以供进一步审核。
Java 示例(Kafka Streams):
KStream<String, Payment> payments = builder.stream("payments");payments.filter((key, payment) -> payment.getAmount() > 100)
.to("high-risk-payments");
3.2 无状态处理的好处
-
低延迟:立即处理单个事件。
-
简单:无需追踪或管理过去的事件。
-
可扩展性:有效处理大量数据。
这种方法非常适合过滤、数据丰富和简单 ETL 任务等用例。
4.什么是状态流处理?
状态流处理更进一步,将多个事件同时考虑。系统跨事件维护状态,从而支持聚合、连接和窗口分析等复杂操作。这意味着系统可以关联指定时间段内的数据,跟踪模式,并检测跨多个事务或数据点出现的异常。
4.1 示例:通过连续模式检测预防欺诈
在预防欺诈方面,单个交易可能看起来很正常,但随着时间的推移,模式可能会揭示可疑行为。
例如,欺诈预防系统可以通过分析一小时内特定信用卡的所有交易来识别可疑行为,而不是单独评估每笔交易。
让我们通过使用 Flink SQL 分析 Apache Flink 的事务来检测异常。在此示例中:
-
该系统会在 1 小时内监控每张信用卡的交易。
-
如果一张卡在一小时内被使用超过10次,则表明存在潜在的欺诈行为。
SQL 示例(Apache Flink):
SELECT card_number, COUNT(*) AS transaction_count
FROM payments
GROUP BY TUMBLE(transaction_time, INTERVAL '1' HOUR), card_number
HAVING transaction_count > 10;
4.2 状态处理中的关键概念
状态处理依赖于维护跨多个事件的上下文,从而使系统能够执行更复杂的分析。以下是使状态流处理成为可能的关键概念:
-
窗口:定义一个时间范围来对事件进行分组(例如,滑动窗口、滚动窗口)。
-
状态管理:系统记住定义窗口内的过去事件。
-
连接:合并来自多个来源的数据以进行丰富的分析。
4.3 状态处理的好处
状态处理对于异常检测、实时监控和预测分析等高级用例至关重要:
-
复杂分析:检测随时间变化的模式。
-
事件关联:组合来自不同来源的事件。
-
实时决策:持续监控,无需重新处理数据。
5.将人工智能和机器学习引入流处理
Kafka Streams 和 Apache Flink 等流处理引擎也支持实时 AI 和机器学习模型推理。这允许您将预先训练的模型直接集成到数据处理管道中。
5.1 示例:使用 AI/ML 模型进行实时欺诈检测
设想一个使用 TensorFlow模型进行实时推理的支付欺诈检测系统。在这个系统中,来自信用卡、移动应用和支付网关等各种来源的交易会被持续传输。每笔传入的交易都会经过预处理并发送到 TensorFlow 模型,该模型会根据训练过程中学习到的模式对其进行评估。
该模型分析交易金额、地点、设备ID和频率等特征,以预测欺诈的可能性。如果模型识别出较高的欺诈概率,系统可以立即触发操作,例如标记交易、阻止交易或向安全团队发出警报。这种实时推理可确保立即检测并处理潜在的欺诈行为,从而降低风险并增强安全性。
以下是使用 Apache Flink 的 Python API 进行预测 AI 的代码示例:
Python 示例(Apache Flink):
def predict_fraud(payment):
prediction = model.predict(payment.features)
return prediction > 0.5stream = payments.map(predict_fraud)
5.2 为什么要将人工智能与流处理结合起来?
将 AI 与流处理相结合,可以释放强大的实时决策能力,使企业能够在数据流经系统时立即做出响应。以下是将 AI 与流处理相结合的一些主要优势:
-
实时预测:立即检测和预防欺诈。
-
自动化决策:将人工智能融入关键业务流程。
-
可扩展性:每秒处理数百万个预测。
Apache Kafka 和 Flink 提供低延迟、可扩展且稳健的预测。我的文章《使用 Apache Kafka 和 Flink 实现预测性 AI 和 GenAI 的实时模型推理》比较了远程推理(通过 API)和嵌入式推理(在流处理应用程序中)。
对于大型 AI 模型(例如生成式 AI 或大型语言模型),推理通常通过远程调用进行,以避免在流处理器中嵌入大型模型。
6.无状态与有状态流处理:何时使用
在无状态和有状态流处理之间进行选择,取决于用例的复杂性以及是否需要跨多个事件维护上下文。下表概述了主要区别,以帮助确定最符合特定需求的方法。
特征 | 无状态 | 有状态的 |
---|---|---|
用例 | 简单过滤,ETL | 聚合、连接 |
延迟 | 极低延迟 | 由于状态管理导致延迟略高 |
复杂度 | 简单逻辑 | 涉及多个事件的复杂逻辑 |
状态管理 | 不要求 | 需要感知 |
可扩展性 | 高的 | 取决于框架 |
最后澄清一下:虽然本文使用 Kafka Streams 进行无状态处理,使用 Flink 进行有状态流处理,但这两个框架都能够处理这两种类型。
相关文章:

Kafka Streams 和 Apache Flink 的无状态流处理与有状态流处理
Kafka Streams 和 Apache Flink 与数据库和数据湖相比的无状态和有状态流处理的概念和优势。 在数据驱动的应用中,流处理的兴起改变了我们处理和操作数据的方式。虽然传统数据库、数据湖和数据仓库对于许多基于批处理的用例来说非常有效,但在要求低延迟…...
React从基础入门到高级实战:React 基础入门 - 简介与开发环境搭建
React 简介与开发环境搭建 引言 React 是一个强大的 JavaScript 库,用于构建用户界面(UI),尤其是在单页应用(SPA)开发中表现出色。它由 Facebook(现为 Meta)开发并于 2013 年开源&…...

LM-BFF——语言模型微调新范式
gpt3(GPT3——少样本示例推动下的通用语言模型雏形)结合提示词和少样本示例后,展示出了强大性能。但大语言模型的训练门槛太高,普通研究人员无力,LM-BFF(Making Pre-trained Language Models Better Few-shot Learners)的作者受gp…...

NVMe高速传输之摆脱XDMA设计2
NVMe IP放弃XDMA原因 选用XDMA做NVMe IP的关键传输模块,可以加速IP的设计,但是XDMA对于开发者来说,还是不方便,原因是它就象一个黑匣子,调试也非一番周折,尤其是后面PCIe4.0升级。 因此决定直接采用PCIe设…...
github开源版pymol安装(ubuntu22.04实战版)
1. 克隆 PyMOL 的 GitHub 仓库 首先,你需要从 GitHub 克隆 PyMOL 的源代码: git clone https://github.com/schrodinger/pymol-open-source.git cd pymol-open-source2. 安装依赖项 PyMOL 依赖一些系统库和 Python 包,确保先安装它们&…...

pycharm无需科学上网工具下载插件的解决方案
以下是两种无需科学上网即可下载 PyCharm 插件的解决思路: 方法 1:设置 PyCharm 代理 打开 PyCharm选择菜单:File → Settings → Appearance & Behavior → System Settings → HTTP Proxy在代理设置中进行如下配置: 代理地…...

Halcon计算点到平面的距离没有那么简单
Halcon计算点到平面距离 1. 一些基本概念2. 浅谈有无符号的距离2.1 无符号距离的用武之地2.2 有符号距离的必要性 3. 无符号距离怎么算3.1 创建一个无限延展的基准平面,对距离有什么影响?Halcon代码图示 3.2 创建一个小小小的基准平面,对距离…...
基于DenseNet的医学影像辅助诊断系统开发教程
本文源码地址: https://download.csdn.net/download/shangjg03/90873921 1. 简介 本教程将使用DenseNet开发一个完整的医学影像辅助诊断系统,专注于胸部X光片的肺炎检测。我们将从环境搭建开始,逐步介绍数据处理、模型构建、训练、评估以及最终的系统部署。 2. 环境准备<…...

数据中台如何设计?中台开发技术方案,数据治理方案,大数据建设方案合集
中台的价值与核心理念 中台的核心在于“企业级能力复用”,其价值体现在四大维度: 能力整合:将分散的数字化能力(如营销、供应链)集中管理,形成核心竞争力; 业务创新:通过跨领域融合…...
Python爬虫设置IP代理
设置代理(Proxy) 作用: 当网站检测到某个IP的访问频率过高时,可能会封禁该IP。通过使用代理服务器,可以定期更换IP地址,避免被识别和封锁。 优势: 让网站无法追踪真实请求来源,提升…...

Adminer 连接mssql sqlserver
第一步 docker-compose.yml adminer部分: version: 3.8 services: adminer: image: adminer:latest container_name: adminer restart: unless-stopped volumes: - ./freetds/freetds.conf:/etc/freetds.conf:rw # 确保 :rw 可读写 co…...

C++系统IO
C系统IO 头文件的使用 1.使用系统IO必须包含相应的头文件,通常使用#include预处理指令。 2.头文件中包含了若干变量的声明,用于实现系统IO。 3.头文件的引用方式有双引号和尖括号两种,区别在于查找路径的不同。 4.C标准库提供的头文件通常没…...
利用 Python 爬虫获取唯品会 VIP 商品详情:实战指南
在当今电商竞争激烈的环境中,VIP 商品往往是商家的核心竞争力所在。这些商品不仅代表着品牌的高端形象,更是吸引高价值客户的关键。因此,获取 VIP 商品的详细信息对于市场分析、竞品研究以及优化自身产品策略至关重要。Python 作为一种强大的…...

DELL EMC PowerStore BBU更换手册
写在前面 上周给客户卖了一个BBU电池,客户要写一个更换方案。顺利完成了更换,下面就把这个更换方案给大家share出来,以后客户要写,您就Ctrlc 和Ctrlv就可以了。 下面的步骤是最理想的方式,中间没有任何的问题ÿ…...

css五边形
五边形 .fu{width: 172rpx;height: 204rpx;overflow: hidden;border-radius: 10rpx;clip-path: polygon(0% 0%, 100% 0%, 100% 75%, 50% 100%, 0% 75%, 0% 25%); }六边形 clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);...

三种常见脉冲神经网络编码方式解读
速率编码(rate coding) 速率编码使用输入特征来确定尖峰频率,例如将静态输入数据(如 MNIST 图像)转换为时间上的脉冲(spike)序列。它是将神经元发放脉冲的频率与输入值(如像素强度)…...
Go语言实战:使用 excelize 实现多层复杂Excel表头导出教程
Go 实现支持多层复杂表头的 Excel 导出工具 目录 项目介绍依赖说明核心结构设计如何支持多层表头完整使用示例总结与扩展 项目介绍 在实际业务系统中,Excel 文件导出是一项常见功能,尤其是报表类需求中常见的复杂多级表头,常规表格组件往…...

STM32F103 HAL多实例通用USART驱动 - 高效DMA+RingBuffer方案,量产级工程模板
导言 《STM32F103_LL库寄存器学习笔记12.2 - 串口DMA高效收发实战2:进一步提高串口接收的效率》前阵子完成的LL库与寄存器版本的代码,有一个明显的缺点是不支持多实例化。最近,计划基于HAL库系统地梳理一遍bootloader程序开发。在bootloader程…...

HTML回顾
html全称:HyperText Markup Language(超文本标记语言) 注重标签语义,而不是默认效果 规则 块级元素包括: marquee、div等 行内元素包括: span、input等 规则1:块级元素中能写:行内元素、块级元素&…...

机器视觉6-halcon高级教程
机器视觉6-halcon高级教程 双目立体视觉原理视差外极线几何双目标定 双目立体视觉之Halcon标定一.标定结果二.Halcon标定过程1.获取左右相机图像中标定板的区域;2.提取左右相机图像中标定板的MARK点坐标和摄像机外部参数;3.执行双目标定;4.获取非标准外极线几何到标…...

YOLOv8 的双 Backbone 架构:解锁目标检测新性能
一、开篇:为何踏上双 Backbone 探索之路 在目标检测的领域中,YOLOv8 凭借其高效与精准脱颖而出,成为众多开发者和研究者的得力工具。然而,传统的单 Backbone 架构,尽管已经在诸多场景中表现出色,但仍存在一…...

1.4 TypeScript 编译是如何工作的?
TypeScript 是 JavaScript 的超集,最显著的优势是引入了静态类型检查。它能帮助开发者在编写代码阶段捕获错误,从而提升代码的健壮性和可维护性。虽然 TypeScript 本身不能直接在浏览器或 Node.js 中运行,但它可以被编译成标准的 JavaScript&…...
【HTML-4】HTML段落标签:构建内容结构的基础
在网页开发中,段落标签<p>是最基础也是最重要的HTML元素之一。这篇博客将深入探讨段落标签的用法、最佳实践以及相关技术细节。 1. 段落标签的基本用法 HTML段落标签用于定义文本段落,浏览器会自动在段落前后添加一定的空白(margin&a…...
国际前沿知识系列五:时间序列建模方法在头部撞击运动学测量数据降噪中的应用
目录 国际前沿知识系列五:时间序列建模方法在头部撞击运动学测量数据降噪中的应用 一、引言 二、时间序列建模方法 (一)ARIMA 模型 (二)指数平滑法 (三)小波变换 三、实际案例分析 &…...
未授权访问漏洞利用链实战总结
一、渗透测试核心思路 攻击链路径: 未授权访问 → 接口信息泄露 → 敏感数据获取 → 账户爆破 → 权限提升 → 系统控制 二、关键步骤拆解与分析 信息收集阶段 初始突破口: 系统登录页看似无效,但通过JS文件分析发现隐藏接口(如 …...
Centos上搭建 OpenResty
一、OpenResty简介 OpenResty 是基于 Nginx 的扩展平台,完全兼容 Nginx 的核心功能(如 HTTP 服务和反向代理),同时通过内嵌 LuaJIT 支持,允许开发者用 Lua 脚本灵活扩展业务逻辑。它简化了动态逻辑的实现。 二、安装…...

Web 服务、 Nfs 服务器以及 Dns 服务器综合实验
要求: 1.web 服务的资源文件通过 nfs 服务器共享 www.luntan.com 2.确保所有主机时间同步 3.定义本地 dns 服务器解析 web 主机域名 实验: 主机服务程序192.168.96.142dns、nfs192.168.96.132web 服务器说明: 设备 IP服务端 192…...
保证数据库 + redis在读写分离场景中事务的一致性
在 Spring Boot 中实现数据库与 Redis 的一致性,特别是处理读写分离时,确保数据修改的事务一致性是一个常见的挑战。因为 Redis 是一个内存数据库,通常用于缓存,而关系型数据库是持久化存储,两者之间的数据同步和一致性…...

汇编语言的子程序魔法:解锁四则运算的奥秘
在嵌入式系统的世界里,汇编语言就像是魔法师手中的魔杖,能够直接操控硬件,实现各种神奇的功能。今天,我将带你走进一场充满乐趣的实验:如何用汇编语言实现四则运算,并将它们封装成子程序。这不仅是一次技术…...

快速解决Linux 中yum镜像拉取失败问题
在linux中使用yum命令拉取镜像的时候,如果出现如下类似报错: 我这里是安装Erlang环境也是同样报错: 其实就是网络环境的问题,更换为国内的镜像源就行了,可以选择cmd的ssh连接方式(命令:ssh root192.168.xxx…...