Kafka 在分散式系統中的 7 大應用場景

来源:https://www.cnblogs.com/waynaqua/archive/2023/10/26/17790101.html
-Advertisement-
Play Games

Kafka 介紹 Kafka 是一個開源的分散式流式平臺,它可以處理大量的實時數據,並提供高吞吐量,低延遲,高可靠性和高可擴展性。Kafka 的核心組件包括生產者(Producer),消費者(Consumer),主題(Topic),分區(Partition),副本(Replica),日誌(Log), ...


Kafka 介紹

Kafka 是一個開源的分散式流式平臺,它可以處理大量的實時數據,並提供高吞吐量,低延遲,高可靠性和高可擴展性。Kafka 的核心組件包括生產者(Producer),消費者(Consumer),主題(Topic),分區(Partition),副本(Replica),日誌(Log),偏移量(Offset)和代理(Broker)。Kafka 的主要特點有:

  • 數據磁碟持久化:Kafka 將消息直接寫入到磁碟,而不依賴於記憶體緩存,從而提高了數據的持久性和容錯性。
  • 零拷貝:Kafka 利用操作系統的零拷貝特性,減少了數據在內核空間和用戶空間之間的複製,降低了 CPU 和記憶體的開銷。
  • 數據批量發送:Kafka 支持生產者和消費者批量發送和接收數據,減少了網路請求的次數和開銷。
  • 數據壓縮:Kafka 支持多種壓縮演算法,如 gzip,snappy,lz4 等,可以有效地減少數據的大小和傳輸時間。
  • 主題劃分為多個分區:Kafka 將一個主題劃分為多個分區,每個分區是一個有序的消息隊列,分區之間可以並行地讀寫數據,提高了系統的併發能力。
  • 分區副本機制:Kafka 為每個分區設置多個副本,分佈在不同的代理節點上,保證了數據的冗餘和一致性。其中一個副本被選為領導者(Leader),負責處理該分區的讀寫請求,其他副本為追隨者(Follower),負責從領導者同步數據,併在領導者失效時進行故障轉移。

Kafka 最初是為分散式系統中海量日誌處理而設計的。它可以通過持久化功能將消息保存到磁碟直到過期,並讓消費者按照自己的節奏提取消息。與它的前輩不同(RabbitMQ、ActiveMQ),Kafka 不僅僅是一個消息隊列,它還是一個開源的分散式流處理平臺。

Kafka 的應用場景

Kafka 作為一款熱門的消息隊列中間件,具備高效可靠的消息非同步傳遞機制,主要用於不同系統間的數據交流和傳遞。下麵給大家介紹一下 Kafka 在分散式系統中的 7 個常用應用場景

  • 日誌處理與分析
  • 推薦數據流
  • 系統監控與報警
  • CDC(數據變更捕獲)
  • 系統遷移
  • 事件溯源
  • 消息隊列

1. 日誌處理與分析

日誌收集是 Kafka 最初的設計目標之一,也是最常見的應用場景之一。可以用 Kafka 收集各種服務的日誌,如 web 伺服器、伺服器日誌、資料庫伺服器等,通過 Kafka 以統一介面服務的方式開放給各種消費者,例如 Flink、Hadoop、Hbase、ElasticSearch 等。這樣可以實現分散式系統中海量日誌數據的處理與分析。

下圖是一張典型的 ELK(Elastic-Logstash-Kibana)分散式日誌採集架構。

  1. 購物車服務將日誌數據寫在 log 文件中。
  2. Logstash 讀取日誌文件發送到 Kafka 的日誌主題中。
  3. ElasticSearch 訂閱日誌主題,建立日誌索引,保存日誌數據。
  4. 開發者通過 Kibana 連接到 ElasticSeach 即可查詢其日誌索引內容。

 

2. 推薦數據流

流式處理是 Kafka 在大數據領域的重要應用場景之一。可以用 Kafka 作為流式處理平臺的數據源或數據輸出,與 Spark Streaming、Storm、Flink 等框架進行集成,實現對實時數據的處理和分析,如過濾、轉換、聚合、視窗、連接等。

淘寶、京東這樣的線上商城網站會通過用戶過去的一些行為(點擊、瀏覽、購買等)來和相似的用戶計算用戶相似度,以此來給用戶推薦可能感興趣的商品。

下圖展示了常見推薦系統的工作流程。

  1. 將用戶的點擊流數據發送到 Kafka 中。
  2. Flink 讀取 Kafka 中的流數據實時寫入數據湖中其進行聚合處理。
  3. 機器學習使用來自數據湖的聚合數據進行訓練,演算法工程師也會對推薦模型進行調整。

這樣推薦系統就能夠持續改進對每個用戶的推薦相關性。

 

3. 系統監控與報警

Kafka 常用於傳輸監控指標數據。例如,大一點的分散式系統中有數百台伺服器的 CPU 利用率、記憶體使用情況、磁碟使用率、流量使用等指標可以發佈到 Kafka。然後,監控應用程式可以使用這些指標來進行實時可視化、警報和異常檢測。

下圖展示了常見監控報警系統的工作流程。

  1. 採集器(agent)讀取購物車指標發送到 Kafka 中。
  2. Flink 讀取 Kafka 中的指標數據進行聚合處理。
  3. 實時監控系統和報警系統讀取聚合數據作展示以及報警處理。

 

4. CDC(數據變更捕獲)

CDC(數據變更捕獲)用來將資料庫中的發生的更改以流的形式傳輸到其他系統以進行複製或者緩存以及索引更新等。

Kafka 中有一個連接器組件可以支持 CDC 功能,它需要和具體的數據源結合起來使用。數據源可以分成兩種:源數據源( data source ,也叫作“源系統”)和目標數據源( Data Sink ,也叫作“目標系統”)。Kafka 連接器和源系統一起使用時,它會將源系統的數據導人到 Kafka 集群。Kafka 連接器和目標系統一起使用時,它會將 Kafka 集群的數據導人到目標系統。

下圖展示了常見 CDC 系統的工作流程。

  1. 源數據源將事務日誌發送到 Kafka。
  2. Kafka 的連接器將事務日誌寫入目標數據源。
  3. 目標數據源包含 ElasticSearch、Redis、備份數據源等。

 

5. 系統遷移

Kafka 可以用來作為老系統升級到新系統過程中的消息傳遞中間件(Kafka),以此來降低遷移風險。

例如,在一個老系統中,有購物車 V1、訂單 V1、支付 V1 三個服務,現在我們需要將訂單 V1 服務升級到訂單 V2 服務。

下圖展示了老系統遷移到新系統的工作流程。

  1. 先將老的訂單 V1 服務進行改造接入 Kafka,並將輸出結果寫入 ORDER 主題。
  2. 新的訂單 V2 服務接入 Kafka 並將輸出結果寫入 ORDERNEW 主題。
  3. 對賬服務訂閱 ORDER 和 ORDERNEW 兩個主題併進行比較。如果它們的輸出結構相同,則新服務通過測試。

 

6. 事件溯源

事件溯源是 Kafka 在微服務架構中的重要應用場景之一。可以用 Kafka 記錄微服務間的事件,如訂單創建、支付完成、發貨通知等。這些事件可以被其他微服務訂閱和消費,實現業務邏輯的協調和同步。

簡單來說事件溯源就是將這些事件通過持久化存儲在 Kafka 內部。如果發生任何故障、回滾或需要重放消息,我們都可以隨時重新應用 Kafka 中的事件。

7. 消息隊列

Kafka 最常見的應用場景就是作為消息隊列。 Kafka 提供了一個可靠且可擴展的消息隊列,可以處理大量數據。

