【Note】《Kafka: The Definitive Guide》 第5章:深入 Kafka 內部結構,理解分布式日志系統的核心奧秘

《Kafka: The Definitive Guide》 第5章:深入 Kafka 內部結構,理解分布式日志系統的核心奧秘

Apache Kafka 在表面上看似只是一個“分布式消息隊列”,但其背后的存儲架構、分區機制、復制策略與高性能設計,才是它在千萬級 TPS 場景中立足的根本。


一、Kafka 的核心邏輯結構

Kafka 是一個分布式日志服務(distributed commit log),核心概念有以下幾類:

Topic

  • Kafka 中的邏輯消息分類單位;
  • 每個 Topic 由一個或多個 Partition(分區) 組成;
  • Topic 是用戶使用 Kafka 的“主題入口”。

Partition

  • Kafka 的核心并發/可擴展單元
  • 每個分區是一個有序且不可變的消息隊列;
  • 每條消息都有唯一遞增的 Offset
  • 同一 Topic 下的 Partition 可橫跨多個 Broker。

Segment 文件

  • 分區在磁盤上以日志段(segment)文件存儲;
  • 默認大小 1GB,文件名即 segment 起始 offset;
  • Kafka 對日志段定期輪轉、壓縮、刪除,保持長時間存儲能力。

二、消息寫入的完整流程(Producer → Broker)

Kafka 的寫入流程,遵循以下路徑:

Producer → Kafka Broker → 分區 → Segment 文件

寫入流程詳解:

  1. Producer 將消息發送到指定的 Topic;
  2. Kafka Broker 根據分區策略決定目標 Partition;
  3. 消息寫入 Partition 對應的 segment 文件(磁盤順序寫);
  4. Kafka 使用 頁緩存(page cache)mmap 文件映射,實現高效磁盤 IO;
  5. Producer 可選擇 acks 確認級別,決定消息寫入是否可靠(0/1/all)。

三、消息讀取流程(Consumer ← Broker)

Kafka 的消費流程為:

Consumer ← Kafka Broker ← Segment ← Offset

消費流程詳解:

  1. Consumer 使用 offset 拉取數據;
  2. Kafka 從目標 Partition 的 segment 文件讀取數據塊;
  3. 消息是按 offset 順序讀取(頁緩存命中率高);
  4. Kafka 將數據直接從磁盤 mmap 到內存,避免數據拷貝;
  5. Kafka 不需要維護消費者狀態,由 Consumer 管理 offset。

四、副本機制:Leader & Follower

Kafka 為保證數據高可用,引入了 副本復制機制

角色說明
Leader 副本接收所有寫請求,處理讀寫邏輯
Follower 副本被動同步 Leader 數據,保持一致性

Kafka 中每個分區有 N 個副本(replication.factor),其中一個是 Leader,其余是 Follower。

ISR(In-Sync Replicas)

  • Kafka 保證高可用依賴于ISR 列表
  • ISR 是 Leader + 所有“同步進度落后不超過閾值”的 Follower;
  • 若 Follower 落后太多或宕機,將被踢出 ISR。

acks=all 時,只有 ISR 中所有副本都寫入成功,Producer 才收到成功確認。


五、Kafka 的存儲結構細節

Kafka 為實現高效的持久化日志系統,設計了以下結構:

Segment 文件

  • 每個 Partition 對應一個日志目錄;
  • Segment 命名格式為 <base_offset>.log
  • Kafka 寫入時始終追加到當前 active segment;
  • 達到文件大小或時間閾值后輪轉生成新的 segment。

索引文件

每個 segment 文件配套兩個索引:

索引類型文件后綴作用
Offset 索引.index查找消息在 log 文件中的位置
時間戳索引.timeindex支持基于時間點的消息查找

這些索引在內存中加載一部分以加快訪問。


六、Kafka 的高性能 IO 原因

Kafka 能做到高吞吐和低延遲,背后有以下系統設計:

技術說明
順序寫磁盤避免隨機 IO,利用 OS 的預讀機制
mmap 映射文件避免內核態/用戶態拷貝
零拷貝(sendfile)Consumer 拉取數據時可直接從文件送到 socket
批量發送producer 批量推送提高網絡效率
頁緩存(Page Cache)熱數據常駐內存,避免頻繁磁盤讀寫

七、控制器(Kafka Controller)

Kafka 集群中有一個特殊角色:Controller Broker,負責協調分區元數據。

Controller 作用:

  • 管理分區 Leader 的選舉;
  • 監控 Broker 節點狀態;
  • 響應 ZooKeeper 狀態變化(舊版);
  • 向所有 Broker 廣播元數據變更;

從 Kafka 2.x 起,Kafka 開始引入 KRaft 模式(Kafka 自主元數據管理),以擺脫 ZooKeeper 依賴。


