Kafka 實戰 03 檔案儲存詳解

2021-09-29 15:28:41 字數 2022 閱讀 9102

從圖中的架構我們可以看到,一類訊息即topic分為了三個分割槽partition,每乙個partition分割槽 由多個segment,乙個segment存在乙個.log檔案,乙個.index檔案。

1)topic :可以理解為乙個佇列,生產者和消費者面向同乙個 topic; 

訊息佇列可能有很多訊息,但是不是每乙個訊息消費者都要去獲取,所以生產者生產訊息後,給訊息命名,

也就是主題名,消費者根據主題去拿自己的訊息。我們可以把主題當成乙個小的訊息佇列。

2)partition:乙個大的 topic 可以分布到多個 broker(即伺服器)上,

乙個 topic 可以分為多個 partition,每個 partition 是乙個有序的佇列

3)segment:partition物理上由多個segment組成。 segment由2個檔案組成,2個檔案一一對應,成對出現,

字尾」.index」和「.log」分別表示為segment索引檔案、資料檔案.

4).log檔案中儲存的是生產者產生的資料,producer 生產的資料會被不斷追加到該

消費到了哪個 offset,以便出錯恢復時,從上次的位置繼續消費。

5).index 檔案存放大量的元資料。

6)offset:每個partition都由一系列有序的、不可變的訊息組成,這些訊息被連續的追加到partition中。

partition中的每個訊息都有乙個連續的序列號叫做offset,用於partition唯一標識一條訊息

來給訊息,給乙個訊息整乙個編號,這就是序列號,可見序列號是遞增的

假如乙個分割槽裡面只有乙個.log 檔案用來儲存訊息,生產者如果不斷地在.log檔案裡面追加訊息,log檔案的是不是越來越大,我如何定位log檔案裡面的訊息呢?

後來引入的segment,當乙個.log 檔案到達1g的時候,會自動建立下一對.log和.index檔案,也就是我們所說的segment。

segment:由一對.log和.index檔案組成,每乙個segment大小一致。

每個partion平均分配到多個大小相等segment(段)資料檔案中。但每個段segment file訊息數量不一定相等,這種特性方便old segment file快速被刪除。

segment檔案命名規則:partion全域性的第乙個segment從0(20個0)開始,後續每個segment檔名為上乙個segment檔案最後一條訊息的offset值。數值最大為64位long大小,19位數字字元長度,沒有數字用0填充。

由圖介紹可知,segement檔案命名是offset的值,且該值是不斷遞增的。

如何查詢offset=368775這條訊息

①二分查詢法(適用於已經排好序的資料)快速定位該條資料儲存第二個名為00000000000000368769.log檔案中。

②在.index檔案中去找第368777條資料所在的位置,即第8行。

.index 中存放元資料,由一對的key-value組成,其中key是訊息在.log檔案中的編號,value表示該訊息的物理偏移位址。比如「1,3,6,8……」,其中6代表.log資料檔案從上到下第六個訊息。key值在.index 檔案中沒有連續存放,為防止索引檔案占用太多的記憶體空間,這樣存在乙個問題就是不能一次性的定位到訊息的位置,且需要在.log日誌檔案順序掃瞄訊息所在的位置。如果為每一訊息都建立乙個索引,雖然一次性的掃瞄到檔案的位置,這樣就會建立太多的索引,占用記憶體。要麼犧牲記憶體提高效能,要麼效能差一些,減少記憶體的占用。

kafka之二 檔案儲存

儲存分為以下4個層次步驟 1.1 topic 的儲存 kafka broker設定server.properties檔案配置 引數log.dirs log message 日誌儲存在此目錄下 比如建設乙個topic名稱為kafka test,partitions為3 則在 log message檔案...

kafka學習筆記之二 檔案儲存

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

Pandas 03 檔案讀和儲存

詳解pandas檔案讀寫和儲存 1 pandas.read csv讀取檔案 2 快速瀏覽讀入的資料 3 pandas.dataframe.to csv寫入檔案 4 參考資料 pandas能處理多種 資料型別 詳細見 data1 name2 age3 data name age 2018 6 16 李...