1、Kafka訊息持久性概述
Kakfa依賴檔案系統來存盤和快取訊息,對于硬碟的傳統觀念是硬碟總是很慢,基于檔案系統的架構能否提供優異的性能?實際上硬碟的快慢完全取決于使用方式,同時 Kafka 基于 JVM 記憶體有以下缺點:
-
物件的記憶體開銷非常高,通常是要存盤的資料的兩倍甚至更高
-
隨著堆內資料的增加,GC的速度越來越慢
實際上磁盤線性寫入的性能遠遠大于任意位置寫的性能,線性讀寫由作業系統進行了大量優化(read-ahead、write-behind 等技術),甚至比隨機的記憶體讀寫更快,所以與常見的資料快取在記憶體中然后刷到硬碟的設計不同,Kafka 直接將資料寫到了檔案系統的日志中:
-
寫操作:將資料順序追加到檔案中
-
讀操作:從檔案中讀取
這樣實作的好處:
-
讀操作不會阻塞寫操作和其他操作,資料大小不對性能產生影響
-
硬碟空間相對于記憶體空間容量限制更小
-
線性訪問磁盤,速度快,可以保存更長的時間,更穩定
2、Kafka的持久化原理決議
一個Topic 被分成多 Partition,每個 Partition 在存盤層面是一個 append-only 日志檔案,屬于一個 Partition 的訊息都會被直接追加到日志檔案的尾部,每條訊息在檔案中的位置稱為 offset(偏移量),

如下圖所示,我們之前創建了mytopic1,具有三個磁區,我們可以到對應的日志目錄下進行查看,

Kafka日志分為index與log(如上圖所示),兩個成對出現:index檔案存盤元資料,log存盤訊息,索引檔案元資料指向對應log檔案中message的遷移地址;例如2,128指log檔案的第2條資料,偏移地址為128;而物理地址(在index檔案中指定)+ 偏移地址可以定位到訊息,
我們可以使用Kafka自帶的工具來查看log日志檔案中的資料資訊:

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/281998.html
標籤:其他
上一篇:基本的SQL陳述句
