Kafka基本原理


在深入學習Kafka之前,需要先了解topics, brokers, producersconsumers等幾個主要術語。 下面說明了主要術語的詳細描述和元件。

在上圖中,主題(topic)被組態為三個分割區。 分割區1(Partition 1)具有兩個偏移因子01。分割區2(Partition 2)具有四個偏移因子0,1,23,分割區3(Partition 3)具有一個偏移因子0replica 的id與託管它的伺服器的id相同。

假設,如果該主題的複制因子設定為3,則Kafka將為每個分割區建立3個相同的副本,並將它們放入群集中以使其可用於其所有操作。 為了平衡叢集中的負載,每個代理儲存一個或多個這些分割區。 多個生產者和消費者可以同時發佈和檢索訊息。

  • Topics - 屬於特定類別的訊息流被稱為主題(Topics),資料儲存在主題中。主題分為多個分割區。 對於每個主題,Kafka都保留一個分割區的最小範圍。 每個這樣的分割區都以不可變的有序順序包含訊息。 分割區被實現為一組相同大小的段檔案。
  • Partition - 主題可能有很多分割區,所以它可以處理任意數量的資料。
  • Partition offset - 每個分割區訊息都有一個稱為偏移量的唯一序列標識。
  • Replicas of partition - 副本只是分割區的備份。 副本從不讀取或寫入資料。 它們用於防止資料丟失。
  • Brokers

    • 經紀人(Brokers)是簡單的系統,負責維護公布的資料。 每個代理可能每個主題有零個或多個分割區。 假設,如果一個主題和N個代理中有N個分割區,則每個代理將有一個分割區。
    • 假設某個主題中有N個分割區並且N個代理(n + m)多於N個,則第一個N代理將擁有一個分割區,下一個M代理將不會擁有該特定主題的任何分割區。
    • 假設某個主題中有N個分割區且N個代理(n-m)少於N個代理,則每個代理將擁有一個或多個分割區共用。 由於經紀人之間的負載分配不均衡,不推薦這種情況。
  • Kafka Cluster - Kafka擁有多個經紀人稱為Kafka叢集。 Kafka叢集可以在無需停機的情況下進行擴充套件。 這些叢集用於管理訊息資料的永續性和複製。

  • Producers - 生產者(Producer)是一個或多個Kafka主題的發佈者。 生產者向Kafka經紀人傳送資料。 每當生產者向經紀人發布訊息時,經紀人只需將訊息附加到最後一個段檔案。 實際上,該訊息將被附加到分割區。 生產者也可以將訊息傳送到他們選擇的分割區。
  • Consumers - 消費者從經紀人那裡讀取資料。 消費者通過從經紀人處獲取資料來訂閱一個或多個主題並消費發布的訊息。
  • Leader - Leader是負責所有分割區讀寫的節點。 每個分割區都有一台伺服器充當領導者。
  • Follower - 遵循領導者(Leader)指示的節點稱為追隨者(Follower)。 如果領導失敗,其中一個追隨者將自動成為新領導。 追隨者扮演正常的消費者角色,拉動訊息並更新自己的資料儲存。