Kafka Streams 和 Apache Flink 的无状态流处理与有状态流处理

Kafka Streams 和 Apache Flink 与数据库和数据湖相比的无状态和有状态流处理的概念和优势。

在数据驱动的应用中,流处理的兴起改变了我们处理和操作数据的方式。虽然传统数据库、数据湖和数据仓库对于许多基于批处理的用例来说非常有效,但在要求低延迟、可扩展性和实时决策的场景中,它们显得力不从心。

本文以Kafka Streams和Apache Flink为例,探讨无状态和有状态流处理的关键概念。这些原则适用于任何流处理引擎,无论是开源引擎还是云服务引擎。

让我们分析一下与传统静态数据方法相比的差异、实际用例、与 AI/ML 的关系以及巨大的价值流处理。

1.从静态到动态:重新思考数据处理

在传统系统中,数据通常先存储在数据库或数据湖中,然后再进行查询计算。这种方法非常适合批量处理任务,例如生成报告或仪表板。该流程通常如下所示:

  1. 存储数据:数据到达并存储在数据库或数据湖中。

  2. 查询和计算:应用程序稍后使用 Web 服务、请求-响应 API 或 SQL 脚本请求数据以供分析或处理。

但是,当需要以下情况时,这种方法就会失败:

  • 立即采取行动:实时响应事件,例如欺诈检测。

  • 可扩展性:每秒处理数千或数百万个事件。

  • 持续洞察:持续分析动态数据。

进入流处理:一种数据在流经系统时被持续处理的范例。无需等待先存储数据,像Kafka Streams和Apache Flink这样的流处理引擎使业务能够在数据到达时立即采取行动。

2.案例:实时预防欺诈

这篇文章以一个反欺诈场景来说明流处理的强大功能。在这个例子中,来自各种来源(例如信用卡支付、移动应用购买)的交易都被实时监控。

图片

系统使用三种方法标记可疑活动:

  1. 无状态处理:每笔交易都独立评估,并立即标记高价值付款。

  2. 状态处理:在时间窗口内(例如 1 小时)分析交易以检测模式,例如异常高的交易数量。

  3. 人工智能集成:通过预测欺诈活动的可能性,使用预先训练的机器学习模型进行实时欺诈检测。

这个例子强调了流处理如何实现即时、可扩展和智能的欺诈检测,这是传统批处理无法实现的。

为了避免混淆:虽然我在示例中使用 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 状态处理中的关键概念

状态处理依赖于维护跨多个事件的上下文,从而使系统能够执行更复杂的分析。以下是使状态流处理成为可能的关键概念:

  1. 窗口:定义一个时间范围来对事件进行分组(例如,滑动窗口、滚动窗口)。

  2. 状态管理:系统记住定义窗口内的过去事件。

  3. 连接:合并来自多个来源的数据以进行丰富的分析。

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 进行有状态流处理,但这两个框架都能够处理这两种类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/907193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【后端高阶面经:缓存篇】34、高并发下缓存穿透、击穿、雪崩怎么解决

一、缓存三大核心问题:穿透、击穿、雪崩的本质区别 (一)概念对比表 问题类型核心特征典型场景危害等级缓存穿透数据在缓存和数据库中均不存在,请求直接穿透到数据库恶意攻击(伪造不存在的ID)、业务逻辑漏洞★★★★★缓存击穿热点数据在缓存中过期,大量并发请求同时击穿…

使用Rancher在CentOS 环境上部署和管理多Kubernetes集群

引言 随着容器技术的迅猛发展&#xff0c;Kubernetes已成为容器编排领域的事实标准。然而&#xff0c;随着企业应用规模的扩大&#xff0c;多集群管理逐渐成为企业IT架构中的重要需求。 Rancher作为一个开源的企业级多集群Kubernetes管理平台&#xff0c;以其友好的用户界面和…

【Mini-F5265-OB开发板试用测评】按键控制测试

本文介绍了如何使用按键控制 MCU 引脚的输出电平。 原理 由原理图可知 板载用户按键 K1 和 K2 分别与主控的 PB0 和 PB1 相连。 代码 #define _MAIN_C_#include "platform.h" #include "gpio_key_input.h" #include "main.h"int main(void) …

用C#最小二乘法拟合圆形,计算圆心和半径

用C#最小二乘法拟合圆形&#xff0c;计算圆心和半径 using System; using System.Collections.Generic;namespace ConsoleApp2 {internal class Program{static void Main(string[] args){List<Tuple<double, double>> points new List<Tuple<double, doubl…

四、web安全-行业术语

1. 肉鸡 所谓“肉鸡”是一种很形象的比喻&#xff0c;比喻那些可以随意被我们控制的电脑&#xff0c;对方可以是WINDOWS系统&#xff0c;也可以是UNIX/LINUX系统&#xff0c;可以是普通的个人电脑&#xff0c;也可以是大型的服务器&#xff0c;我们可以象操作自己的电脑那样来…

MYSQL丢失pid处理方式

1、停止服务器 systemctl stop mysqld 2、修改 /data/mysql/etc/my.cnf pid-file /tmp/mysql/mysql.pid 改为 pid-file /data/mysql/mysql.pid 3、创建 touch /data/mysql/mysql.pid ch…

《计算机组成原理》第 2 章 - 计算机的发展及应用​

计算机从诞生至今&#xff0c;经历了翻天覆地的变化&#xff0c;应用领域也在不断拓展。本文将结合 Java 代码实例&#xff0c;带你深入了解计算机的发展历程、应用场景及未来展望&#xff0c;让你在学习理论的同时&#xff0c;还能通过实践加深理解。​ 2.1 计算机的发展史​ …

