Kafka系統架構

Kafka 作為一個消息引擎中間件,越來越多的被國內各個廠商使用。本篇主要介紹一下其系統架構及常用術語。

Kafka 架構

Kafka系統架構

從上圖可以看出,和其他消息引擎類似,主要由生產者、Kafka 集群、消費者構成。但是其中有一點需要注意的是,Kafka 集群和消費者依賴了ZooKeeper 集群。上圖中的每個Broker 對應的就是一個一個的Kafka 實例,每個Broker 上面可能會有多個 Partition,也就是所謂的分區副本。如上面的Producer A 生產了 Topic A 的消息,然後存放的時候分為了 Partition 0 和 Partition 1 兩個數據分區存儲。Producer 生產出來的數據只會直接發給每個 Partition 的 Leader 來接收。然後每個 Partition 對應的 Follower 會複製Leader 上面的數據做冗餘備份,Follower 本身不對外提供服務。

從上面的消費者可以看出,Consumer A1 和 Consumer A2 是一個消費者組。它們共同消費了 Topic A,此時對於同一個消費者組而言,同一個 Topic 不會重複消費。也就是 Topic A 的消息,在同一個消費者組內只會被一個消費者消費。

常見術語

  • Topic:消息主題,Kafka 會對消息進行歸類,發佈到Kafka 集群中的消息都需要指定一個 Topic。同一個 Topic 的數據會被存儲在一個或多個 Broker 上面。
  • Producer:消息生產者,會以 push 的方式向 Kafka 集群推送數據。
  • Consumer:消息消費者,會以 pull 的方式向 Kafka 集群拉取數據。
  • Broker:一個Kafka 實例(Server)就是一個Broker,一個或者多個Broker 組成 1 個Kafka集群。
  • Partition:物理上的Topic 分區,一個 Topic 可以分多個Partition,每個 Partition 都是一個有序隊列。Partition 中的每條消息都會被分配一個有序的ID (offset)。
  • Consumer Group:每個消費者都屬於一個消費者組。可以顯示指定消費者組,若不指定則屬於默認消費者組。這是 Kafka 用來實現一個 Topic 的廣播和單播。一個 Topic 可以有 1 個或 多個消費者組,Topic 的消息會被複制到所有的消費者組中,但是消費者組只會講消息分配給組內的一個消費者。如果要實現廣播,每個消費者都需要擁有不同的消費者組;如果要實現單播,消費者需要在同一個組內。
Kafka系統架構


分享到:


相關文章: