前言
本系列是筆者閱讀Kafka經典書籍《Kakfa技術內幕》的筆記,對這份閱讀筆記想寫成什么樣子有以下幾個設想:
- 不是對書中內容的摘抄,因此想要對該書詳細內容有更多了解的同學,可以自行購書翻閱,
- 每章或每節形成一張思維導圖,目的是總結書中內容,構建自己的知識架構,
- 提煉問題并給出答案,答案盡量用自己組織的語言通俗易懂的表達出來,而非復制粘貼,
第1章 Kafka 入門
思維導圖

問題思考
Kafka的主題與磁區內部是如何存盤的,它有什么特點?(磁區模型)
Kafka集群為每個主題維護了分布式的磁區日志檔案,物理意義上把主題看作磁區的日志檔案,
特點:
- 每個磁區內的日志檔案中的訊息保證有序,
- 對同一消費組來說,同一主題的每個磁區只會分配給的消費組中唯一的一個消費者,
- 磁區是訊息處理的并行單元,是Kafka中訊息處理的最小粒度,
與傳統的訊息系統相比,Kafka的消費模型有什么優點?(消費模型)
Kafka的消費模型是“拉取模型”,傳統的訊息系統是“推送模型”,優點:
- 推送模型要求訊息代理記錄訊息的消費狀態,如果采用訊息代理推送訊息后即將訊息的狀態更新為“已消費”,則有可能在消費者掛掉的情況下導致訊息丟失;如果訊息代理在發送之后先更新為“已發送”,需要在接收到消費者的確認訊息之后才將訊息的狀態更新為“已消費”,這就需要訊息代理不僅記錄訊息的狀態,還需要跟蹤處理來自消費者的確認請求,使得訊息代理的系統壓力增大,
- 拉取模型使得各個消費者之間互相獨立,各自管理自己的消費狀態,
- 拉取模型允許消費者以從訊息佇列中的任意偏移量處消費訊息(可以處理之前已經處理過的訊息),
Kafka如何實作分布式的資料存盤與資料讀取?(分布式模型)
Kafka的磁區有“多副本機制”,每個磁區會以副本的方式復制到多個訊息代理節點上,所有的外部讀寫訊息請求都由主副本處理,
資料存盤方面,涉及到生產者的訊息磁區策略:訊息有鍵時,根據磁區語意確保相同鍵的訊息在同一磁區;訊息無鍵時,以輪詢的方式為訊息分配磁區,
資料讀取方面,訊息模型采用“佇列模式”和“發布-訂閱模式”的結合,對不同消費組的消費者來說,獲取訊息屬于“發布-訂閱模式”,對于同一消費組的消費者來說,獲取訊息屬于“佇列模式”,
談一談Kafka的訊息模型和消費模型
訊息模型指的是對于Kafka來說,訊息的一個流轉方式,分為“佇列模式”和“發布-訂閱模式”,
消費模型指的是對于消費者來說,訊息的獲取方式,分為“拉取模型”和“推送模型”,
Kakfa是如何高效地持久化日志檔案和加快資料傳輸訊息的?
高效地持久化日志檔案,利用作業系統的優化技術如預讀、后寫、空閑記憶體作為磁盤快取,使得對于磁盤的順序訪問可以與隨機訪問記憶體的速度相比,
加快資料傳輸訊息,采用“零拷貝”技術,
Kafka生產者如何批量地發送訊息?
生產者會在記憶體中嘗試收集足夠資料,并在請求一個請求中一次性發送一批資料,生產者可以設定“在指定的時間內收集不超過指定數量的訊息”,如設定訊息大小上限為64位元組,延遲時間為100ms,那么如果在100ms內訊息大小達到64位元組則會立即發送,否則不論訊息大小,在100ms時會把已經收集到的訊息發送出去,
Kafka的副本機制如何作業,當故障發生時,怎么確保資料不會丟失?
只有主副本負責處理外界的讀寫請求,當主副本出現故障時,備份副本會替換舊主副本成為新的主副本,繼續處理讀寫請求;備份副本始終盡量保持與主副本的資料同步,Kafka中有一個 ISR (In Sync Replias)的概念,想進入ISR的副本需滿足以下兩點:
- 節點必須和ZK保持會話(表明節點是存活的),
- 如果該節點是備份副本,則它必須復制主副本的寫操作,并且復制的進度不能太落后,
發生故障時,主副本機制如何確保資料不會丟失呢?Kafka中,只有成功提交到生產者的訊息才能被消費者看見從而消費,而“成功提交”的定義是:訊息必須被ISR集合的所有副本都運用到本地的日志檔案,這就保證了,如何時刻,只要ISR至少有一個副本是存活的,Kafka就可以保證“一條訊息被提交,就不會丟失”,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/173103.html
標籤:Java
