Kafka學習 四 Kafka持久化

2021-10-10 02:44:51 字數 1595 閱讀 9227

概述:

kafka很大程度上依賴檔案系統來儲存和快取訊息。有一普遍的認識:磁碟很慢。這讓人們懷疑使用磁碟作為持久化的效能。實際上,磁碟是快還是慢完全取決於我們是如何使用它。 

就目前來說,乙個 six 7200rpm sata raid-5磁碟線性(順序)寫入的效能能達到600mb/sec,而任意位置寫(定址再寫)的效能只有100k/sec。這些線性讀寫是所有使用模式中最可**的,並且由作業系統進行了大量優化。現在的作業系統提供了預讀取和後寫入的技術。實際上你會發現,順序的磁碟讀寫比任意的記憶體讀寫更快。 

基於jvm記憶體有以下缺點:

基於作業系統的檔案系統來設計有以下好處:

這種以頁面快取(pagecache)為中心的設計風格在一篇關於varnish設計的文章中有詳細描述。 

總的來說,kafka不會保持盡可能多的內容在記憶體空間,而是盡可能把內容直接寫入到磁碟。所有的資料都及時的以持久化日誌的方式寫入到檔案系統,而不必要把記憶體中的內容重新整理到磁碟中。

1.資料持久化:

2.日誌資料持久化特性:

寫操作:通過將資料追加到檔案中實現

讀操作:讀的時候從檔案中讀就好了

3.優勢:    

讀操作不會阻塞寫操作和其他操作(因為讀和寫都是追加的形式,都是順序的,不會亂,所以不會發生阻塞),資料大小不對效能產生影響;

沒有容量限制(相對於記憶體來說)的硬碟空間建立訊息系統;

線性訪問磁碟,速度快,可以儲存任意一段時間!

4.持久化的具體實現:

5.索引

為資料檔案建索引:

稀疏儲存,每隔一定位元組的資料建立一條索引(這樣的目的是為了減少索引檔案的大小)。

下圖為乙個partition的索引示意圖:

注:1.現在對6.和8建立了索引,如果要查詢7,則會先查找到8然後,再找到8後的乙個索引6,然後兩個索引之間做二分法,找到7的位置

2.每乙個log檔案中又分為多個segment

注:1.當生產者將訊息傳送到kafka後,就會去立刻通知zookeeper,會往zookeeper的節點中去掛,

zookeeper中會watch到相關的動作,當watch到相關的資料變化後,會通知消費者去消費訊息。

2.消費者是主動去pull(拉)kafka中的訊息,這樣可以降低broker的壓力,因為broker中的訊息是無狀態的,broker也不知道哪個訊息是可以消費的

3.當消費者消費了一條訊息後,也必須要去通知zookeeper。zookeeper會記錄下消費的資料,這樣但系統出現問題後就可以還原,可以知道哪些訊息已經被消費了

部署圖:

name server集群即zookeeper集群

kafka學習 四 kafka集群部署

1 broker.id 1 保證每個broker唯一,第一台可以不修改預設為0,後面兩台需要修改,如改為2和3 2 num.partitions 3 分割槽數量一般與broker保持一致 3 listeners plaintext 192.168 172 129 9092 修改為本機ip 4 zoo...

Kafka學習(四) Kafka架構詳解

1 生產者 api 2 消費者 api 說明 kafka訊息保留在磁碟上,並在集群內複製以防止資料丟失 不能提高資料的讀取效率 consumer group 每乙個consumer屬於乙個特定的consumer group 可以為每個consumer指定 groupname broker kafka...

kafka 四 kafka的使用原理

在kafka中,topic是乙個儲存訊息的邏輯概念,可以認為是乙個訊息集合。每條訊息傳送到kafka集群的 訊息都有乙個類別。物理上來說,不同的topic的訊息是分開儲存的,每個topic可以有多個生產者向它傳送訊息,也可以有多個消費者去消費其中的訊息。每個topic可以劃分多個分割槽 每個topi...