RocketMQ消費批拉超過32不生效
阿新 • • 發佈:2018-12-28
說明
由於一些原因,我需要RocketMQ消費的時候,一批拉400條,一批處理400條。設定如下:
為了簡單驗證是否正確,消費如下:
直接通過列印msgs.size()觀察情況即可。
現象
實驗的topic裡面的訊息數量很多很多,但是啟動消費端,消費端的日誌如下:
奇怪啦,明明已經進行了修改
為什麼還是每次只能消費32條呢?
除錯RocketMQ原始碼
通過跟蹤consumer程式碼:
這裡的確已經設定為400了,那麼我們需要跟蹤到broker服務端進行查看了。
broker接受到的也是400,我們只有繼續跟蹤
因為返回為true導致下面的if判斷成立,for迴圈就break了,所有隻取了32條資料返回到consumer了:
如果需要讓可以一次拉取400條,需要修改broker這裡的資料配置才可(其實關於一條訊息大小也是類似的,雖然說最大設定16M,但是也是和這裡同理需要設定broker相關的資料配置才可生效)。
修改broker的配置檔案,新增:maxTransferCountOnMessageInMemory=400 重啟broker即可,效果如下:
效果正常,其實如果訊息過大,還需要考慮下面幾個引數:
總結
需要RocketMQ消費的時候,一批拉400條,一批處理400條。設定如下:
還是達不到效果的,還需要設定broker相關的引數,本次裡面設定broker的maxTransferCountOnMessageInMemory=400即可,其他情況需要考慮如下等引數。
文章github原始碼地址:rocketmq,或者公號回覆“rocketmq”獲取原始碼地址。
如果讀完覺得有收穫的話,歡迎點贊、關注、加公眾號【匠心零度】,查閱更多精彩歷史!!!