1、 概述
kafka是linkedin於2023年12月份開源的訊息系統,它主要用於處理活躍的流式資料。活躍的流式資料在web**應用中非常常見,這些資料報括**的pv、使用者訪問了什麼內容,搜尋了什麼內容等。 這些資料通常以日誌的形式記錄下來,然後每隔一段時間進行一次統計處理。
2、 設計目標
(1)資料在磁碟上訪問代價為o(1)。一般資料在磁碟上是使用btree儲存的,訪問代價為o(lgn)。
(2)高吞吐率。即使在普通的節點上每秒鐘也能處理成百上千的message。
(3)顯式分布式,即所有的producer、broker和consumer都會有多個,均為分布式的。
(4)支援資料並行載入到hadoop中。
3、 kafka部署結構
kafka是顯式分布式架構,producer、broker(kafka)和consumer都可以有多個。kafka的作用類似於快取,即活躍的資料和離線處理系統之間的快取。幾個基本概念:
(1)message(訊息)是通訊的基本單位,每個producer可以向乙個topic(主題)發布一些訊息。如果consumer訂閱了這個主題,那麼新發布的訊息就會廣播給這些consumer。
(2)kafka是顯式分布式的,多個producer、consumer和broker可以執行在乙個大的集群上,作為乙個邏輯整體對外提供服務。對於consumer,多個consumer可以組成乙個group,這個message只能傳輸給某個group中的某乙個consumer.
4、 kafka關鍵技術點
(1) zero-copy
在kafka上,有兩個原因可能導致低效:1)太多的網路請求 2)過多的位元組拷貝。為了提高效率,kafka把message分成一組一組的,每次請求會把一組message發給相應的consumer。 此外, 為了減少位元組拷貝,採用了sendfile系統呼叫。為了理解sendfile原理,先說一下傳統的利用socket傳送檔案要進行拷貝:
sendfile系統呼叫:
(2) exactly once message transfer
怎樣記錄每個consumer處理的資訊的狀態?在kafka中僅儲存了每個consumer已經處理資料的offset。這樣有兩個好處:1)儲存的資料量少 2)當consumer出錯時,重新啟動consumer處理資料時,只需從最近的offset開始處理資料即可。
(3)push/pull
producer 向kafka(push)推資料,consumer 從kafka 拉(pull)資料。
(4)負載均衡和容錯
producer和broker之間沒有負載均衡機制。
broker和consumer之間利用zookeeper進行負載均衡。所有broker和consumer都會在zookeeper中進行註冊,且zookeeper會儲存他們的一些元資料資訊。如果某個broker和consumer發生了變化,所有其他的broker和consumer都會得到通知。
【參考資料】
kafka主頁:
zero-copy原理:
kafka與hadoop:
from
訊息系統Kafka介紹
1 概述 kafka是linkedin於2010年12月份開源的訊息系統,它主要用於處理活躍的流式資料。活躍的流式資料在web 應用中非常常見,這些資料報括 的pv 使用者訪問了什麼內容,搜尋了什麼內容等。這些資料通常以日誌的形式記錄下來,然後每隔一段時間進行一次統計處理。2 設計目標 1 資料在磁...
訊息系統Kafka介紹
1 概述 kafka是linkedin於2010年12月份開源的訊息系統,它主要用於處理活躍的流式資料。活躍的流式資料在web 應用中非常常見,這些資料報括 的pv 使用者訪問了什麼內容,搜尋了什麼內容等。這些資料通常以日誌的形式記錄下來,然後每隔一段時間進行一次統計處理。2 設計目標 1 資料在磁...
訊息系統Kafka介紹
1 概述 kafka是linkedin於2010年12月份開源的訊息系統,它主要用於處理活躍的流式資料。活躍的流式資料在web 應用中非常常見,這些資料報括 的pv 使用者訪問了什麼內容,搜尋了什麼內容等。這些資料通常以日誌的形式記錄下來,然後每隔一段時間進行一次統計處理。2 設計目標 1 資料在磁...