1. 程式人生 > 其它 >kafka分割槽及消費組概念

kafka分割槽及消費組概念

分割槽和消費組是kafka提高效能的主要方式,其理念為多元件協作,共同完成資料讀寫任務,兩者的相關原理及關係如下:

一:分割槽

kafka的資料層級為:主題->分割槽->訊息。即:kafka可有多個主題,每個主題可以有多個分割槽,每個分割槽可以有多條訊息。

這裡是分割槽概念類似於資料庫sql server分割槽概念。例如,我有9條資料1-9,我可以把資料1,2,3分到分割槽1,把4,5,6分到分割槽2,把7,8,9分到分割槽3。分割槽就是把資料分別儲存到不同區的意思,把所有分割槽的資料彙集到一起,就是一個主題的全部資料。

當然,kafka有多種資料分配策略:

輪詢策略

所謂輪詢策略,即按順序輪流將每條資料分配到每個分割槽中。

舉個例子,假設主題test有三個分割槽,分別是分割槽A,分割槽B和分割槽C。那麼主題對接收到的第一條訊息寫入A分割槽,第二條訊息寫入B分割槽,第三條訊息寫入C分割槽,第四條訊息則又寫入A分割槽,依此類推。

輪詢策略是預設的策略,故而也是使用最頻繁的策略,它能最大限度保證所有訊息都平均分配到每一個分割槽。除非有特殊的業務需求,否則使用這種方式即可。

隨機策略

隨機策略,也就是每次都隨機地將訊息分配到每個分割槽。其實大概就是先得出分割槽的數量,然後每次獲取一個隨機數,用該隨機數確定訊息傳送到哪個分割槽。

在比較早的版本,預設的分割槽策略就是隨機策略,但其實使用隨機策略也是為了更好得將訊息均衡寫入每個分割槽。但後來發現對這一需求而言,輪詢策略的表現更優,所以社群後來的預設策略就是輪詢策略了。

按鍵儲存策略

按鍵儲存策略,就是當生產者傳送資料的時候,可以指定一個key,計算這個key的hashCode值,按照hashCode的值對不同訊息進行儲存。

至於要如何實現,那也簡單,只要讓生產者傳送的時候指定key就行。欸剛剛不是說預設的是輪詢策略嗎?其實啊,kafka預設是實現了兩個策略,沒指定key的時候就是輪詢策略,有的話那激素按鍵儲存策略了。

上面有說到一個場景,那就是要順序傳送訊息到kafka。前面提到的方案是讓所有資料儲存到一個分割槽中,但其實更好的做法,就是使用這種按鍵儲存策略。

讓需要順序儲存的資料都指定相同的鍵,而不需要順序儲存的資料指定不同的鍵,這樣一來,即實現了順序儲存的需求,又能夠享受到kafka多分割槽的優勢,豈不美哉。

以上三種策略內容引自:https://www.cnblogs.com/listenfwind/p/12465409.html

二:消費組

消費組以gourpid進行區分,一個主題可以被一個或者多個消費組消費。原則為:每個消費組都會完整消費到這個主題的所有資料,但是,消費組內的消費者之間為差別合作關係,而非獨立獲取關係,即:假設一個消費組有2個(最簡單情況)消費者,消費者A消費了一部分資料,那麼另一個消費者B只能消費到其餘資料,兩個消費者消費的資料不存在重複。特點總結如下:

1)每個消費者組下面可以有一個或多個消費者例項,而消費者例項可以是一個程序,也可以是一個執行緒

2)每個消費者組都具有一個用來唯一標識的字串形式的ID,即group.id

3)每個消費者組訂閱的topic下的每個partition分割槽只能分配給該消費者組下的一個消費者例項(當然該分割槽也還可以被分配給其它的消費者組)

————————————————
以上三種特點引自:https://blog.csdn.net/weixin_43230682/article/details/107323004

三:分割槽和消費組關係

1.分割槽多,消費組內的消費者少

假設一個主題的分割槽有3個,消費者只有2個,那麼最終的結果是,其中一個消費者獲得2個分割槽的資料,另一個消費者獲得剩餘的一個分割槽資料。

2.分割槽少,消費組內消費者多

如果存在這種情況,說明僧多肉少,那麼最終的結果為:多餘的消費者沒法對應到分割槽,也沒法獲取到分割槽的資料。而對應到分割槽的消費者可以正常獲取到資料。

3.分割槽和消費組內的消費者一樣多

如果分割槽數量和消費組內的消費者一樣多,則每個消費者都會對應到一個分割槽,並獲取到分割槽內的資料,這些資料組合起來就是一個完整的主題資料。

4.一個分割槽對應多個消費者組

每個消費者組都會獲取到完整的主題資料,但每個消費者組內的消費者獲取情況,需參照以上三種情況。

參考連結:

https://www.cnblogs.com/listenfwind/p/12465409.html

https://blog.csdn.net/weixin_43230682/article/details/107323004

文章出處:www.cnblogs.com/jizhong

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線。否則保留追究法律責任的權利。