阿里高級架構師分享Java那些你未知的領域——kafka篇章「PDF」

Kafka

Kafka 概念

Kafka 是一種高吞吐量、分佈式、基於發佈/訂閱的消息系統,最初由 LinkedIn 公司開發,使用 Scala 語言編寫,目前是Apache 的開源項目。【耐心讀完,文末有讀者福利!!!】服務器

1. broker:Kafka 服務器,負責消息存儲和轉發網絡

2. topic :消息類別,Kafka 按照topic 來分類消息架構

3. partition :topic 的分區,一個 topic 能夠包含多個 partition ,topic 消息保存在各個 partition 上app

4. offset:消息在日誌中的位置,能夠理解是消息在partition 上的偏移量,也是表明該消息的惟一序號負載均衡

5. Producer:消息生產者分佈式

6. Consumer:消息消費者性能

7. Consumer Group:消費者分組,每一個Consumer 必須屬於一個group大數據

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

阿里高級架構師分享Java那些你未知的領域——kafka篇章「PDF」

Kafka 數據存儲設計

partition 的數據文件 (offset,MessageSize,data)日誌

partition 中的每條Message包含了如下三個屬性:offset,MessageSize,data,其中offset表 示Message 在這個partition 中的偏移量,offset 不是該Message 在partition 數據文件中的實際存儲位置,而是邏輯上一個值,它惟一肯定了partition 中的一條Message,能夠認爲offset是

partition 中Message 的id;MessageSize 表示消息內容data 的大小;data 爲Message 的具體內容。

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

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

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

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

阿里高級架構師分享Java那些你未知的領域——kafka篇章「PDF」

生產者設計

負載均衡 (partition 會均衡分佈到不一樣broker 上)

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

阿里高級架構師分享Java那些你未知的領域——kafka篇章「PDF」

批量發送

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

壓縮 (GZIP 或Snappy)

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

消費者設計

阿里高級架構師分享Java那些你未知的領域——kafka篇章「PDF」

Consumer Group

同一Consumer Group 中的多個Consumer 實例,不一樣時消費同一個partition,等效於隊列模式。partition 內消息是有序的,Consumer 經過pull 方式消費消息。Kafka 不刪除已消費的消息對於partition,順序讀寫磁盤數據,以時間複雜度O(1)方式提供消息持久化能力。

相關文章
相關標籤/搜索