Java學習第一百部分——Kafka

目錄

一、前言提要

二、核心價值

三、核心架構

四、基本用途

五、優勢總結

六、相關技術

七、詳細用途

八、高級用法

九、最佳實踐

十、總結定位


一、前言提要

? ? ? ?Apache Kafka?是一個強大的開源分布式流處理平臺,專為處理高吞吐量、低延遲的實時數據流而設計。它最初由 LinkedIn 開發,后成為 Apache 軟件基金會的頂級項目,如今是現代大數據生態系統的核心基礎設施之一。

二、核心價值

  • 解耦生產者與消費者:?數據生產者(如應用日志、傳感器、用戶行為追蹤)只需將數據發布到 Kafka,無需關心誰消費、何時消費。消費者按需訂閱所需數據。

  • 高吞吐與低延遲:?每秒可處理數百萬條消息,延遲可低至毫秒級,滿足實時處理需求。

  • 持久化存儲:?消息按配置策略(如時間或大小)持久存儲在磁盤上,支持重播歷史數據(消費者可調整偏移量重新消費)。

  • 可擴展性:?通過簡單地增加服務器(Broker)即可線性擴展吞吐量和存儲容量。

  • 容錯性:?數據在集群中被復制(副本因子可配置),即使部分節點故障,數據也不會丟失,服務仍可用。

  • 流處理基礎:?不僅傳輸數據,其 Kafka Streams 庫和與流處理框架(如 Flink, Spark Streaming)的集成使其成為構建實時流處理應用的理想基石。

三、核心架構

1. ?Broker

  • Kafka 集群由一臺或多臺服務器組成,每臺服務器稱為一個 Broker。

  • Broker 負責接收生產者消息、持久化存儲消息、處理消費者拉取請求。

  • 集群通過 ZooKeeper(或較新版本的自研 KRaft 模式)進行協調管理(Leader 選舉、元數據存儲等)。

2. ?Topic

  • 數據的類別或主題。?生產者將消息發布到特定的 Topic,消費者訂閱感興趣的 Topic 來消費消息。

  • 消息是字節數組,具體格式由生產者/消費者約定(如 JSON, Avro, Protobuf)。

3. ?Partition

  • Topic 的物理分片。?一個 Topic 可以被分成多個 Partition。

  • 核心作用:并行處理與擴展——不同 Partition 可以分布在不同的 Broker 上,允許生產者和消費者并行讀寫(生產者消息根據分區策略路由到不同 Partition;消費者組內不同消費者可消費不同 Partition),極大提升吞吐量。順序性保證——Kafka 僅保證單個 Partition 內消息的順序性。 不同 Partition 的消息順序無法保證。

  • 每條消息在 Partition 內有一個唯一的、單調遞增的序列號,稱為 Offset。

4. ?Producer

  • 向 Kafka Topic 發布消息的客戶端應用程序。

  • 負責將消息發送到 Topic 的特定 Partition(可指定 Key 或使用輪詢等策略)。

  • 可配置消息確認機制(acks:0,1,all),平衡性能與數據可靠性。

5. ?Consumer
(1)從 Kafka Topic 訂閱并消費消息的客戶端應用程序。
(2)通常組成 Consumer Group。

  • Consumer Group:?一組共同消費一個或多個 Topic 的 Consumers 的邏輯集合。

  • 負載均衡:?Topic 的 Partition 會被分配給 Consumer Group 內的各個 Consumer。每個 Partition 在同一時間只能被同一個 Group 內的一個 Consumer 消費。通過增減 Consumer 數量實現自動負載均衡和擴展。

  • Offset 管理:?Consumer 負責跟蹤自己消費的進度(Offset)。Offset 通常存儲在 Kafka 內部的 `__consumer_offsets` Topic 中。Consumer 可以提交 Offset(自動或手動),記錄消費位置以便故障恢復或重播。

