Kafka架構設計
Kafak核心概念
- 生產者(Producer) : 生產資料,并存放在指定的主題中
- 主題(topic) :類似于資料庫中的表,按主題存盤資料
- 磁區(partition) :一個主題可以按磁區存盤資料,默認資料只有一個磁區,一般為創建topic時指定磁區數,在磁盤上體現為目錄不同
- 消費者(consumer) : 消費存盤在主題中的資料,資料是通過pull的方式,實作消費者消費資料,即消費者自己從topic中拉取
- 消費者組(consumer group) : 一組消費者,消費同一的主題
- Broker: 一個kafka節點稱為一個Broker,集群內的BrokerID唯一
- 副本(replica):一份資料有多個副本
- 訊息(message):存放的資料
- 偏移量(offset):訊息處理的位置
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mi3M7Ghh-1611887754842)(./Kafka核心概念.png)]
Kafka高性能
- 通過順序寫的方式實作kafka高性能的寫
- 通過零拷貝的方式實作Kafka高性能的讀
num.network.threads = 9
num.io.threads = 32
- kafka服務端的設計
- 服務端如何處理請求
- 使用NIO
- 順序讀寫
- 跳表設計
- 零拷貝
- 服務端如何處理請求
- Producer設計
- 批處理
- 記憶體池設計
- 封裝同一服務器請求
- ConsumerGroup設計
- 同一個消費組是P2P方式,一個訊息只能被同一個組的一個消費者消費
- 不同組時訂閱模式,一個訊息可以被不同的消費組消費
- 一個磁區同一時間只會被同組一個消費者消費
- Consumer設計-偏移量存盤
- 0.8以前存盤在Zookeeper中,0.8以后存盤在Kafka的_consumer_offset的主題中
Kafka的網路設計
? 基于NIO的網路設計
? 訊息寫入到磁盤之前首先放在一個MessageQueue中,再用多執行緒處理MessageQueue中
有多個Selector設計
?
? 一個Acceptor,負責啟動Kafka并監聽應用
三個Processor負責接收請求
? 一個RequestChanel封裝RequestQueue負責接收請求
? 一個KafkaRequestHandlerPool監聽RequestChannel,當RequestChannle中有資料流入時,該行程負責處理資料,并最中放入磁盤,默認有8個執行緒進行資料處理
? RequestChannle還封裝三個ReposeChannle負責接收回應
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-scpTQnrQ-1611887754846)(服務端設計.png)]
Kafka架構思考
? kafka是一個高性能,高并發,高可用的訊息系統,分別通過以下設計實作上述特性
- 高可用:通過副本機制保證了Kafka的高可用
- 高并發:利用Java的NIO實作網路連接以及資料讀寫,并設計多Selector接受資料,多執行緒處理的設計方式保證高可用,可以通過修改制定引數定制化Selector的個數,以及處理資料的執行緒數,通過配置這兩個引數可以提升吞吐量
- 高性能:
- 生產者
- 順序寫的方式保證寫高性能
- 批量處理設計
- 消費者
- 零拷貝的方式讀取資料
- 索引,以及跳表的設計
- 生產者
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/254524.html
標籤:其他