Github 2025-05-26 开源项目周报Top15

根据Github Trendings的统计,本周(2025-05-26统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5TypeScript项目3JavaScript项目3C++项目2Roff项目1Go项目1C#项目1Jupyter Notebook项目1Rust项目1CSS项目1Shell项目1Dockerfile项目…

详解MYSQL索引失效问题排查

目录 一、快速定位索引失效的步骤 1. 使用 EXPLAIN 分析执行计划详解Mysql的Explain语句 2. 确认索引是否存在 3. 检查查询条件是否符合索引规则 二、常见索引失效场景及解决方法 1. 索引列参与计算或函数 2. 隐式类型转换 3. 使用 LIKE 以通配符开头 4. 使用 OR 连接…

在 springboot3.x 使用 knife4j 以及常见报错汇总

目录 引言&#xff1a; 引入依赖&#xff1a; 配置文件&#xff1a; 过滤静态资源&#xff1a; 增强模式&#xff1a; 便捷地址访问&#xff1a; 常见问题&#xff1a; 注解使用实例&#xff1a; &#x1f4c4; ​文档参考地址​&#xff1a; SpringBoot 3.x 结合 …

【C/C++】环形缓冲区:高效数据流转核心

文章目录 1 核心结构与原理1.1 组成1.2 内存布局1.3 关键操作 2 实现细节与优化2.1 满/空状态的判断2.2 多线程安全&#xff08;无锁实现&#xff09;2.3 性能优化 3 典型应用场景4 代码示例5 优缺点6 对比7 进阶 环形缓冲区&#xff08;Ring Buffer&#xff09;&#xff0c;又…

功耗仅4W!迷你服务器黑豹X2(Panther X2)卡刷、线刷刷入Armbian(ubuntu)系统教程

功耗仅4W&#xff01;迷你服务器黑豹X2&#xff08;Panther X2&#xff09;卡刷、线刷刷入Armbian&#xff08;ubuntu&#xff09;系统教程 前言 前段时间逛海鲜市场的时候留意到一个矿渣盒子&#xff0c;黑豹x2&#xff0c;又是一个类似迅雷赚钱宝这样的挖矿项目已经gg的定制…

【Elasticsearch】更新操作原理

Elasticsearch 的更新操作&#xff08;如 _update 和 _update_by_query&#xff09;在底层实现上有一些复杂的原理&#xff0c;这些原理涉及到 Elasticsearch 的数据存储机制、索引机制以及事务日志&#xff08;Translog&#xff09;的使用。以下是 Elasticsearch 更新操作的主…

【C++】红黑树的实现

目录 前言 一、红黑树的概念 二、红黑树的实现 三、红黑树的查找 四、红黑树的验证 五、红黑树的删除 总结 前言 本文讲解红黑树&#xff0c;主要讲解插入部分的实现&#xff0c;建议在理解了AVL树的旋转后再来学习红黑树&#xff0c;因为红黑树也涉及旋转&#xff0c;并…

IPv4地址的主要配置项介绍

1. IPv4 主要配置项 (1) IP 地址&#xff08;IP Address&#xff09; 作用&#xff1a;唯一标识网络中的设备&#xff08;如 192.168.1.100&#xff09;。分类&#xff1a; 静态 IP&#xff1a;手动配置&#xff0c;适用于服务器、打印机等固定设备。动态 IP&#xff08;DHCP…

nginx 基于IP和用户的访问

nginx的下载 yum install nginx.x86_64 -y 启动服务 systemctl enable --now nginx.service 查看服务目录 [rootwebserver ~]# rpm -ql nginx /usr/bin/nginx-upgrade /usr/lib/systemd/system/nginx.service /usr/share/man/man3/nginx.3pm.gz /usr/share/man/man8/nginx…

Debian操作系统全面解析:从起源到应用

Debian 操作系统全面解析:从起源到应用 在开源操作系统的广袤天地中,Debian 占据着极为重要的地位。它凭借自身诸多突出特性,吸引了全球无数用户与开发者的目光,从个人桌面应用到大型服务器部署,从普通办公场景到专业科研领域,Debian 都展现出了强大的适应性与可靠性,为…

【springMVC】springMVC学习系列一:springMVC的组件

系列文章目录 前言 spring mvc 它解决了什么问题呢&#xff1f; 1.URL映射 2. 表单参数映射 3. 调用目标Control 4. 数据模型映射 5. 视图解析 6. 异常处理 上述解决在spring mvc 中都体现在如下组件当中 HandlerMapping&#xff1a; url与控制器的映谢 HandlerAdapter&#…

【Vue Vapor Mode :技术突破与性能优化的可能性】

Vue Vapor Mode &#xff1a;技术突破与性能优化的可能性 前言 作为一名有着Vue 2经验和Vue 3经验的开发者&#xff0c;你一定深刻体会过Vue从Options API到Composition API的演进&#xff0c;也感受过Vue 3在性能上相比Vue 2的显著提升。现在&#xff0c;Vue团队正在开发一个…

MySQL数据库零基础入门教程:从安装配置到数据查询全掌握【MySQL系列】

第1章&#xff1a;认识MySQL 1.1 什么是MySQL&#xff1f; MySQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由瑞典MySQL AB公司开发&#xff0c;现由Oracle公司维护。它使用结构化查询语言&#xff08;SQL&#xff09;进行数据库的管理和操…