1. 程式人生 > 實用技巧 >Kafka本身的架構

Kafka本身的架構

在這裡插入圖片描述

Producer(生產者)生產訊息以Topic(主題)為單位進行儲存.消費者組訂閱主題消費內容.

Producer生產者寫資料可能寫到TopicA-Partition0 分割槽 ,也可能寫到 TopicA-Partition1分割槽, 也可以指定只寫到哪個分割槽也是可以的.如果你不指定寫哪個分割槽,你只是指定寫到TopicA主題,那麼就會採取輪詢的策略,把資料輪流放到TopicA主題下的所有分割槽裡面.

為了方便我的消費,以及提高消費的速度,我們是有消費者組的概念,一個組可以有多個消費者執行緒,一個Group組可以同時訂閱多個Topic主題,多個Group也可以同時訂閱多個主題.

每個Group裡面各有三個Consumer消費者,TopicA下的所有分割槽的資料都會分配到多個消費者執行緒上面. 同時是互斥的同一時刻一個主題只能由一個Group內的一個Consumer來消費 ,

同時一個Consumer可以同時消費多個主題的,就是我既可以拿TopicA-Partition0的資料,也可以拿TopicA-Partition1的資料.

不能一個Group裡面的兩個Consumer同時拿TopicA-Partition0裡面的資料.這是不能允許的.

分割槽可以分散到多個Broker中的

多個Broker可以組成一個叢集.

為了提高可用性,可以為分割槽增加副本,比如說TopicA-Partition0存到了Broker0和Broker2上.這樣保證資料的可用性和安全性.

有了副本概念,客戶端只能向Leader傳送請求,比如說讀取TopicA-Partition0的資料,就得看誰是Leader了, 假如說broker0是Leader,那麼不管是Producer還是Consumer只能請求Leader角色的broker0機器, 然後broker2就是follower機器,它會發送fetch請求從leader角色的broker0機器上同步TopicA-Partition0資料.

另外Kafka叢集需要藉助Zookeeper的 ,你Broker執行期間需要給資料存到Zookeeper上的.比如說Topic叫什麼名字,有多少分割槽等等,這些元資料都需要存到Zookeeper裡面.