1. 程式人生 > >kafka(02)——kafka的架構及元件

kafka(02)——kafka的架構及元件

kafka的架構模型

kafka架構是一個基於producer consumer topic broker 等的一個基本架構。

在這裡插入圖片描述

kafka的元件介紹

Topic :訊息根據Topic進行歸類 Producer:傳送訊息者 Consumer:訊息接受者 broker:每個kafka例項(server) Zookeeper:依賴叢集儲存meta資訊。

在這裡插入圖片描述

Topics元件介紹

Topic:一類訊息,每個topic將被分成多個partition(區),在叢集的配置檔案中配置。 partition:在儲存層面是邏輯append log檔案,包含多個segment檔案。 Segement:訊息儲存的真實檔案,會不斷生成新的。 offset:每條訊息在檔案中的位置(偏移量)。offset為一個long型數字,它是唯一標記一條訊息的位置。

partition

1、 在儲存層面是邏輯append log檔案,每個partition有多個segment組成。 2、 任何釋出到此partition的訊息都會被直接追加到log檔案的尾部。 3、 每個partition在記憶體中對應一個index列表,記錄每個segment中的第一條訊息偏移。這樣查詢訊息的時候,先在index列表中定位訊息位置,再讀取檔案,速度塊。 4、 釋出者發到某個topic的訊息會被均勻的分佈到多個part上,broker收到釋出訊息往對應part的最後一個segment上新增該訊息。

在這裡插入圖片描述

partition分佈

1、 partitions分割槽到不同的server上,一個partition儲存在一個server上,避免一個server上的檔案過大,同時可以容納更多的consumer消費,有效提升併發消費的能力。 2、 這個server(如果儲存的是partition的leader)負責partition的讀寫。可以配置備份。 3、 每個partition都有一個server為"leader",負責讀寫,其餘的相對備份機為follower,follower同步leader資料,負責leader死了之後的接管。n個leader均衡的分散在每個server上。 4、 partition的leader和follower之間監控通過zookeeper完成。

segment

1、 每個segment中儲存多條訊息,訊息id由其邏輯位置決定,即從訊息id可直接定位到訊息的儲存位置,避免id到位置的額外對映。 2、 當某個segment上的訊息條數達到配置值或訊息釋出時間超過閾值時,segment上的訊息會被flush到磁碟,只有flush到磁碟上的訊息訂閱者才能訂閱到 3、 segment達到一定的大小(可以通過配置檔案設定,預設1G)後將不會再往該segment寫資料,broker會建立新的segment。

在這裡插入圖片描述

offset

offset是每條訊息的偏移量。 segment日誌檔案中儲存了一系列"log entries"(日誌條目),每個log entry格式為"4個位元組的數字N表示訊息的長度" + “N個位元組的訊息內容”; 每個日誌檔案都有一個offset來唯一的標記一條訊息,offset的值為8個位元組的數字,表示此訊息在此partition中所處的起始位置. 每個partition在物理儲存層面,有多個log file組成(稱為segment). segment file的命名為"最小offset".log.例如"00000000000.log";其中"最小offset"表示此segment中起始訊息的offset.