一言蔽之
kafka誕生於LinkedIn,是其貢獻的分佈式高性能消息引擎服務【MQ】(如今其定位爲一個分佈式流處理平臺)
消息引擎系統
-
消息引擎系統EMS:企業以一套標準消息規範屏蔽不同系統的差異,傳遞準確語義消息。
-
設計因素:
- 消息設計:結構 xml、json、file、binary
- 傳輸協議:http、rpc、binary
-
消息引擎範式
- 消息隊列:點對點
- 發佈訂閱:一對多
- java 消息服務:jms,作爲api規範,提供很多接口實現用於實現分佈式系統消息傳遞。大部分主流mq支持,kafka則沒完全遵循。另闢蹊徑。
- 消息隊列:點對點
設計概要
吞吐量/延時
:- 對於kafka而言,吞吐量就是每秒能處理的消息數目或者字節數
- 頁緩存
- io交給os
- 零拷貝sendfile
- 追加寫入日誌,避免磁盤隨機寫尋址(高速
固態與非固態順序寫和隨機寫
- 延時表示客戶端發起請求與服務器處理並響應給客戶端的這段時間
- micro-batch實現低延遲高吞吐
- 對於kafka而言,吞吐量就是每秒能處理的消息數目或者字節數
消息持久化
:- 解耦消息發送和消費
- 實現靈活消息處理,消息重演
負載均衡和故障轉移
:- 負載均衡, producer->topic(key hash)partition->consumer group均衡消費
- 故障轉移,容錯:
- 集羣controller 依靠zk,處理broker(isr)
- consumer重平衡(隨機,輪詢,sticky)
- 舊版本依賴zk
- 新版本依賴group Coordinator
- 負載均衡, producer->topic(key hash)partition->consumer group均衡消費
伸縮性
:- zk輕量級狀態維護,元數據(topic,partition信息等)更新
- kafka consumer註冊的watcher就能感知所消費的partition列表和發現broker
- broker用zk來註冊broker以及監聽分區leader存活
- zk輕量級狀態維護,元數據(topic,partition信息等)更新
kafka基本術語
- 消息
- 二進制消息
- bytebuffer+頁緩存
- topic和partition:topic-partition-message
- 業務消息,topic代表一類消息,是個邏輯概念
- partition可以理解成有序消息日誌(夾着這一層提高吞吐
- offset
- kafka本質就是一個消息tuple(三元組)-> <tioic,partition,offset>
- replica
- partition副本
- leader和follower:區別傳統主備(mysql讀寫分離都提供服務),此類leader唯一對外服務,其餘被動追隨
- 副本分爲領導者
- 追隨者
- ISR:in-sync replica
- isr集合:所有replica同步leader
- 交付語義:所有replica收到同一條消息,纔算已提交
- isr動態調整:由於各種原因,replica消息滯後,isr踢出,replica重新追上leader,納入isr
應用場景 | FAQ |
---|---|
網站行爲日誌追蹤 | 用戶行爲都可以以消息形式發到kafka,用於行爲分析或者優化網站 |
審計數據收集 | 運維監控 |
日誌收集 | 企業分佈式跨部門多應用產生日誌,可以統一通過kafka輸送到下游如hdfs |
Event Sourcing | 用事件序列表示狀態變更,【DDD領域驅動】。 |
流式處理 | 純淨,輕應。對標【flink storm spark streaming】。應用於以kafka爲系統總線的場景,此場景下,相比spark stream減少kafka消息拆分再組裝的一些額外開銷。 |
By mori.wang
vipshop.fcs
2019