訊息系統Kafka介紹

2021-09-02 04:04:52 字數 1698 閱讀 6973

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 資料在磁...