kafka的基本概念

2023-03-22 21:01:02

1 Broker

Kafka叢集包含一個或多個伺服器,伺服器節點稱為broker。

如圖,我們有2個broker,6個partition,則會均分;如果只有1個partition,那麼另一個broker會閒置。

理想情況,我們希望broker數量等於partition數量,然後每個partition對應一塊硬碟,那樣能保證順序讀寫的吞吐量最大化。

具體的數量安排請看:https://www.cnblogs.com/HappyTeemo/p/17109381.html

2 Topic

每條釋出到Kafka叢集的訊息都有一個類別,這個類別被稱為Topic。(物理上不同Topic的訊息分開儲存,邏輯上一個Topic的訊息雖然儲存於一個或多個broker上但使用者只需指定訊息的Topic即可生產或消費資料而不必關心資料存於何處)

  • 如果我們使用隨機策略,則生產者投遞到哪個partition是隨機的。
  • 我也可以制定生產者1的訊息固定就投遞到partition1中。
  • kafka只保證partition內部的順序性,如果我們要順序執行,可以使用雜湊演演算法,比如用userId這樣的標誌,將他的訊息都投遞到固定的partition上。
  • 總之,我們可以自由控制訊息的投遞演演算法。

3 Partition

topic中的資料分割為一個或多個partition。每個topic至少有一個partition。每個partition中的資料使用多個segment檔案儲存。

partition中的資料是有序的,不同partition間的資料丟失了資料的順序。如果topic有多個partition,消費資料時就不能保證資料的順序。在需要嚴格保證訊息的消費順序的場景下,需要將partition數目設為1。

關於偏移量offest

4 Producer

生產者即資料的釋出者,該角色將訊息釋出到Kafka的topic中。broker接收到生產者傳送的訊息後,broker將該訊息追加到當前用於追加資料的segment檔案中。生產者傳送的訊息,儲存到一個partition中,生產者也可以指定資料儲存的partition。

輪訓演演算法

隨機演演算法

雜湊演演算法

5 Consumer

消費者可以從broker中讀取資料。消費者可以消費多個topic中的資料。

6 Consumer Group

每個Consumer屬於一個特定的Consumer Group(可為每個Consumer指定group name,若不指定group
name則屬於預設的group)。

這是kafka用來實現一個topic訊息的廣播(發給所有的consumer)和單播(發給任意一個consumer)的手段。一個topic可以有多個CG。topic的訊息會複製給consumer。如果需要實現廣播,只要每個consumer有一個獨立的CG就可以了。要實現單播只要所有的consumer在同一個CG。用CG還可以將consumer進行自由的分組而不需要多次傳送訊息到不同的topic。

7 Leader

每個partition有多個副本,其中有且僅有一個作為Leader,Leader是當前負責資料的讀寫的partition。

8 Follower

Follower跟隨Leader,所有寫請求都通過Leader路由,資料變更會廣播給所有Follower,Follower與Leader保持資料同步。

ISR: in-sync-replica,處於同步狀態的副本集合,是指副本資料和主副本資料相差在一定返回(時間範圍或數量範圍)之內的副本,當然主副本肯定是一直在ISR中的。 當主副本掛了之後,新的主副本將從ISR中被選出來接替它的工作。

OSR: 和IRS相對應 out-sync-replica,其實就是指那些不在ISR中的副本。

9 Offset

kafka的儲存檔案都是按照offset.kafka來命名,用offset做名字的好處是方便查詢。例如你想找位於2049的位置,只要找到2048.kafka的檔案即可。當然the first offset就是00000000000.kafka

訊息 Message

一條訊息包含key和value,value是具體資訊,key主要是用來指定寫入分割區的策略。

比如為鍵生成一個一致性性雜湊值,然後使用雜湊值對主題分割區數進行取模,為訊息選取分割區。

批次

批次就是一組訊息,用於減少網路開銷。網路開銷和CPU往往需要取平衡。