kafka彙總

Kafka服務器

1. kafka概念

kafka是一個高吞吐亮的、分佈式、基於發佈/訂閱(也就是一對多)的消息系統,最初由Linkedln公司開發的,使用Scala語言編寫的,目前是Apache的開源項目。網絡

 

消息隊列:

1>     原理app

 

 

 

客戶端消費Queue的數據優良種方式:負載均衡

  1. 發佈/訂閱模式:也就是一對多,數據產生後,推給全部的訂閱者。
  2. 點點對點模式:也就是一對一,這個是主動模式,第一種模式更像是被動模式,這個就是消費者主動拉取生產後的數據。

2>     消息隊列的優勢:異步

  1. 解耦2.冗餘3.擴展性4.靈活性和峯值處理能力5.可恢復性6.順序保證(kafka保證一個partition內的數據是有序的)7.緩衝8.異步通訊

kafka的基本術語

topic:消息類別,kafka按照topic來分類消息。能夠理解成一個隊列,一個topic裏有多個partition。分佈式

broker:kafka服務器,負責消息的存儲與轉發。一臺kafka服務器就是一個broker,一個集羣有多個broker,一個broker能夠有多個topic。性能

partition:topic的一個分區,一個topic能夠包含多個partition,topic消息保存在各個partition上。設計

offset:消息在日誌中的位置,能夠理解是消息在partition上的偏移量,也是表明消息的惟一序號。3d

producer:消息生產者。向kafka broker發消息的客戶端。日誌

consumer:消息消費者。向kafka broker 取消息的客戶端。

Consumer group:消費者分組,每一個consumer必須屬於一個group。Consumer group是kafka用來實現原子廣播和單播的手段。topic的消息會複製(不是真正的複製)到全部的consumer group,可是每一個partition只會把消息發給該consumer group中的一個consumer。

eg:廣播實現的方法是:只要每一個consumer有一個獨立的consumer group就好了。單播的實現方法就是:只要全部的consumer在同一個consumer group中就能夠了。

Zookeeper:保存着集羣broker、topic、partition等meta數據;另外,還負責broker 故 障發現,partition leader選舉,負載均衡等功能

 

 

 

kafka數據存儲設計:

1.    partition的數據文件(offset、messageSize、data)

partition中的每條Message包含了如下三個屬性:offset,MessageSize、data,其中offset表示Message在這個partition中的偏移量,offset不是該patition數據文件中的實際存儲位置,而是邏輯上的一個值,它惟一肯定了partition中的一條Message,能夠認爲offset是partition中Message的id;MessageSize表示消息內容data的大小;data爲message的及具體內容。

2.    數據文件分段segment(順序讀寫、分段命令、二分查找)

partition物理上由多個segment文件組成,每一個segment大小相等,順序讀寫。每一個segment 數據文件以該段中小的offset命名,文件擴展名爲.log。這樣在查找指定offset的Message的 時候,用二分查找就能夠定位到該Message在哪一個segment數據文件中。

3.    數據文件索引(分段索引、稀疏存儲)

Kafka 爲每一個分段後的數據文件創建了索引文件,文件名與數據文件的名字是同樣的,只是文件擴 展名爲.index。index 文件中並無爲數據文件中的每條 Message 創建索引,而是採用了稀疏存 儲的方式,每隔必定字節的數據創建一條索引。這樣避免了索引文件佔用過多的空間,從而能夠 將索引文件保留在內存中

 

 

 

生產者設計

負載均衡

因爲topic是由多個partition組成的,且 partition 會均衡分佈到不一樣 broker 上,所以,爲了有 效利用broker集羣的性能,提升消息的吞吐量,producer能夠經過隨機或者hash等方式,將消息平均發送到多個partition上,以實現負載均衡。

 

 

 

批量發送

是提升消息吞吐量的重要方式,Producer端能夠在內存中合併多條消息後,以一次請求的方式發送了這批量的消息給broker,從而大大減小broker的存儲消息IO操做次數。但也必定程度上影響了消息的實時性,至關於以延時爲代價,換取更好的吞吐量。

壓縮(GZIP或Snappy)

Producer端能夠經過GZIP或Snappy格式對消息集合進行壓縮。Producer端進行壓縮以後,在 Consumer 端需進行解壓。壓縮的好處就是減小傳輸的數據量,減輕對網絡傳輸的壓力,在對大 數據處理上,瓶頸每每體如今網絡上而不是CPU(壓縮和解壓會耗掉部分CPU資源)。

消費者設計

 

 

 

同一 Consumer Group 中的多個 Consumer 實例,不一樣時消費同一個 partition,等效於隊列模 式。partition內消息是有序的,Consumer經過pull方式消費消息。Kafka 不刪除已消費的消息

對於partition,順序讀寫磁盤數據,以時間複雜度O(1)方式提供消息持久化能力。

 

拉取系統

  1. kafka  broker會持久化數據,broker沒有壓力,所以,consumer很是適合採起pull的方式消費數據。
  2. consumer根據自身的能力自主控制消息拉取的速度
  3. consumer根據自身狀況自主選擇消費,例如批量消費,重複消費。

 

kafka的特色

l  可擴展性

當須要增長broker節點時,新增的broker會向zookeeper註冊,而producer與consumer會根據註冊在zookeeper上的watcher感知這些變化,並及時作出調整。

l  高吞吐率

kafka每秒能夠生產約25萬條消息(50MB),每秒處理55W消息(110MB)

l  持久化數據存儲

可進行持久化操做,將消息持久化到磁盤,所以能夠批量消費。

l  分佈式系統易於擴展

全部的producer、consumer、broker都會有多個,均爲分佈式的

相關文章
相關標籤/搜索