6. ?Replica

  • 每個 Partition 有多個副本(副本因子可配置),分布在不同的 Broker 上,提供容錯能力。

  • Leader Replica:?每個 Partition 有一個 Leader,負責處理該 Partition 的所有讀寫請求。

  • Follower Replica:?被動地、異步地從 Leader 復制數據。如果 Leader 失效,Kafka 會從 Follower 中選舉出一個新的 Leader(通過 ZooKeeper/KRaft)。

  • ISR:?In-Sync Replicas (同步副本集合)。包含 Leader 和那些與 Leader 數據差距在一定閾值內的 Follower。只有 ISR 中的副本才有資格被選舉為新的 Leader。確保數據一致性和可用性。

7. ?ZooKeeper / KRaft

  • 傳統模式:?Kafka 依賴 Apache ZooKeeper 來管理集群元數據(Broker 列表、Topic 配置、Partition Leader 信息、Consumer Group Offset - 舊版本)和進行 Leader 選舉。ZooKeeper 是另一個分布式協調服務。

  • KRaft 模式:?新版本 Kafka(2.8+ 開始實驗,3.0+ 逐步穩定)引入 **KRaft (Kafka Raft Metadata mode)**,使用 Kafka 自身實現的 Raft 共識協議來管理元數據,**完全替代 ZooKeeper**,簡化了架構、部署和運維,提高了可擴展性。

四、基本用途

1. ?消息隊列 / 發布-訂閱系統:?解耦微服務、異步通信、緩沖。
2. ?流式數據管道:?在不同系統(數據庫、搜索引擎、數據倉庫、Hadoop、其他服務)之間可靠地傳輸實時數據流。例如:

  • 用戶活動追蹤 -> Kafka -> 實時分析/推薦系統

  • 應用日志 -> Kafka -> ELK (Elasticsearch, Logstash, Kibana) 堆棧

  • 數據庫變更捕獲 (CDC) -> Kafka -> 數據倉庫 / 緩存更新

3. ?流處理:

  • Kafka Streams:?Kafka 自帶的輕量級 Java 庫,用于構建實時流處理應用(聚合、連接、窗口計算、狀態管理等),直接在應用中處理 Kafka 數據。

  • ksqlDB:基于 Kafka Streams 構建的流式 SQL 引擎,允許用 SQL 查詢和處理 Kafka 數據。

  • 與其他流處理引擎集成:?作為 Flink、Spark Streaming、Storm 等框架的可靠數據源和輸出端。

4. ?事件溯源:?將應用程序狀態的變化記錄為一序列不可變的事件(存儲在 Kafka Topic 中),可用于重建狀態、審計、實現 CQRS。
5. ?運營監控:?集中收集和傳輸服務器指標、應用日志進行實時監控和告警。

五、優勢總結

  • 高性能:?極致優化的磁盤順序讀寫、零拷貝技術、批處理、高效數據結構。

  • 高可靠:?數據持久化、多副本機制、ISR 保證。

  • 高擴展:?輕松添加 Broker 和 Consumer 應對增長。

  • 持久性與重播:?數據按需保留,消費者可靈活重播歷史數據。

  • 生態繁榮:?龐大的社區支持,豐富的客戶端庫(多種語言),深度集成主流大數據和流處理工具。

六、相關技術

  • 消息隊列:?RabbitMQ, ActiveMQ, RocketMQ, Amazon SQS, Google Pub/Sub

  • 流處理平臺:?Apache Pulsar (也提供消息隊列功能), Apache Flink, Spark Streaming

  • 日志聚合:?Fluentd, Logstash

七、詳細用途

1. 實時數據管道與系統集成

  • 場景說明:Kafka Connect實現異構數據源的無縫集成。例如金融場景中,通過JDBC連接器將關系數據庫(如MySQL)的增量變更同步至Kafka主題,供下游實時分析系統消費。?

  • 典型案例:Uber使用Kafka Connect將司機和乘客應用的實時事件流傳輸至Hadoop數據湖,日均處理數萬億條消息。

2. 日志聚合與監控平臺

  • 技術實現:客戶端部署Filebeat/Fluentd采集日志,寫入Kafka后接入Elasticsearch,通過Kibana可視化展示。?

  • 優勢:高吞吐量(可達1500萬條/秒)支撐海量日志實時處理,同時保留數據重放能力。

3. 物聯網(IoT)數據處理

  • 應用模式:傳感器數據寫入Kafka后,通過Kafka Streams或Flink實時計算指標(如設備狀態預測)。?

  • 案例:智能制造業中,Kafka處理設備傳感器流數據,實時觸發故障告警或優化生產調度。

