圖解Kafka中的基本概念

在上篇文章《消息系統概述》中對消息系統進行了介紹,本次將學習Kafka中的基本概念。首先咱們回顧下在消息系統的使用場景中有三種角色分別是生產者、消息系統和消費者,其中生產者負責產生消息和發送消息到消息系統,而消息系統將爲消費者提供消息用於處理,以下圖。
圖解Kafka中的基本概念
Kafka是基於發佈/訂閱模式的消息系統,以下圖。生產者會將消息推送到Kafka中的某個Topic上。引入Topic的目的則是爲了對消息進行分類,這樣消費者就能夠根據須要訂閱相應的Topic獲取消息。
圖解Kafka中的基本概念
雖然Kafka這樣已經能開始工做了,但緊接着又面臨單點問題。而爲了解決單點問題,Kafka引入了Broker的概念。一個Broker是一個Kafka實例,而一臺機器上可運行多個Broker,這裏咱們認爲一臺機器上只有一個Kafka實例。多個Broker將造成一個Kafka集羣,而Topic也可指定副本數量,做爲多個副本位於多臺機器上。Kafka使用ZooKeeper在多個副本中選舉出一個Leader,其餘副本將做爲Follower。Leaer主要負責讀寫消息,也就是和生產者、消費者打交道,同時將消息同步寫到其餘副本中。當有Broker失效時,若是Topic沒有了Leader,則會從新選舉出新的Leader,從而解決單點問題。
圖解Kafka中的基本概念
引入Broker和副本後解決了單點問題,接着面對的是性能問題,對於單個Topic來講,只有Leader所在的Broker與生產者、消費者進行通訊,這樣吞吐量將受到Broker所在的機器限制。那麼如何提升吞吐量。Kafka將Topic拆分紅多個分區,也就是將消息進行劃分,相似數據庫的分庫,這樣起到了負載均衡的做用,可不受單機的限制。以下圖,生產者A分別往TopicA的分區0和分區1寫消息,而消費者A、B則也從分區0、1獲取消息。這裏注意下,在不一樣分區存儲的消息也是不一樣的,和副本的概念要分清楚。
圖解Kafka中的基本概念
從上圖中咱們可看到消費者A在消費TopicA時分別從分區0、分區1中獲取消息,爲了進一步提升吞吐量,Kafka引入了消費組的概念,將消費者A拆分紅多個消費者,從而造成一個消費組。咱們能夠這樣理解,消費者A是一個應用A實例,爲了提升消費的吞吐量,咱們多部署了幾個消費者A實例,這樣就有多個消費者造成一個消費組,但乾的都是應用A作的事,須要與消費者B(不一樣的應用)區分開。通常設置消費組的消費者數與分區數一致,這是爲了一個消費者能負責一個分區,提升效率。若是消費組的消費者數量小於分區數,則會出現一個消費者負責多個分區。而若是消費組的消費者數量大於分區數,則會出現有消費者分不到分區,形成浪費。因此通常保持一致。爲了簡潔,且消費組B和消費組A相似,因此下圖未將消費組B畫出。
圖解Kafka中的基本概念
Kafka中的基本概念就是以上這些:生產者、消費者、Topic、Broker、副本、分區和消息組。最後爲了你們更好的理解分區的概念,再畫一張細節圖。
圖解Kafka中的基本概念
一個分區能夠看作是一個單獨的隊列,生產者根據策略將消息寫入對於的分區,策略有三種:1、直接指定分區;2、若是未指定分區,則根據消息的key,經過哈希函數指定分區;3、若是沒有key,則輪詢分區。這裏想強調的是分區中的數據是不一樣的,一條消息只會進入一個分區。而消費組中的消費者則會根據偏移量去分區中取得相應的消息進行消費處理。數據庫

相關文章
相關標籤/搜索