kafka 消息系統概述

一、綜述
Kafka是最初由Linkedin公司開發,是一個分佈式、支持分區的(partition)、多副本的(replica),基於zookeeper協調的分佈式消息系統,於2010年貢獻給Apache基金會併成爲頂級開源項目。其最大特性是實時的處理大量數據以滿足各種需求場景:比如基於hadoop的批處理系統、低延遲的實時系統、storm/Spark流式處理引擎,web/nginx日誌、訪問日誌,消息服務等,用scala語言編寫。

二、kafka與AMQP
kafka儘管可以看作一個消息隊列,但不同於基於AMQP協議實現的消息系統(zeromq,rabbitmq等),不遵循AMQP協議標準,它是在大數據場景下設計的消息系統。
kafka消息流流動方式是push-pull,即producer push消息到broker,consumer從broker pull消息進行消費,而AMQP協議最初採用的是push-push模式。kafka這種模式對於consumer更友好,consumer可以根據需求控制pull的速度,push則容易對consumer產生巨大壓力,以至於consumer服務宕機。

三、特性
高吞吐、可擴展、高併發、持久化、高容錯

四、使用場景
1 日誌收集,多個消息源寫入,以統一的格式被多種consumer消費
2 消息系統,削峯平谷 異步解耦
3 流式處理,流式計算框架的數據源

五、kafka架構及核心概念
kafka與其他的消息系統(zeromq、rabbitmq、activemq等)一樣,包括producer,broker以及consumer三個核心組件。
在這裏插入圖片描述
Producer
1 向broker中的某個topic下的某個partition的leader push消息數據
2 支持同步發送、異步發送兩種方式
3 消息格式 <topic, key, message>

Broker
1 多個broker組成分佈式高容錯集羣,broker之間實現負載均衡和故障轉移
2 消息持久化
3 接收並處理producer和consumer發來的請求,僅提供基於offset的消息讀取方式

Consumer
1 消息消費者,根據需求從broker 的某個partition中pull消息數據
2 一個consumer可以消費多個partition的數據,但是一個partition的消息只能由一個consumer消費
3 consumer group(多個consumer),可以實現
4 維護消息讀取offset,減輕broker壓力
consumer group

Partition
1 消息數據在broker中是分partition(區)存儲的,partition包括leader分區,follower分區,leader分區負責讀寫請求,follower分區不支持讀寫,只是leader分區數據的複製,當leader分區故障時,follower分區會選擇出來leader分區繼續服務,從而實現負載均衡,對消費者而言,可以提高併發度。
2 消息有序性,單個partition內的數據是有序的,多個partition之間的數據是無序的,同時,一個partition只能被一個consumer消費
3 分配消費者策略range,roundrobin

流向
流向
流向
partition1
consumer 1
partition2
partition3
consumer 2

zookeeper作用
1 broker註冊
Broker是分佈式部署並且相互之間相互獨立,在Zookeeper上會有一個專門用來進行Broker服務器列表記錄的節點:

/brokers/ids

每個Broker在啓動時,都會到Zookeeper上進行註冊,即到/brokers/ids下創建屬於自己的節點,如/brokers/ids/[0…N]。

Kafka使用了全局唯一的數字來指代每個Broker服務器,創建完節點後,每個Broker就會將自己的IP地址和端口信息記錄到該節點中去。其中,Broker創建的節點類型是臨時節點,一旦Broker宕機,則對應的臨時節點也會被自動刪除
2 topic註冊
在kafka中可以定義很多個topic,每個topic又被分爲很多個分區。一般情況下,每個分區獨立在存在一個broker上,所有的這些topic和broker的對應關係都有zk進行維護
3 consumer註冊
監控消費者組中消費者的變化,一般只增不減

高吞吐策略
1 順序讀寫
2 zero-copy
3 文件分段
4 批處理
5 數據壓縮

消息消費
1 at most once,不關注消息是否必達,非確認機制
2 at least once,保證消息必達性,確認機制
3 exactly once,消息冪等性

參考文檔
http://kafka.apache.org/
https://mp.weixin.qq.com/s/0NcgmiI636EDfkcfcQANHg
《大數據技術體系詳解》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章