4. 金融級事務保障
(1)關鍵需求:支付/訂單系統需嚴格保證數據一致性。?
(2)Kafka方案:?

  • 生產者端:啟用冪等性(`enable.idempotence=true`) + 事務(`transactional.id`配置),確保消息不重復。?

  • 消費者端:設置`isolation.level=read_committed`,僅消費已提交事務的消息。

5. 流式處理與實時分析?

  • 技術棧:Kafka Streams API實現低延遲轉換。例如電商場景中,實時將用戶行為流映射為“用戶畫像-商品”關聯流,寫入下游推薦主題。?

  • 優勢:亞秒級延遲支持即時業務響應(如Netflix的實時視頻推薦)。

八、高級用法

1. 數據集成高級技巧:Kafka Connect轉換器

  • 問題:數據庫字段名與目標JSON字段不匹配,或時間格式需轉換。?

  • 解決方案:在Connect配置中內置轉換器:?

transforms=ConvertDate,Rename? ? ? ? ? ? ? ? ? ? ? transforms.ConvertDate.type=org.apache.kafka.connect.transforms.TimestampConverter$Value
transforms.ConvertDate.field=created_at ?# 待轉換字段
transforms.ConvertDate.format=yyyy-MM-dd HH:mm:ss
transforms.Rename.type=org.apache.kafka.connect.transforms.ReplaceField$Value
transforms.Rename.renames=old_name:new_name ?# 字段重命名

ps:通過輕量級轉換避免下游處理復雜性。

2. 消息語義精準控制

語義類型生產者配置消費者配置適用場景
At Least Onceacks=all業務處理成功后手動提交offset通用場景(容忍少量重復)
Exactly Once啟用事務 +?enable.idempotence=trueisolation.level=read_committed支付/訂單(強一致性)
At Most Onceacks=0先提交offset后處理業務通知類(容忍丟失)

3. 百萬級吞吐量優化策略
(1)分區設計:?

  • 分區數 ≥ 消費者數量,避免資源閑置。?

  • 自定義分區器(如粘性分區),提升批量發送效率:?

