kafka原理解析

2021-09-24 06:58:12 字數 1673 閱讀 6472

kafka是大家比較常用的訊息中介軟體,本文主要介紹kafka基本元件及其相關原理

kafka通過offset保證訊息在分區內的順序,offset的順序性不跨分割槽 kafka0.10以後,使用乙個專門的topic __consumer_offset儲存offset __consumer_offset日誌留存方式為compact,也就是說,該topic會對key相同的訊息進行整理

__consumer_offset內儲存三類訊息:每個partition其實都會對應乙個日誌目錄:-/,在目錄下面會對應多個日誌分段(logsegment)。logsegment檔案由兩部分組成,分別為「.index」檔案和「.log」檔案

索引檔案使用稀疏索引的方式,避免對日誌每條資料建索引,節省儲存空間

使用page cache順序讀檔案,作業系統可以預讀資料到 page cache 使用mmap直接將日誌檔案對映到虛擬位址空間

零拷貝:訊息資料直接從 page cache 傳送到網路 通常的檔案讀取需要經歷下圖的流程,有兩次使用者態與核心態之間記憶體的拷貝

kafka使用零拷貝,避免訊息在核心態和使用者態間的來回拷貝

副本同步流程:

controller類似於集群的master,主要管理如下幾塊:

controller通過broker搶占zk臨時節點擊舉出來,且controller與所有broker建立長連線

controller管理partition leader選舉,主要有以下幾種方式:

選舉方式

說明offlinepartitionleaderselector

leader 掉線時觸發

reassignedpartitionleaderselector

分割槽的副本重新分配資料同步完成後觸發的

preferredreplicapartitionleaderselector

最優 leader 選舉,手動觸發或自動 leader 均衡排程時觸發

controlledshutdownleaderselector

broker 傳送 shutdown 請求主動關閉服務時觸發

問題:

解決方案:

kafka rebalance發生的5種情況:

有新的消費者加入consumer group。

有消費者宕機下線。消費者並不一定需要真正下線,例如遇到長時間的gc、網路延遲導致消費者長時間未向groupcoordinator傳送heartbeatrequest時,groupcoordinator會認為消費者下線。

有消費者主動退出consumer group。

consumer group訂閱的任一topic出現分割槽數量的變化。

消費者呼叫unsubscrible()取消對某topic的訂閱。

kafka通過groupcoordinator管理rebalance操作

join group:

consumer首先向groupcoordinator傳送joingrouprequest請求,其中包含消費者的相關資訊

groupcoordinator從中選取乙個消費者成為group leader,封裝成joingroupresponse返回給每個消費者

只有group leader收到的joingroupresponse中封裝了所有消費者的資訊, group leader根據消費者的資訊以及選定的分割槽分配策略進行分割槽分配。

sync group:

kafka工作原理解析

三 kafka設計解析 有兩個生產者,生產topic 不同的topic表示不同訊息的型別 每乙個topic中的partition都會有副本 replices 例如乙個topic1,有兩個partition,另乙個topic有乙個partition 乙個partition對應 每乙個partition...

kafka原理解析之 日誌管理

1 在磁碟的組織形式 從上圖可以看到segment的檔案組成 2 segment 日誌檔案達到一定的條件的時候需要進行切分,其對應的索引檔案也會進行切分,日誌檔案滿足以下條件之一就會進行切分。3 索引檔案 kafka中的索引檔案以稀疏索引的方式構造訊息的索引,它並不保證每個訊息在索引檔案中都有對應的...

kafka原理解析之 高效能內幕

1.partition的持久化佇列結構 資料按先後順序依次追加在檔案末尾,讀寫操作分開,如下圖所示。這種結構有如下優勢 注 使用6個7200rpm sata介面 raid 5的磁碟陣列在jbod配置下的順序寫入的效能約為600mb 秒,但隨機寫入的效能僅約為100k 秒,相差6000倍以上。2.利用...