kafka分區及消費組概念


分區和消費組是kafka提高性能的主要方式,其理念為多組件協作,共同完成數據讀寫任務,兩者的相關原理及關系如下:

一:分區

kafka的數據層級為:主題->分區->消息。即:kafka可有多個主題,每個主題可以有多個分區,每個分區可以有多條消息。

這里是分區概念類似於數據庫sql server分區概念。例如,我有9條數據1-9,分到3個分區,我可以把數據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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM