kafka A

kafka是linkedin用於日誌處理的分佈式消息隊列,linkedin的日誌數據容量大,但對可靠性要求不高,其日誌數據主要包括用戶行爲(登錄、瀏覽、點擊)以及系統運行日誌(CPU、內存、磁盤、網絡、系統、進程狀態)。

當前很多的消息隊列服務提供可靠交付保證,並默認是即時消費(不適合離線)。高可靠交付對linkedin的日誌不是必須的,故可通過降低可靠性來提高性能,同時通過構建分佈式的集羣,允許消息在系統中累計,使得kafka同時支持離線和在線日誌處理。


publisher ------ 發佈者

producer ------ 生產者

subscriber ---- 訂閱者

consumer ----- 消費者


kafka的架構如下圖所示。

kafka存儲策略

1、kafka以topic來進行消息管理,每個topic包含多個part(ition),每個part對應一個邏輯log,有多個segment組成。

2、每個segment中存儲多條消息(見下圖),消息id由邏輯位置決定,即從消息id可直接定位到消息的存儲位置,避免id到位置的額外映射。

3、每個part在內存中對應一個index,記錄每個segment中的第一條消息偏移。

4、發佈者發到某個topic的消息會被均勻的分佈到多個part上(隨機或根據用戶指定的回調函數進行發佈),broker收到發佈消息往對應part的最後一個segment上添加該消息,當某個segment上的消息條數達到配置值或消息發佈時間超過閾值時,segment上的消息會被flush到磁盤,只有flush到磁盤上的消息訂閱者才能訂閱到,segment達到一定的大小後將不會再往該segment寫數據,broker會創建新的segment。



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