Kafka 可以實現不同系統間的解耦和非同步通信,如訂單系統、支付系統、庫存系統等。在這個基礎上 Kafka 還可以緩存消息,提高系統的可靠性和可用性,並且可以支持多種消費模式,如點對點或發佈訂閱。

參考資料

  • https://levelup.gitconnected.com/top-8-kafka-use-cases-distributed-systems-d47fc733c7c1
  • https://blog.bytebytego.com/p/ep76-netflixs-tech-stack
  • Apache Kafka Benefits & Use Cases。https://www.confluent.io/learn/apache-kafka-benefits-and-use-cases/

總結

自此本文介紹了 Kafka 在分散式系統中的 7 大應用場景,感謝大家閱讀。

關註公眾號【waynblog】每周分享技術乾貨、開源項目、實戰經驗、國外優質文章翻譯等,您的關註將是我的更新動力!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文介紹了視頻黑屏的可能原因和解決方案。主要原因包括用戶主動關閉視頻、網路問題和渲染問題。解決方案包括優化網路穩定性、確保視頻渲染視圖設置正確、提供清晰的提示、實時監測網路質量、使用詳細的日誌系統、開啟視頻預覽功能、使用視頻流回調、處理編解碼問題、處理許可權問題、自定義視頻渲染邏輯和使用實時反饋系統。... ...
  • 頁面路由指在應用程式中實現不同頁面之間的跳轉和數據傳遞。HarmonyOS提供了Router模塊,通過不同的url地址,可以方便地進行頁面路由,輕鬆地訪問不同的頁面。 一、基礎使用 Router模塊提供了兩種跳轉模式,分別是router.pushUrl()和router.replaceUrl()。這 ...
  • ArkTS是HarmonyOS優選的主力應用開發語言。ArkTS圍繞應用開發在TypeScript(簡稱TS)生態基礎上做了進一步擴展,繼承了TS的所有特性,是TS的超集。 ArkTS在TS的基礎上主要擴展瞭如下能力: 基本語法:ArkTS定義了聲明式UI描述、自定義組件和動態擴展UI元素的能力,再 ...
  • 01. 背景 最近項目需求里有個文件上傳功能,而客戶需求里的文件基本上是比較大的,基本上得有 1 GiB 以上的大小,而上傳大文件尤其是讀大文件,可能會造成卡 UI 或者說點不動的問題。而用後臺的 Worker 去實現是一個比較不錯的解決辦法。 02. 原理講解 02.01. Shared Work ...
  • 在前端編程中,處理一些簡短、快速的操作,在主線程中就可以完成。 但是,在處理一些耗時比較長以至於比較明顯的事情,比如讀取一個大文件或者發出一個網路請求,就需要子線程來完成,以避免只用單線程時造成頁面一時無法響應的事情。 以發送網路請求為例,在以往的JavaScript中,使用多個回調函數來處理請求返 ...
  • 本文簡介 帶尬猴,我是德育處主任 Fabric.js 有圖案畫筆功能,這個功能可以簡單理解成“刮刮卡”效果。 如果只是看 Fabric.js 文檔可能還不太明白 圖案畫筆 PatternBrush 是如何使用。 本文將講解如何配置這款畫筆的基礎屬性。 圖案畫筆(筆刷) PatternBrush 先看 ...
  • 一、什麼是JavaScript JavaScript是用於實現用戶交互、動態控制文檔的外觀和內容,動態控制瀏覽器操作、創建cookies等網頁行為的跨平臺、跨瀏覽器的由瀏覽器解釋執行的客戶端腳本語言 二、JavaScript的三種引入方式 1、引入.js尾碼的文件,註意一般外部引入js的文件,放在b ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 業務場景: 產品有個功能是設置主題。類似手機自動切換壁紙,以及其他功能顏色,icon,字體等。 管理員需要在後端管理系統多次下載不同主題,(至於要幹啥就不說了...),主題中可能有 30 ~ 100個高清壁紙, icon 等。現在每次下載 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...