Kafka服務器
kafka是一個高吞吐亮的、分佈式、基於發佈/訂閱(也就是一對多)的消息系統,最初由Linkedln公司開發的,使用Scala語言編寫的,目前是Apache的開源項目。網絡
1> 原理app
客戶端消費Queue的數據優良種方式:負載均衡
2> 消息隊列的優勢:異步
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選舉,負載均衡等功能
partition中的每條Message包含了如下三個屬性:offset,MessageSize、data,其中offset表示Message在這個partition中的偏移量,offset不是該patition數據文件中的實際存儲位置,而是邏輯上的一個值,它惟一肯定了partition中的一條Message,能夠認爲offset是partition中Message的id;MessageSize表示消息內容data的大小;data爲message的及具體內容。
partition物理上由多個segment文件組成,每一個segment大小相等,順序讀寫。每一個segment 數據文件以該段中小的offset命名,文件擴展名爲.log。這樣在查找指定offset的Message的 時候,用二分查找就能夠定位到該Message在哪一個segment數據文件中。
Kafka 爲每一個分段後的數據文件創建了索引文件,文件名與數據文件的名字是同樣的,只是文件擴 展名爲.index。index 文件中並無爲數據文件中的每條 Message 創建索引,而是採用了稀疏存 儲的方式,每隔必定字節的數據創建一條索引。這樣避免了索引文件佔用過多的空間,從而能夠 將索引文件保留在內存中
因爲topic是由多個partition組成的,且 partition 會均衡分佈到不一樣 broker 上,所以,爲了有 效利用broker集羣的性能,提升消息的吞吐量,producer能夠經過隨機或者hash等方式,將消息平均發送到多個partition上,以實現負載均衡。
是提升消息吞吐量的重要方式,Producer端能夠在內存中合併多條消息後,以一次請求的方式發送了這批量的消息給broker,從而大大減小broker的存儲消息IO操做次數。但也必定程度上影響了消息的實時性,至關於以延時爲代價,換取更好的吞吐量。
Producer端能夠經過GZIP或Snappy格式對消息集合進行壓縮。Producer端進行壓縮以後,在 Consumer 端需進行解壓。壓縮的好處就是減小傳輸的數據量,減輕對網絡傳輸的壓力,在對大 數據處理上,瓶頸每每體如今網絡上而不是CPU(壓縮和解壓會耗掉部分CPU資源)。
同一 Consumer Group 中的多個 Consumer 實例,不一樣時消費同一個 partition,等效於隊列模 式。partition內消息是有序的,Consumer經過pull方式消費消息。Kafka 不刪除已消費的消息
對於partition,順序讀寫磁盤數據,以時間複雜度O(1)方式提供消息持久化能力。
l 可擴展性
當須要增長broker節點時,新增的broker會向zookeeper註冊,而producer與consumer會根據註冊在zookeeper上的watcher感知這些變化,並及時作出調整。
l 高吞吐率
kafka每秒能夠生產約25萬條消息(50MB),每秒處理55W消息(110MB)
l 持久化數據存儲
可進行持久化操做,將消息持久化到磁盤,所以能夠批量消費。
l 分佈式系統易於擴展
全部的producer、consumer、broker都會有多個,均爲分佈式的