當別人問這個問題的時候,別人肯定是想你是否看過原始碼。是否針對不同場景改過kafka的分割槽模式這是別人最想知道的是,你的message如何負載均衡的傳送給topic的partition
我們用kafka的時候,可以動態指定partition,也可以不指定partition
當我們動態指定了partition的時候,kafka會將訊息傳送到指定的partition
如果沒有指定partition
這就是關鍵了,
如何讓這些訊息,均衡的傳送給每個partition
先看看傳送訊息的方式
kafka首先判斷partition,如果有partition就傳送到指定的partition
如果沒有,就看有沒有key
如果有key就將,key弄成位元組,然後用個演算法,搞成整數,然後除以partition的個數,最後的餘數就是partition的所在
如果partition,和key都沒有的時候,原始碼弄了乙個int型別的counter,從0開始,每來一條訊息就累加,用counter除以partition的個數的餘數就是partition的所在
這樣就打到了每個partition的均衡了
【大俠】
2017/8/25
14:02:17
當然了,我們也可以自己定義partition
某些人用partition指定分割槽數發訊息,如果又有人不指定partition,key,就會發生負責不均衡
你設定了key,只能保證你自己均衡了
但是要是有其他人指定某個partition發訊息呢
【大俠】
2017/8/25
14:09:14
別個是,
1,2,3,4
,這是key的kafka的分的partition,你指定了就變成了1111
【大俠】
2017/8/25
14:09:40
很多公司,都重寫了kafka的分割槽
kafka 修改分割槽 kafka分割槽
一 topic下引入partition的作用 topic是邏輯的概念,partition是物理的概念。為了效能考慮,如果topic內的訊息只存於乙個broker,那這個broker會成為瓶頸,無法做到水平擴充套件。kafka通過演算法盡可能的把partition分配到集群的不同伺服器上。partit...
kafka 分割槽數
kafka的分割槽,相當於把乙個topic再細分成了多個通道 對應 多個執行緒 部署的時候盡量做到乙個消費者 執行緒 對應乙個分割槽。如果你的分割槽數是n,那麼最好執行緒數也保持為n。kafkastream 它是consumer的關鍵類,提供了遍歷方法用於consumer程式呼叫實現資料的消費。其底...
Kafka分割槽問題的記錄
kafka分割槽及相關的問題挺多的,目前就近期遇到的一些問題做乙個總結。建立生產者時預設分割槽為0,也可以通過手動指定分割槽 預設 producerrecordrecord new producerrecord topic,key,msg 手動指定分割槽為1 producerrecordrecord...