kafka基礎原理

周小凡_q發表於2022-05-06

1、什麼是kafka

Kafka 是一個分散式的基於釋出/訂閱模式的訊息佇列

訊息佇列的兩種模式:

點對點模式(一對一,消費者主動拉取資料,訊息收到後訊息清除)。特點,一個訊息只能被一個消費者消費

 

 

 

釋出/訂閱模式(一對多,消費者消費資料之後不會清除訊息)。特點,一個訊息可以被多個訂閱的消費者消費

 

 

 

2、訊息佇列的優點:

解耦
允許獨立擴充套件或修改兩邊的處理過程,只要確保它們遵守同樣的介面約束。
可恢復性
系統的一部分元件失效時,不會影響到整個系統。訊息佇列降低了程式間的耦合度,所以即使一個處理訊息的程式掛掉,加入佇列中的訊息仍然可以在系統恢復後被處理。
靈活性 & 峰值處理能力
在訪問量劇增的情況下,應用仍然需要繼續發揮作用,但是這樣的突發流量並不常見。如果為以能處理這類峰值訪問為標準來投入資源隨時待命是很浪費的,使用訊息佇列能夠使關鍵元件頂住突發的訪問壓力,而不會因為突發的超負荷請求而崩潰。
非同步通訊
很多時候使用者不想也不需要立即處理訊息。訊息佇列提供了非同步處理機制,允許使用者把一個訊息放入佇列但並不立即處理它。想向佇列中放入多少訊息就放多少,然後在需要的時候再去處理它們。例:晨配專案集收建立訂單後推給大網,同時這個單還需要判斷是供應商派送還是順豐派送。派送的判斷需調大網介面,大網處理這個新建的訂單需要一定的時間,所以我們在建立訂單後,通過mq加個了延遲

3、Kafka介紹

 

 

Producer:Producer即生產者,訊息的產生者,是訊息的入口。

Consumer:消費者,即訊息的消費方,是訊息的出口。

Consumer Group:我們可以將多個消費組組成一個消費者組,在kafka的設計中同一個分割槽的資料只能被消費者組中的某一個消費者消費。同一個消費者組的消費者可以消費同一個topic的不同分割槽的資料,這也是為了提高kafka的吞吐量!

kafka cluster(kafka叢集)
    Broker:Broker是kafka例項,每個伺服器上有一個或多個kafka的例項,我們姑且認為每個broker對應一臺伺服器。每個kafka叢集內的broker都有一個不重複的編號,如圖中的broker-0、broker-1等……
    Topic:訊息的主題,可以理解為訊息的分類,kafka的資料就儲存在topic。在每個broker上都可以建立多個topic。
    Partition:Topic的分割槽,每個topic可以有多個分割槽,分割槽的作用是做負載,提高kafka的吞吐量。同一個topic在不同的分割槽的資料是不重複的,partition的表現形式就是一個一個的資料夾!
    Replication:每一個分割槽都有多個副本,副本的作用是做備胎。當主分割槽(Leader)故障的時候會選擇一個備胎(Follower)上位,成為Leader。在kafka中預設副本的最大數量是10個,且副本的數量不能大於Broker的數量,follower和leader絕對是在不同的機器,同一機器對同一個分割槽也只可能存放一個副本(包括自己)。
    Message:每一條傳送的訊息主體。

Zookeeper:Kafka通過Zookeeper管理Kafka叢集配置:選舉Kafka 的leader,以及在Consumer Group發生變化時進行rebalance,因為consumer消費kafka topic的partition的offsite資訊是存在Zookeeper的。失敗的訊息會記錄在Zookeeper,重啟後Consumer先消費Zookeeper裡失敗的訊息,再從上次offset開始消費。

訊息儲存過程:

 

 

 

訊息寫入leader後,follower是主動的去leader進行同步的!producer採用push模式將資料釋出到broker,每條訊息追加到分割槽中,順序寫入磁碟,所以保證同一分割槽內的資料是有序的

訊息消費過程:

 

 

 

消費者在拉取訊息的時候也是找leader去拉取。同一個消費組者的消費者可以消費同一topic下不同分割槽的資料,但是不會組內多個消費者消費同一分割槽的資料。

思考:1、怎麼配置partition數量和consumergroup的消費者數量,能達到消費效率最大化?

           2、多個consumergroup消費同一個topic,offset 的值有影響嗎:

           3、批量傳送訊息怎麼保證訊息的順序?

相關文章