JAVA应用开发MQ实战最佳实践——Series2:消息队列RocketMQ性能测试案例
往期內(nèi)容
JAVA應用開發(fā)MQ實戰(zhàn)最佳實踐——Series1:RocketMQ綜述及代碼設計
1. 消息隊列RocketMQ性能測試案例
1.1 RocketMQ測試分析
客戶場景,信息共享交換平臺:
1.交換平臺需支持每秒萬級別數(shù)據(jù)傳輸
2.實現(xiàn)跨路段、跨部門、跨行業(yè)、跨區(qū)域信息即時共享,做到高可靠、低延遲
客戶現(xiàn)場展示場景設計思路:
1.針對性的編寫一套JAVA代碼來支撐本次MQ性能POC驗證。
2.選擇合適規(guī)格的單臺ECS,在單個TOPIC下運行多線程代碼實現(xiàn)和MQ的訂閱發(fā)送,統(tǒng)計1分鐘內(nèi)訂閱和發(fā)送的數(shù)據(jù)交換TPS情況。
3.考慮POC也要符合客戶實際生產(chǎn)場景中MQ使用邏輯,ECS應運行4個獨立的JAR包,兩對JAR包交叉經(jīng)過MQ進行數(shù)據(jù)交換。
4.消息體內(nèi)的內(nèi)容應打印到屏幕,通過消息軌跡驗證消息的被消費情況。
5.驗證結果:客戶指定場景下8線程異步,1分鐘TPS在10K以上。
1.2 創(chuàng)建資源
本章節(jié)詳細描述如何創(chuàng)建消息隊列 RocketMQ 版的資源。
1.2.1 創(chuàng)建RocketMQ實例
1.登錄Apsara Stack控制臺。
2.在左側導航欄中單擊中間件產(chǎn)品 > 消息隊列訪問管理控制臺界面。
3.在消息隊列頁面,選擇區(qū)域與部門后,單擊MQ,進入MQ控制臺。
4.單擊左側導航欄概覽后,在概覽頁面中,單擊創(chuàng)建實例。
5.在創(chuàng)建實例對話框,選擇實例類型,并輸入實例名和描述,然后單擊確認。
說明: 創(chuàng)建完實例后,單擊左側導航欄實例詳情,可以查看創(chuàng)建實例的Topic數(shù)上限、消息發(fā)送TPS上限、消息訂閱TPS上限和TCP協(xié)議接入地址等。
1.2.2 創(chuàng)建 Topic
Topic 是消息隊列 RocketMQ 版里對消息的一級歸類,例如可以創(chuàng)建 Topic_Trade 這一 Topic 來識別交易類消息,消息生產(chǎn)者將消息發(fā)送到 Topic_Trade,而消息消費者則通過訂閱該 Topic 來獲取和消費消息。
創(chuàng)建Topic要注意一下幾點:
- Topic 不能跨實例使用,例如在實例 A 中創(chuàng)建的 Topic A 不能在實例 B 中使用。
- Topic 名稱必須在同一實例中是唯一的。
- 您可創(chuàng)建不同的 Topic 來發(fā)送不同類型的消息,例如用 Topic A 發(fā)送普通消息,Topic B 發(fā)送事務消息,Topic C 發(fā)送定時/延時消息。
1.在控制臺左側導航欄,單擊 Topic 管理。
2.在 Topic 管理頁面上方選擇剛創(chuàng)建的實例,單擊創(chuàng)建 Topic 按鈕。
3.在創(chuàng)建 Topic 對話框中的 Topic 一欄,輸入 Topic 名稱,選擇該 Topic 對應的消息類型,輸入該 Topic 的備注內(nèi)容,然后單擊確定。
1.2.3 創(chuàng)建 Group ID
創(chuàng)建完實例和 Topic 后,您需要為消息的消費者(或生產(chǎn)者)創(chuàng)建客戶端 ID ,即 Group ID 作為標識。
- Group ID 必須在同一實例中是唯一的。
- Group ID 和 Topic 的關系是 N:N,即一個消費者可以訂閱多個 Topic,同一個 Topic 也可以被多個消費者訂閱;一個生產(chǎn)者可以向多個 Topic 發(fā)送消息,同一個 Topic 也可以接收來自多個生產(chǎn)者的消息。
1.在控制臺左側導航欄,單擊 Group 管理。
2.在 Group 管理頁面上方選擇剛創(chuàng)建的實例,然后選擇TCP協(xié)議 > 創(chuàng)建Group ID 。本文以 TCP 協(xié)議為例。
3.在創(chuàng)建 Group ID 對話框中,輸入 Group ID 和描述,然后單擊確認。
1.3 場景落地
1.準備p1,c1,p2,c2雙發(fā)送雙訂閱應用小程序,p1、p2小程序參考“第二章節(jié)”生產(chǎn)者異步發(fā)送消息代碼,c1、c2小程序參考“第二章節(jié)”消費者集群訂閱消息代碼
p1-8081.jar
c1-8083.jar
p2-8082.jar
c2-8084.jar
2.通過Xshell連接到專有云ops1環(huán)境,把準備的4個jar包上傳至一臺16c32gECS服務器上
3.同時在該目錄下編寫啟動4個jar包的start.sh腳本:
#!/bin/bash
nohup java -jar p1-8081.jar &
nohup java -jar p2-8081.jar &
nohup java -jar c1-8081.jar &
nohup java -jar c2-8081.jar &
4.編寫停用4個jar包的stop.sh腳本:
5.編寫請求消息隊列2個發(fā)送和2個訂閱接口的curl腳本:
#!/bin/bash
curl http://192.168.0.150:8081/echo-sync-final-send
curl http://192.168.0.150:8082/echo-sync-final-send
curl http://192.168.0.150:8083/echo-final-mq
curl http://192.168.0.150:8084/echo-final-mq
6../start.sh執(zhí)行啟動4個jar包,通過tail -f nohup.out查看啟動日志,每個jar包啟動完成日志如下:
7.通過ps -ef | grep jar確認4個jar是否在ECS服務器運行,有如下圖則表示4個應用小程序運行正常:
8../curl.sh執(zhí)行請求2個消息發(fā)送和2個消息訂閱接口,請求之后我們查看一下程序后臺日志發(fā)現(xiàn)代碼打印的消息發(fā)送和消息訂閱的日志不停的在刷,截取單條消息發(fā)送日志如下:
截取單條消息訂閱日志如下:
1.4 消息查詢
如遇消息消費有問題,則可通過查詢具體發(fā)送的消息內(nèi)容來排查問題。消息隊列 RocketMQ 版提供了三種消息查詢的方式,分別是按 Message ID、Message Key 以及 Topic 查詢。
1.4.1 查詢方式說明
三種查詢方式的特點和對比如下表所述。
表1:查詢方式對比
1.4.2 推薦查詢過程
推薦按照以下流程查詢消息。
1.4.3 查詢步驟
1.登錄MQ控制臺。
2.在左側導航欄,單擊消息軌跡。
3.在消息軌跡頁面,您可單擊以下任一頁簽,然后按頁面提示輸入相應信息,再單擊搜索按鈕來查詢消息。
- 按 Message ID 查詢
按 Message ID 查詢消息屬于精確查詢,您輸入 Topic 和 Message ID 即可精確查詢到任意一條消息。因此,為了盡可能精確地查詢,建議在發(fā)送消息成功后將 Message ID 信息打印到日志中,方便問題排查。
- 按 Message Key 查詢
消息隊列 RocketMQ 版根據(jù)您設置的 Message Key 建立消息的索引信息,當您輸入 Key 進行查詢時,消息隊列 RocketMQ 版根據(jù)該索引即可匹配相關的消息返回。
- 按 Topic 查詢
按 Topic 查詢一般用在 Message ID 和 Message Key 都無法獲得的情況下,根據(jù) Topic 和消息的發(fā)送時間范圍,批量獲取該時間范圍內(nèi)的所有消息,然后再找到關心的數(shù)據(jù)。
4.在操作欄中單擊消息詳情,可查看到軌跡的簡要信息,主要是消息本身的屬性以及接收狀態(tài)的信息。
5.在展開的區(qū)域中,單擊查看軌跡即可查看完整的鏈路圖。下圖示例為在 TCP 協(xié)議下,按 Message ID 查詢普通消息的軌跡。
對于 Message Key 和 Topic 查詢方式,如果匹配到多條軌跡,可以進行上下翻頁,查看比對軌跡數(shù)據(jù)。
1.4.4 查詢結果說明
您可以在控制臺的消息查詢頁面看到查詢到的消息。直接顯示的信息包含 Message ID、Tag、Key 和存儲時間。此外,您還可以在每一行消息操作列下載消息內(nèi)容、查詢信息軌跡以及查看消息詳情。
投遞狀態(tài)是消息隊列 RocketMQ 版根據(jù)各個 Group ID 的消費進度計算出的結果,投遞狀態(tài)的信息如下表所示。
表 2: 消息投遞狀態(tài)
1.4.5 消費驗證
消息隊列 RocketMQ 版提供了消費驗證功能,該功能可以將指定消息推送給指定的在線客戶端,以檢測客戶端消費該消息的邏輯和結果是否符合預期。
說明: 消費驗證功能僅僅是用于驗證客戶端的消費邏輯是否正常,并不會影響正常的收消息流程,因此消息的消費狀態(tài)等信息在消費驗證后并不會改變。
1.5 查看消息生產(chǎn)數(shù)據(jù)
可供查看的消息生產(chǎn)數(shù)據(jù)是某個Topic在一個時間段內(nèi)從Broker接收的消息的總量或者TPS。
1.登錄MQ控制臺。
2.在左側導航欄,單擊資源報表。
3.在資源報表頁面,單擊消息生產(chǎn)頁簽。
4.在Topic一欄,選擇Topic,并指定其他信息,然后單擊搜索。
字段說明:
- 采集類型:分為總量和TPS。總量提供該周期內(nèi)Topic接收的消息總量;TPS提供每個周期內(nèi)該Topic接收消息的平均TPS。
- 采集周期:包括1分鐘、10分鐘后、30分鐘、1小時。采集周期決定了數(shù)據(jù)采集的時間間隔,周期越短,采集點越密集,消息消費數(shù)據(jù)越詳細。
- 時間范圍:RocketMQ最多可以提供最近三天之內(nèi)的消息的生產(chǎn)查詢。
查詢結果以圖表的形式顯示
1.6 查看消息消費數(shù)據(jù)
可供查看的消息消費數(shù)據(jù)是某個Topic在一個時間段內(nèi)投遞給某個Group ID的消息的總量或TPS。
具體操作步驟如下:
1.登錄MQ控制臺。
2.在左側導航欄,單擊資源報表。
3.在資源報表頁面,單擊消息消費頁簽。
4.在Group ID和Topic欄,分別選擇您要查詢的Group ID和Topic。
5.指定其他信息,然后單擊搜索。
字段說明:
- 采集類型:分為總量和TPS。總量提供每個周期內(nèi)該Topic投遞給該Group ID的消息總量,TPS提供每個周期內(nèi)該Topic投遞給該Group ID消息的平均TPS。
- 采集周期:包括1分鐘、10分鐘后、30分鐘、1小時。采集周期決定了數(shù)據(jù)采集的時間間隔,周期越短,采集點越密集,消息消費數(shù)據(jù)越詳細。
- 時間范圍:RocketMQ最多可以提供最近三天之內(nèi)的消息的消費查詢。
查詢結果以圖表的形式顯示
我們是阿里云智能全球技術服務-SRE團隊,我們致力成為一個以技術為基礎、面向服務、保障業(yè)務系統(tǒng)高可用的工程師團隊;提供專業(yè)、體系化的SRE服務,幫助廣大客戶更好地使用云、基于云構建更加穩(wěn)定可靠的業(yè)務系統(tǒng),提升業(yè)務穩(wěn)定性。我們期望能夠分享更多幫助企業(yè)客戶上云、用好云,讓客戶云上業(yè)務運行更加穩(wěn)定可靠的技術,您可用釘釘掃描下方二維碼,加入阿里云SRE技術學院釘釘圈子,和更多云上人交流關于云平臺的那些事。
原文鏈接:https://developer.aliyun.com/article/779502?
版權聲明:本文內(nèi)容由阿里云實名注冊用戶自發(fā)貢獻,版權歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權,亦不承擔相應法律責任。具體規(guī)則請查看《阿里云開發(fā)者社區(qū)用戶服務協(xié)議》和《阿里云開發(fā)者社區(qū)知識產(chǎn)權保護指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權投訴表單進行舉報,一經(jīng)查實,本社區(qū)將立刻刪除涉嫌侵權內(nèi)容。總結
以上是生活随笔為你收集整理的JAVA应用开发MQ实战最佳实践——Series2:消息队列RocketMQ性能测试案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云效DevOps实践-代码评审
- 下一篇: 下周见| 重量级演讲阵容首曝光DTCC