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
繁體地址,請注明出處:http://hk.pswp.cn/news/907193.shtml
英文地址,請注明出處:http://en.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;進行數據庫的管理和操…