八、容錯與恢復機制

Kafka 為保證數據一致性與高可用,采用了多種機制:

機制說明
多副本復制保證分區數據不因 Broker 故障丟失
寫入持久化寫入后持久化到磁盤 segment
ACK 機制支持不同級別的確認策略
ISR 管理保證副本之間同步一致性
分區 Leader 切換Broker 故障自動遷移 leader,快速恢復

總結:Kafka 內部架構核心一覽

模塊說明
Partition并發和容錯的基本單位
Segment高效磁盤結構,實現順序寫與查找
Index提高 offset 與時間點查找效率
Replication保證數據可靠性的核心機制
Controller維護整個集群元數據一致性
Page Cache + mmap實現近似內存級別的讀寫速度

Kafka 的內部架構體現了“日志即數據庫”的理念。它本質是一個高可用、高吞吐、可持久化的分布式日志系統,通過簡單卻強大的設計理念(Partition + Segment + Replication),滿足了數以千計公司在海量數據處理中的實時性與可靠性需求。

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

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

相關文章

當“漏洞”成為雙刃劍——合法披露與非法交易的生死線在哪里?

首席數據官高鵬律師數字經濟團隊創作&#xff0c;AI輔助 一、一場“漏洞”的博弈&#xff1a;從“手術刀”到“毒藥”的分界 2025年夏&#xff0c;某電商平臺因系統漏洞被曝光&#xff0c;引發輿論風暴。白帽子甲在發現漏洞后&#xff0c;第一時間聯系平臺技術團隊&#xff0…

Hadoop 分布式存儲與計算框架詳解

Hadoop開發實戰:https://www.borimooc.com/course/1004.htm hadoop是適合海量數據的分布式存儲&#xff0c;和分布式計算的框架 hadoop有三大組件: mapreduce&#xff1a;適合海量數據的分布式計算&#xff0c;分為map階段、shuffle階段和reduce階段hdfs&#xff1a;分布式文…

LeetCode 2099.找到和最大的長度為 K 的子序列:自定義排序

【LetMeFly】2099.找到和最大的長度為 K 的子序列&#xff1a;自定義排序 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/find-subsequence-of-length-k-with-the-largest-sum/ 給你一個整數數組 nums 和一個整數 k 。你需要找到 nums 中長度為 k 的 子序列 &#x…

循環移位網絡設計

總體架構 模塊描述 循環移位網絡模塊&#xff08;模塊名&#xff1a;VAL_CS_PROC&#xff09;&#xff0c;對輸入數據&#xff08;in_data&#xff09;做循環移位處理&#xff0c;兩個cycle即可輸出數據。 Fig 1 循環移位模塊頂層 設計要求 00】 支持對data_num個有效數據做…

IO進程線程(IPC通訊)

目錄 一、IPC通訊機制 1&#xff09;傳統的通訊機制&#xff1a; 2&#xff09;systemV 的通訊機制&#xff1a; 3&#xff09;跨主機的通訊機制&#xff1a; 1、無名管道 1&#xff09;無名管道的概念 2&#xff09;無名管道的函數 3&#xff09;無名管道通訊&#xf…

Webpack 5 核心機制詳解與打包性能優化實踐

&#x1f916; 作者簡介&#xff1a;水煮白菜王&#xff0c;一個web開發工程師 &#x1f47b; &#x1f440; 文章專欄&#xff1a; 前端專欄 &#xff0c;記錄一下平時在博客寫作中&#xff0c;總結出的一些開發技巧和知識歸納總結?。 感謝支持&#x1f495;&#x1f495;&am…

Manus AI與多語言手寫識別

技術文章大綱&#xff1a;Manus AI與多語言手寫識別 引言 手寫識別技術的發展背景與市場需求Manus AI的定位與核心技術優勢多語言場景下的挑戰與機遇 Manus AI的核心技術架構 基于深度學習的端到端手寫識別模型多模態數據融合&#xff08;筆跡壓力、書寫軌跡等&#xff09;…

Go與Python爬蟲對比及模板實現

go語言和Python語言都可選作用來爬蟲項目&#xff0c;因為python經過十幾年的累積&#xff0c;各種庫是應有盡有&#xff0c;學習也相對比較簡單&#xff0c;相比GO起步較晚還是有很大優勢的&#xff0c;么有對比就沒有傷害&#xff0c;所以我利用一個下午&#xff0c;寫個Go爬…

Vidwall: 支持將 4K 視頻設置為動態桌面壁紙,兼容 MP4 和 MOV 格式

支持將 4K 視頻設置為動態桌面壁紙&#xff0c;兼容 MP4 和 MOV 格式。只需將視頻拖入應用界面&#xff0c;點擊即可立即應用為桌面背景。 為桌面增添生動趣味的動態壁紙效果&#xff01;錄制視頻時設置動態背景&#xff0c;也能讓畫面更吸引人。 &#x1f4e5; https://apps.…

