高速數據總線kafka介紹

 

1. Kafka的做用

在大數據系統中,經常會碰到一個問題,整個大數據是由各個子系統組成,數據須要在各個子系統中高性能,低延遲的不停流轉。有沒有一個系統能夠同時搞定在線應用(消息)和離線應用(數據文件,日誌)?這就須要kafka。Kafka能夠起到兩個做用:html

一、下降系統組網複雜度。linux

二、下降編程複雜度,各個子系統不在是相互協商接口,各個子系統相似插口插在插座上,Kafka承擔高速數據總線的做用。web

2. Kafka產生背景

Kafka是Linkedin於2010年12月份開源的消息系統,它主要用於處理活躍的流式數據。活躍的流式數據在web網站應用中很是常見,這些數據包括網站的pv、用戶訪問了什麼內容,搜索了什麼內容等。 這些數據一般以日誌的形式記錄下來,而後每隔一段時間進行一次統計處理。編程

 

 

傳統的日誌分析系統提供了一種離線處理日誌信息的可擴展方案,但若要進行實時處理,一般會有較大延遲。而現有的消(隊列)系統可以很好的處理實時或者近似實時的應用,但未處理的數據一般不會寫到磁盤上,這對於Hadoop之類(一小時或者一天只處理一部分數據)的離線應用而言,可能存在問題。Kafka正是爲了解決以上問題而設計的,它可以很好地離線和在線應用。緩存

3. Kafka架構

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

生產者(producer):消息和數據產生者架構

代理(Broker):緩存代理負載均衡

消費者(consumer):消息和數據消費者分佈式

 

架構很簡單,Producer,consumer實現Kafka註冊的接口,數據從producer發送到broker,broker承擔一箇中間緩存和分發的做用。broker分發註冊到系統中的consumer。ide

4. 設計要點

一、直接使用linux 文件系統的cache,來高效緩存數據。函數

 

 

二、採用linux Zero-Copy提升發送性能。傳統的數據發送須要發送4次上下文切換,採用sendfile系統調用以後,數據直接在內核態交換,系統上下文切換減小爲2次。根據測試結果,能夠提升60%的數據發送性能。Zero-Copy詳細的技術細節能夠參考:https://www.ibm.com/developerworks/linux/library/j-zerocopy/

 

三、數據在磁盤上存取代價爲O(1)。

a. kafka以topic來進行消息管理,每一個topic包含多個part(ition),每一個part對應一個邏輯log,有多個segment組成。

b. 每一個segment中存儲多條消息(見下圖),消息id由其邏輯位置決定,即從消息id可直接定位到消息的存儲位置,避免id到位置的額外映射。

c. 每一個part在內存中對應一個index,記錄每一個segment中的第一條消息偏移。

d. 發佈者發到某個topic的消息會被均勻的分佈到多個part上(隨機或根據用戶指定的回調函數進行分佈),broker收到發佈消息往對應part的最後一個segment上添加該消息,當某個segment上的消息條數達到配置值或消息發佈時間超過閾值時,segment上的消息會被flush到磁盤,只有flush到磁盤上的消息訂閱者才能訂閱到,segment達到必定的大小後將不會再往該segment寫數據,broker會建立新的segment。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

四、顯式分佈式,即全部的producer、broker和consumer都會有多個,均爲分佈式的。Producer和broker之間沒有負載均衡機制。broker和consumer之間利用zookeeper進行負載均衡。全部broker和consumer都會在zookeeper中進行註冊,且zookeeper會保存他們的一些元數據信息。若是某個broker和consumer發生了變化,全部其餘的broker和consumer都會獲得通知。

5. 相似的系統

RocketMQ:國內淘寶團隊參考開源的實現的消息隊列,解決了kafka的一些問題,如優先級問題。

6. 參考資料:

http://blog.chinaunix.net/uid-20196318-id-2420884.html

http://dongxicheng.org/search-engine/kafka/

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

相關文章
相關標籤/搜索