kafka檔案儲存結構和如何保證資料不丟失

2022-08-24 02:51:16 字數 1464 閱讀 7407

一: kafka檔案組成

基本組成:

1- broker 節點,多個broker構成乙個集群

2- topic 對訊息進行歸類

3- producer 生產者

4- comsumer 消費者

5- consumergroup 消費組

topic的組成:

1- partition  物理上資料儲存的概念,乙個topic包含多個partition,每個partition內部是有序的;每個partition是乙個目錄;

2- segment  乙個partition包含多個segment,包含兩種檔案.index和.log。

這兩個檔案的命令規則為:partition全域性的第乙個segment從0開始,後續每個segment檔名為上乙個segment檔案最後一條訊息的offset值,數值大小為64位,20位數字字元長度,沒有數字用0填充,如下:

00000000000000000000

.index

00000000000000000000

.log

00000000000000170410

.index

00000000000000170410

.log

00000000000000239430

.index

00000000000000239430.log

index索引檔案儲存大量的元資料,log資料檔案儲存大量的訊息。

partition內部讀取資料的流程為(例如讀取offset=170418的訊息):

1- 首先查詢segment檔案。確認資料儲存在00000000000000170410.index和00000000000000170410.log這兩個檔案中。

2- 到index檔案中查詢,log資料存貯的位置資訊。

3- 從log日誌中讀取所需日誌資訊。

二:資料可靠性和永續性保證

1- producer端

request.required.acks引數進行配置,可靠性級別為:

1(預設) producer寫到kafka中,收到leader的反饋資訊後,下確認其寫入成功。leader宕機,會丟失資料。

0 producer端不會收到任何的反饋資訊,資料可靠性很低。

-1 producer端需要確認leader和follower都反饋成功,才認為寫入成功。和min.insync.replicas引數(最小同步副本數,必須大於等於2)一起使用。利用副本冗餘資訊來確保資料不會丟失。但是可以會重複傳輸。

2- comsumer端

producer.type=sync一定要設定成同步的方式。

consumer先讀取訊息並處理,在commit。這種方式可以保證至少一次;

consumer 先讀取訊息,再commit,在處理,這種方式會丟失資料;

3- 自定義實現,快取訊息去重

consumer保持無狀態和冪等性就可以了

Kafka檔案的儲存機制

同乙個topic下有多個不同的partition,每個partition為乙個目錄,partition命名的規則是topic的名稱加上乙個序號,序號從0開始。每乙個partition目錄下的檔案被平均切割成大小相等 預設乙個檔案是500兆,可以手動去設定 的資料檔案,每乙個資料檔案都被稱為乙個段 s...

Kafka檔案的儲存機制

同乙個topic下有多個不同的partition,每個partition為乙個目錄,partition命名的規則是topic的名稱加上乙個序號,序號從0開始。每乙個partition目錄下的檔案被平均切割成大小相等 預設乙個檔案是500兆,可以手動去設定 的資料檔案,每乙個資料檔案都被稱為乙個段 s...

Kafka檔案的儲存機制

同乙個topic下有多個不同的partition,每個partition為乙個目錄,partition命名的規則是topic的名稱加上乙個序號,序號從0開始。每乙個partition目錄下的檔案被平均切割成大小相等 預設乙個檔案是500兆,可以手動去設定 的資料檔案,每乙個資料檔案都被稱為乙個段 s...