kafka之二 檔案儲存

2021-07-26 09:51:28 字數 1441 閱讀 9046

儲存分為以下4個層次步驟:

1.1  topic 的儲存

kafka broker設定server.properties檔案配置(引數log.dirs=/log/message);日誌儲存在此目錄下;比如建設乙個topic名稱為kafka-test,partitions為3;則在/log/message檔案下面會生產三個partitions檔案,名稱為

|—kafka-test-0

|—kafka-test-1

|—kafka-test-2

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

partition中的每條message由offset來表示它在這個partition中的偏移量,這個offset不是該message在partition資料檔案中的實際儲存位置,而是邏輯上乙個值,它唯一確定了partition中的一條message。因此,可以認為offset是partition中message的id。partition中的每條message包含了以下三個屬性:

其中offset為long型,messagesize為int32,表示data有多大,data為message的具體內容。它的格式和kafka通訊協議中介紹的messageset格式是一致。

kafka解決查詢效率的手段之一是將資料檔案分段,比如有100條message,它們的offset是從0到99。假設將資料檔案分成5段,第一段為0-19,第二段為20-39,以此類推,每段放在乙個單獨的資料檔案裡面,資料檔案以該段中最小的offset命名。這樣在查詢指定offset的message的時候,用二分查詢就可以定位到該message在哪個段中。

資料檔案分段使得可以在乙個較小的資料檔案中查詢對應offset的message了,但是這依然需要順序掃瞄才能找到對應offset的message。為了進一步提高查詢的效率,kafka為每個分段後的資料檔案建立了索引檔案,檔名與資料檔案的名字是一樣的,只是擴充套件名為.index。

索引檔案中包含若干個索引條目,每個條目表示資料檔案中一條message的索引。索引包含兩個部分(均為4個位元組的數字),分別為相對offset和position。

index檔案中並沒有為資料檔案中的每條message建立索引,而是採用了稀疏儲存的方式,每隔一定位元組的資料建立一條索引。這樣避免了索引檔案占用過多的空間,從而可以將索引檔案保留在記憶體中。但缺點是沒有建立索引的message也不能一次定位到其在資料檔案的位置,從而需要做一次順序掃瞄,但是這次順序掃瞄的範圍就很小了。

kafka學習筆記之二 檔案儲存

1 kafka配置檔案簡述 在開始了解檔案儲存前,我們先簡單了解server.properties一些基本配置,在kafka預設配置中資料預設儲存7天,每乙個segment檔案最大大小為1g,當大於1g時建立乙個新的segment檔案,socket請求也不是無限大,這樣可以防止跑光了記憶體。具體可以...

Kafka 實戰 03 檔案儲存詳解

從圖中的架構我們可以看到,一類訊息即topic分為了三個分割槽partition,每乙個partition分割槽 由多個segment,乙個segment存在乙個.log檔案,乙個.index檔案。1 topic 可以理解為乙個佇列,生產者和消費者面向同乙個 topic 訊息佇列可能有很多訊息,但是...

Linux基礎之(二)檔案的搜尋

檔案搜尋和新建檔案類似的,在終端中提供了多種方式進行檔案的搜尋,常用的也是三種方式.對於which指令來說,首先需要注意的是which命令只能搜尋path環境變數中的內容,比如搜尋乙個命令程式所在的具體路徑,如果該命令存在於path環境變數中,則能搜尋到,否則搜尋不到。也由於這點,使得which命令...