您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關如何實現RocketMQ隊列queue的偏移量Offset均衡分布測試的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
一 機器部署
1、機器組成
7臺機器,均為16G內存
每臺服務器均有4個CPU,2核
2、運行環境配置
3、刷盤方式
每臺機器master機器均采用異步刷盤方式
二 性能評測
1、評測目的
測試queue接受消息負載均衡
2、評測指標
每個queue的接受消息后,其偏移量offset大致相同
3、評測邏輯
創建topic,并配置該topic下的queue數量(3,5,8,16),發送消息后打印該條消息對應的offset,比對消息offset增加量
4、評測過程
(1)在master機器上創建名稱為“topicQueueOffsetTest”
(2)控制臺創建的topic配置文件保存在store目錄, 查看/root/store/config/topic.json文件,即可找到該topic的原始數據
(3)client端開啟5個線程,發送不同數量的消息,發送消息后記錄消息在各隊列queue的offset
queue配置的是默認值8, 發送的消息條數 5*50=250條消息
queue配置的是默認值8, 發送的消息條數 5*400=2000條消息
客戶端設置queue隊列數為12,再次發送的消息條數 5*400=2000條消息,并記錄消息的offset,關鍵代碼如下
此處日志顯示的 queueNum=12,是指的client端的producer獲取的queue個數,但此時后續的日志顯示,server端的queueID依然是0-7,總共8個,兩種queue的個數并不相等。
說明在producer發送消息時,對于此前已運行的borker服務器,修改配置文件的defaultTopicQueueNums屬性的值不起作用,需要重啟服務才能使得 已運行的topic的queue個數真正生效。
有兩種方式,可動態更改topic以及topic相關的屬性,
第一種、編輯 master機器的/root/store/config/topic.json文件,找到topic名稱為"topicQueueOffsetCheck"的數據,更新其readQueueNums、writeQueueNums兩個屬性,并重啟master集群和slave集群
第二種方式:在rocketmq控制臺動態更新topic相關數據(此方式更改后,會自動同步topic數據到其他master、其他slave,可以不用重啟master、slave服務),此處我采用的是第二種方式更新。
更新server端的queue為12,再次發送2000條消息,發現新舊兩種隊列的消息offset基本已達到均衡。
queueId為0-7的隊列,消息較多,各個隊列的消息offset幾乎相同,消息負載平衡;
queueId為8-11的隊列,消息較少,是為新增的4個隊列,這四個隊列之間的offset也基本達到了平衡。
縱觀這12個隊列保存的消息, queueId=0的隊列,上一次的offset偏移量為508,本次offset=594,差值594-508=86,其余quereId的消息差異量也基本在83左右。說明 動態更新queueNums,水平擴容之后, queue隊列在接受到消息后任能夠均衡存儲消息。
從此例分析出:queue收到的消息均衡分布,指的是每個queue每次收到消息的增加量能達到均衡;并不是指擴容后新增的queue隊列的offset需要從0增加到原有隊列的offset,而原有queue需等待直至所有queue的消息偏移量offset均達到同一水平的情況。
保持queueNums=12不變,增大線程個數和次數,發送6*3000=18000條消息,再次記錄消息offset,最終結果如下,所有queue的“接受消息”的新增偏移量,均能達到平衡。
保持queueNums=12不變,增大線程個數和次數,發送6*4000=24000條消息,記錄保存消息的brokerName、queueId。
分析日志,可得出結論,消息的確均衡分布到了 broker-master1、broker-master2兩臺機器的各個隊列。
二 評測結果
1、客戶端發送的消息,服務器集群收到消息后,能均衡分布到集群的每臺多臺master機器,且每臺機器的每個queue接受到的消息也是均衡分布。
2、動態增加queueNums個數,水平擴容之后,新增的、原來的queue接受到的消息數也能達到均衡分布。
3、服務端創建topic時會設置默認的queueNums數值,該數值的優先級高于創建producer所設置的defaultQueueNums。
4、對于已在運行的topic,若需動態更新topic的相關屬性,推薦使用rocketmq的控制臺,通過控制臺動態更新。
感謝各位的閱讀!關于“如何實現RocketMQ隊列queue的偏移量Offset均衡分布測試”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。