消費組使kafka中很重的概念,只有弄清楚消費組的概念,才能在專案中把它運用好,在kafka中,每個消費者都對應一個消費組,消費者可以是一個執行緒,一個程序,一個服務範例,如果kafka想要消費訊息,那麼需要指定消費那個topic的訊息以及自己的消費組id(groupId),也可以直接指定那個主題的哪些分割區,不然無法消費訊息,消費組是一個邏輯上的概念,如下圖是主題,分割區,消費組,消費者的關係圖。
從上圖看出都兩個消費組,分別為消費組a和消費組b,消費組a有三個消費者c1,c2,c3,其中c1消費分割區1,c2消費分割區2,c3消費分割區3和分割區4,消費組b有c4和惡c5兩個消費者,c4消費分割區1和分割區2,c5消費分割區3和分割區4,我們可以看出,一個消費組內的消費者可以同時消費一個或者幾個分割區,反之,一個分割區只能被同一個消費組內的消費者消費
。
此時我們在消費組a中新增了一個消費者c6
,我們看到,原來的c3消費分割區3和分割區4,現在c3只消費分割區4,把分割區4讓給了c6去消費,由此可以看出kafka會使消費者平均消費分割區。
繼續在消費組a中增加一個消費者c7,如下圖,那麼由於消費組a中的每個消費者都訂閱了一個分割區,因為秉承一個分割區只能被同一個消費組內的一個消費者消費的原則,四個分割區剛好對應4個消費者,所以c7消費者就只能空閒下來。
從上面的消費組的一些介紹,我們就可以引申出訊息中介軟體的消費模式,我們知道訊息中介軟體的消費模式有釋出訂閱模式
和對等模式
,在不同的場景下使用的消費模式也不一樣,這樣根據我們的業務需求去選擇,下面我們訊息介紹一下這兩種模式。
釋出訂閱模式顧名思義就是生產者釋出訊息以後,消費者訂閱對應的主題分割區,然後進行消費,它是一對多的,就像學校的在廣播裡面通知,所有的學生都能聽到,還有微信的訂閱號,一個訂閱號會有很多人關注,當訂閱號的號主釋出一篇文章,關注的人都能收到。
那麼在kafka中,怎麼做釋出訂閱模式呢?很簡單,就是不同的消費組就能實現釋出訂閱模式,在上面我們說了一個分割區只能被同一個消費組內的消費者消費
,那麼我們使用不同的消費組的消費者消費同一個分割區就行了,這就實現了釋出訂閱模式,如下圖,有三個消費組a,b,c的消費者c1,c2,c3消費同一個分割區,在kafka中使用groupId
來表示消費組,如果所有的消費者的groupId都設定一樣,那麼他們就屬於同一個消費組。
釋出訂閱模式的應用場景有很多,比如下游有很多服務都需要使用同一份資料,如果通過編碼的方式來實現的話,可以通過RPC方式來呼叫,但是就會造成系統的耦合,使用訊息中介軟體的話,上游只管投遞訊息,下游服務訂閱後,就可以消費到訊息,大大降低了耦合。
對等模式就是一對一模式,現實生活中我們打電話,私聊都屬於對等模式,在kafka中要使用對等模式,那麼我們還是要回到一個分割區只能被同一個消費組內的消費者消費
這個問題,那麼我們就建立一個消費組,每個分割區的資料只能被這個消費組內的消費者訊息,就實現了對等模式。
對等的應用場景也很多,因為它的資料只能被一個消費者使用,比如可以削峰,比如上游服務傳送了很多資料過來,如果下游服務的就只有一個消費者範例,那麼就可能造成訊息的積壓,這時候就可以多開幾個消費者範例一起消費,就加快了訊息的消費速度,不過也得考慮一些因素,比如訊息的順序。
上面對消費組和消費者進行了詳細的圖文介紹,也引申出了消費模式的釋出訂閱模式,對等模式,並說了一些應用場景,在實際使用的時候,我們需要根據自己的業務去衡量需要多少消費者,消費者與主題分割區之間的數量規劃等等,對於kafka的引數調優啊,訊息的順序消費,訊息的丟失,重複消費等問題,後續我們再繼續。
感謝你的觀看,我們下期見,如果文中有說得不合理或者不正確的地方,希望你能進行指點!