RocketMQ的Consumer是如何做的負載均衡的


https://zhuanlan.zhihu.com/p/159017211

看着這算法凌亂的很,太復雜了!說實話,確實挺復雜,蠻羅嗦的,但是代數法可以得到如下表格:

假設4個queueConsumer有2個可以整除Consumer有3個不可整除Consumer有5個無法都分配queue[0]Consumer[0]Consumer[0]Consumer[0]queue[1]Consumer[0]Consumer[0]Consumer[1]queue[2]Consumer[1]Consumer[1]Consumer[2]queue[3]Consumer[1]Consumer[2]Consumer[3]

所以得出如下真香定律(也是回擊面試官的最佳答案):

  • queue個數大於Consumer個數,且queue個數能整除Consumer個數的話, 那么Consumer會平均分配queue。(比如上面表格的Consumer有2個 可以整除部分)
  • queue個數大於Consumer個數,且queue個數不能整除Consumer個數的話, 那么會有一個Consumer多消費1個queue,其余Consumer平均分配。(比如上面表格的Consumer有3個 不可整除部分)
  • queue個數小於Consumer個數,那么會有Consumer閑置,就是浪費掉了,其余Consumer平均分配到queue上。(比如上面表格的Consumer有5個 無法都分配部分)

當一個consumer出現宕機后,默認最多20s,其它機器將重新消費已宕機的機器消費的queue

新啟動Consumer的話會立即喚醒沉睡的線程, 讓他立馬進行this.mqClientFactory.doRebalance();


免責聲明!

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



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