概述:
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...