? ? ? ? public class StickyPartitioner implements Partitioner {@Overridepublic int partition(String topic, Object key, ...) {// 固定時間段內綁定相同分區return ... ;}}

(2)批量與壓縮:?

  • 設置`linger.ms=10`(等待批量) + `batch.size=16384`(16KB批次)。?

  • 啟用Snappy壓縮(`compression.type=snappy`),減少網絡負載40%+。

4. 復雜流處理模式
(1)延時隊列:?

  • 方案:消息暫存內部主題(`delay_topic`),由獨立服務檢測到期后轉發至目標主題。?

  • 適用:訂單超時關單、定時通知等場景。?

(2)消息路由:?

  • 在Headers中添加`routingkey`,消費者通過攔截器按需過濾。

5. 運維與安全增強

  • 監控:跟蹤Consumer Lag(延遲偏移量),預警消費瓶頸。?

  • 安全:啟用SSL/TLS加密通信:?

? ? ?security.protocol=SSLssl.truststore.location=/path/to/truststore.jksssl.keystore.password=your_password

九、最佳實踐

  • 性能優先場景:如日志收集,采用`At Least Once`語義 + 分區負載均衡。 ?

  • 強一致性場景:金融交易必選`Exactly Once`語義 + 事務機制。 ?

  • 擴展性設計:單個Topic分區數不超過集群Broker × 100(防文件句柄耗盡)。

  • 實踐啟示:Netflix、Uber等企業已驗證Kafka在超大規模場景的可行性,但其高級功能(如事務、Connect轉換器)需結合業務邏輯精細調參。對于延時隊列等復雜需求,可參考的二級主題路由方案,平衡精度與復雜度。

  • 典型場景:?當需要處理海量實時數據流,要求高吞吐、低延遲、持久化存儲、高可靠、可擴展,并可能涉及流處理時,Kafka 通常是首選。

十、總結定位

? ? ? ?Kafka是一個分布式、高吞吐、可水平擴展、持久化、容錯的發布—訂閱消息系統和流處理平臺。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/92062.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92062.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92062.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[spring-cloud: 負載均衡]-源碼分析

獲取服務列表 ServiceInstanceListSupplier ServiceInstanceListSupplier 接口是一個提供 ServiceInstance 列表的供應者&#xff0c;返回一個響應式流 Flux<List<ServiceInstance>>&#xff0c;用于服務發現。 public interface ServiceInstanceListSupplier e…

Oracle 在線重定義

Oracle 在線重定義&#xff08;Online Redefinition&#xff09; 是一種功能&#xff0c;通過DBMS_REDEFINITION 包提供&#xff0c;允許DBA在不需要停止或顯著影響數據庫正常操作的情況下&#xff0c;對數據庫表進行結構化修改。可以實現的功能將表移動到其它表空間增加、修改…

Web 開發 12

1 網址里的 “搜索請求” 結構 這張圖是在教你怎么看懂 網址里的 “搜索請求” 結構&#xff0c;特別基礎但超重要&#xff0c;對你學前端幫別人做搜索功能超有用&#xff0c;用大白話拆成 3 步講&#xff1a; 1. 先看「協議&#xff08;Protocol&#xff09;」 HTTPS 就是瀏…

網絡安全 | 如何構建一個有效的企業安全響應團隊

網絡安全 | 如何構建一個有效的企業安全響應團隊 一、前言 二、團隊組建的基礎要素 2.1 人員選拔 2.2 角色定位 三、團隊應具備的核心能力 3.1 技術專長 3.2 應急處置能力 3.3 溝通協作能力 四、團隊的運作機制 4.1 威脅監測與預警流程 4.2 事件響應流程 4.3 事后復盤與改進機制…

HTTP、WebSocket、TCP、Kafka等通訊渠道對比詳解

在當今互聯的數字世界中&#xff0c;通信渠道是系統、應用程序和設備之間數據交換的支柱。從傳統的HTTP和TCP協議到專為特定場景設計的Kafka和MQTT等平臺&#xff0c;這些通信方式滿足了從實時消息傳遞到大規模數據流處理的多樣化需求。本文將深入探討主要的通信協議和平臺。一…

臭氧、顆粒物和霧霾天氣過程的大氣污染物計算 CAMx模型

隨著我國經濟快速發展&#xff0c;我國面臨著日益嚴重的大氣污染問題。大氣污染是工農業生產、生活、交通、城市化等方面人為活動的綜合結果&#xff0c;同時氣象因素是控制大氣污染的關鍵自然因素。大氣污染問題既是局部、當地的&#xff0c;也是區域的&#xff0c;甚至是全球…

數據結構(13)堆

目錄 1、堆的概念與結構 2、堆的實現 2.1 向上調整算法&#xff08;堆的插入&#xff09; 2.2 向下調整算法&#xff08;堆的刪除&#xff09; 2.3 完整代碼 3、堆的應用 3.1 堆排序 3.2 Top-K問題 1、堆的概念與結構 堆是一種特殊的二叉樹&#xff0c;根結點最大的堆稱…

C++模板知識點3『std::initializer_list初始化時逗號表達式的執行順序』

std::initializer_list初始化時逗號表達式的執行順序 在使用Qt Creator4.12.2&#xff0c;Qt5.12.9 MinGW開發的過程中發現了一個奇怪的現象&#xff0c;std::initializer_list<int>在初始化構造時的執行順序反了&#xff0c;經過一番測試發現&#xff0c;其執行順序可正…

【Unity3D】Shader圓形弧度裁剪

片元著色器&#xff1a; float3 _Center float3(0, 0, 0); float3 modelPos i.modelPos;// float angle atan2(modelPos.y - _Center.y, modelPos.x - _Center.x); // 計算角度&#xff0c;范圍-π到π float angle atan2(modelPos.y - _Center.y, modelPos.z - _Center.z)…

curl發送文件bodyParser無法獲取請求體的問題分析

問題及現象 開發過程使用curlPUT方式發送少量數據, 后端使用NodeJSexpress框架bodyParser,但測試發現無法獲取到請求體內容,現象表現為req.body 為空對象 {} 代碼如下: const bodyParser require(body-parser); router.use(/api/1, bodyParser.raw({limit: 10mb, type: */*}))…

Vue3 學習教程,從入門到精通,Vue 3 內置屬性語法知識點及案例代碼(25)

Vue 3 內置屬性語法知識點及案例代碼 Vue 3 提供了豐富的內置屬性&#xff0c;幫助開發者高效地構建用戶界面。以下將詳細介紹 Vue 3 的主要內置屬性&#xff0c;并結合詳細的案例代碼進行說明。每個案例代碼都包含詳細的注釋&#xff0c;幫助初學者更好地理解其用法。1. data …

機器學習基石:深入解析線性回歸

線性回歸是機器學習中最基礎、最核心的算法之一&#xff0c;它為我們理解更復雜的模型奠定了基礎。本文將帶你全面解析線性回歸的方方面面。1. 什么是回歸&#xff1f; 回歸分析用于預測連續型數值。它研究自變量&#xff08;特征&#xff09;與因變量&#xff08;目標&#xf…

OneCodeServer 架構深度解析:從組件設計到運行時機制

一、架構概覽與設計哲學1.1 系統定位與核心價值OneCodeServer 作為 OneCode 平臺的核心服務端組件&#xff0c;是連接前端設計器與后端業務邏輯的橋梁&#xff0c;提供了從元數據定義到應用程序執行的完整解決方案。它不僅是一個代碼生成引擎&#xff0c;更是一個全生命周期管理…

Jwts用于創建和驗證 ??JSON Web Token(JWT)?? 的開源庫詳解

Jwts用于創建和驗證 ??JSON Web Token&#xff08;JWT&#xff09;?? 的開源庫詳解在 Java 開發中&#xff0c;提到 Jwts 通常指的是 ??JJWT&#xff08;Java JWT&#xff09;庫??中的核心工具類 io.jsonwebtoken.Jwts。JJWT 是一個專門用于創建和驗證 ??JSON Web To…

如果發送的數據和接受的數據不一致時,怎么辦?

那ART4222這個板卡舉例&#xff0c;我之間輸入一個原始數據“6C532A14”&#xff0c;但是在選擇偶校驗時&#xff0c;接收的是“6C532B14”&#xff0c;我發送的碼率&#xff08;運行速度&#xff09;是100000&#xff0c;但接受的不穩定&#xff0c;比如&#xff1b;“100100.…

ISCC認證:可持續生產的新標桿。ISCC如何更快認證

在全球可持續發展浪潮中&#xff0c;ISCC&#xff08;國際可持續與碳認證&#xff09;體系已成為企業綠色轉型的重要工具。這一國際公認的認證系統覆蓋農業、林業、廢棄物處理等多個領域&#xff0c;通過嚴格的可持續性標準、供應鏈可追溯性要求和碳排放計算規范&#xff0c;建…

想對學習自動化測試的一些建議

Python接口自動化測試零基礎入門到精通&#xff08;2025最新版&#xff09;接觸了不少同行&#xff0c;由于他們之前一直做手工測試&#xff0c;現在很迫切希望做自動化測試&#xff0c;其中不乏工作5年以上的人。 本人從事軟件自動化測試已經近5年&#xff0c;從server端到web…

電子電氣架構 ---智能電動汽車嵌入式軟件開發過程中的block點

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

createAsyncThunk

下面&#xff0c;我們來系統的梳理關于 Redux Toolkit 異步操作&#xff1a;createAsyncThunk 的基本知識點&#xff1a;一、createAsyncThunk 概述 1.1 為什么需要 createAsyncThunk 在 Redux 中處理異步操作&#xff08;如 API 調用&#xff09;時&#xff0c;傳統方法需要手…

STM32F103C8T6 BC20模塊NBIOT GPS北斗模塊采集溫濕度和經緯度發送到EMQX

云平臺配置 訪問下載頁面&#xff1a;免費試用 EMQX Cloud 或 EMQX Enterprise | 下載 EMQX&#xff0c;根據需求選擇對應版本下載。將下載的壓縮包上傳至服務器&#xff08;推薦存放于C盤根目錄&#xff0c;便于后續操作&#xff09;&#xff0c;并解壓至指定路徑&#xff08…