【LeetCode 熱題 100】234. 回文鏈表——快慢指針+反轉鏈表

Problem: 234. 回文鏈表 題目&#xff1a;給你一個單鏈表的頭節點 head &#xff0c;請你判斷該鏈表是否為回文鏈表。如果是&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 文章目錄 整體思路完整代碼時空復雜度時間復雜度&#xff1a;O(N)空間復雜度&#…

【源力覺醒 創作者計劃】開源、易用、強中文:文心一言4.5或是 普通人/非AI程序員 的第一款中文AI?

前言 你有沒有發現&#xff0c;AI 正在悄悄滲透進我們的生活&#xff1a;寫文案、畫插圖、做PPT、答作業&#xff0c;它幾乎無所不能&#x1f60d; &#xff01;但很多人可能會問&#xff1a; AI&#xff0c;我能用嗎&#xff1f;用得起嗎&#xff1f;適合我嗎&#xff1f;特別…

【保姆級喂飯教程】Git圖形化客戶端Sourcetree安裝及使用教程

目錄 前言一、SourceTree簡介二、安裝教程三、使用教程1. 添加倉庫 四、評價總結后記參考文獻 前言 在查找Git Flow實現工具的時候&#xff0c;看到了SourceTree&#xff0c;支持Git Flow、GitHub Flow等多種Git工作流&#xff0c;安裝簡單學習一下。 一、SourceTree簡介 Git的…

【kafka】kafka3.3.2常用命令

查看kafka服務版本 [rootlocalhost eicar]# kafka-server-start.sh --version [2025-06-23 11:10:54,106] INFO Registered kafka:typekafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$) 3.3.2 (Commit:b66af662e61082cb) [rootlocalhost eicar]#查看消…

LastActivityView -查看電腦上的所有操作記錄

LastActivityView 是一款由 NirSoft 開發的免費工具&#xff0c;適用于 Windows 操作系統。它能夠通過分析系統日志、Prefetch 文件、圖標緩存數據庫、注冊表以及藍屏 Dump 文件等多種來源&#xff0c;綜合展示電腦從安裝系統至今的所有操作記錄。 LastActivityView 的功能 L…

English Practice - Day 3

Hi ChatGPT, I am back. can we start today’s english practice? Welcome back, Kelly! &#x1f60a; Yes — let’s begin today’s English practice! You’re doing great by showing up consistently. &#x1f4aa; Q&#xff1a; What’s the weather like today w…

quickbi看板內嵌入powerbi頁面(含單點登錄解決方法)

quickbi看板內嵌入powerbi頁面&#xff08;含單點登錄解決方法&#xff09; 實現步驟 要實現在quickbi看板中嵌入powerbi頁面&#xff0c;分4步來實現。 1. 新建quickbi看板&#xff0c; 2. 添加內嵌頁面 3. 獲取Powerbi鏈接 4. 將powerbi鏈接粘貼到內嵌頁面中 第一步&am…

CentOS-6如何配置網絡設置IP? 筆記250706

CentOS-6如何配置網絡設置IP? 筆記250706 1?? 參考 1 CentOS 6 網絡配置完全指南 在 CentOS 6 中配置網絡設置主要涉及修改 /etc/sysconfig/network-scripts/ 目錄下的配置文件。以下是詳細配置步驟&#xff1a; 一、配置靜態 IP 地址 1. 編輯網卡配置文件 vi /etc/sys…

WPF學習筆記(24)命令與ICommand接口

命令與ICommand接口一、命令1. ICommandSource2. 示例3. CommandBinding二、ICommand1.ICommand接口2. ICommand用法3. CanExecute總結一、命令 官方文檔&#xff1a;https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/advanced/commanding-overview 1. ICommandSource 官…

TCP長連接保持在線狀態

TCP長連接是指在一次TCP連接建立后&#xff0c;保持連接狀態較長時間&#xff0c;用于多次數據傳輸&#xff0c;而不是每次通信后立即斷開。這種機制對于需要頻繁通信的應用非常重要。 保持TCP長連接在線的方法 1. 心跳機制(Heartbeat) 實現原理&#xff1a;定期發送小數據包…

華為OD機試 2025B卷 - 報文響應時間 (C++ Python JAVA JS C語言)

2025B卷目錄點擊查看: 華為OD機試2025B卷真題題庫目錄|機考題庫 + 算法考點詳解 2025B卷 100分題型 題目描述 IGMP 協議中,有一個字段稱作最大響應時間 (Max Response Time) ,HOST收到查詢報文,解折出 MaxResponsetime 字段后,需要在 (0,MaxResponseTime] 時間 (s) 內選…