精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

警惕!這八個場景下 RocketMQ 會發生流量控制

開發 前端
本文介紹了 RocketMQ 發生流量控制的 8 個場景,其中 Broker 4 個場景,Consumer 4 個場景。Broker 的流量控制,本質是對 Producer 的流量控制,最好的解決方法就是給 Broker 擴容,增加 Broker 寫入能力。

大家好,我是君哥。

在使用 RocketMQ 的過程中,有時候我們會看到下面的日志:

[TIMEOUT_CLEAN_QUEUE]broker busy, start flow control for a while, period in queue: 206ms, size of queue: 5

這是因為 RocketMQ 觸發了流量控制。今天我們來聊一聊哪些場景下 RocketMQ 會觸發流量控制。

如上圖,生產者把消息寫入 Broker,Consumer 從 Broker 拉取消息。Broker 是 RocketMQ 的核心 ,觸發流量控制主要就是為了防止 Broker 壓力過大而宕機。

一、 Broker 流控

1、 broker busy

RockerMQ 默認采用異步刷盤策略,Producer 把消息發送到 Broker 后,Broker 會先把消息寫入 Page Cache,刷盤線程定時地把數據從 Page Cache 刷到磁盤上,如下圖:

那 broker busy 是怎么導致的呢?

Broker 默認是開啟快速失敗的,處理邏輯類是 BrokerFastFailure,這個類中有一個定時任務用來清理過期的請求,每 10 ms 執行一次,代碼如下:

public void start() {
this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
if (brokerController.getBrokerConfig().isBrokerFastFailureEnable()) {
cleanExpiredRequest();
}
}
}, 1000, 10, TimeUnit.MILLISECONDS);
}

(1)Page Cache 繁忙

清理過期請求之前首先會判斷 Page Cache 是否繁忙,如果繁忙,就會給 Producer 返回一個系統繁忙的狀態碼(code=2,remark="[PCBUSY_CLEAN_QUEUE]broker busy, start flow control for a while, period in queue: %sms, size of queue: %d"),也就是本文開頭的異常日志。那怎么判斷 Page Cache 繁忙呢?Broker 收到一條消息后會追加到 Page Cache 或者內存映射文件,這個過程首先獲取一個 CommitLog 寫入鎖,如果持有鎖的時間大于 osPageCacheBusyTimeOutMills(默認 1s,可以配置),就認為 Page Cache 繁忙。具體代碼見 DefaultMessageStore 類 isOSPageCacheBusy 方法。

(2)清理過期請求

清理過期請求時,如果請求線程的創建時間到當前系統時間間隔大于 waitTimeMillsInSendQueue(默認 200ms,可以配置)就會清理這個請求,然后給 Producer 返回一個系統繁忙的狀態碼(code=2,remark="[TIMEOUT_CLEAN_QUEUE]broker busy, start flow control for a while, period in queue: %sms, size of queue: %d")。

system busy

這個異常在 NettyRemotingAbstract#processRequestCommand 方法。

拒絕請求

如果 NettyRequestProcessor 拒絕了請求,就會給 Producer 返回一個系統繁忙的狀態碼(code=2,remark="[REJECTREQUEST]system busy, start flow control for a while")。那什么情況下請求會被拒絕呢?看下面這段代碼:

//SendMessageProcessor類
public boolean rejectRequest() {
return this.brokerController.getMessageStore().isOSPageCacheBusy() ||
this.brokerController.getMessageStore().isTransientStorePoolDeficient();
}

從代碼中可以看到,請求被拒絕的情況有兩種可能,一個是 Page Cache 繁忙,另一個是 TransientStorePoolDeficient。

跟蹤 isTransientStorePoolDeficient 方法,發現判斷依據是在開啟 transientStorePoolEnable 配置的情況下,是否還有可用的 ByteBuffer。

注意:在開啟 transientStorePoolEnable 的情況下,寫入消息時會先寫入堆外內存(DirectByteBuffer),然后刷入 Page Cache,最后刷入磁盤。而讀取消息是從 Page Cache,這樣可以實現讀寫分離,避免讀寫都在 Page Cache 帶來的問題。如下圖:

線程池拒絕

Broker 收到請求后,會把處理邏輯封裝成到 Runnable 中,由線程池來提交執行,如果線程池滿了就會拒絕請求(這里線程池中隊列的大小默認是 10000,可以通過參數 sendThreadPoolQueueCapacity 進行配置),線程池拒絕后會拋出異常 RejectedExecutionException,程序捕獲到異常后,會判斷是不是單向請求(OnewayRPC),如果不是,就會給 Producer 返回一個系統繁忙的狀態碼(code=2,remark="[OVERLOAD]system busy, start flow control for a while")。

判斷 OnewayRPC 的代碼如下,flag = 2 或者 3 時是單向請求:

public boolean isOnewayRPC() {
int bits = 1 << RPC_ONEWAY;
return (this.flag & bits) == bits;
}

(3) 消息重試

Broker 發生流量控制的情況下,返回給 Producer 系統繁忙的狀態碼(code=2),Producer 收到這個狀態碼是不會進行重試的。下面是會進行重試的響應碼:

//DefaultMQProducer類
private final Set<Integer> retryResponseCodes = new CopyOnWriteArraySet<Integer>(Arrays.asList(
ResponseCode.TOPIC_NOT_EXIST,
ResponseCode.SERVICE_NOT_AVAILABLE,
ResponseCode.SYSTEM_ERROR,
ResponseCode.NO_PERMISSION,
ResponseCode.NO_BUYER_ID,
ResponseCode.NOT_IN_CURRENT_UNIT
));

二、 Consumer 流控

DefaultMQPushConsumerImpl 類中有 Consumer 流控的邏輯 。

1、 緩存消息數量超過閾值

ProcessQueue 保存的消息數量超過閾值(默認 1000,可以配置),源碼如下:

if (cachedMessageCount > this.defaultMQPushConsumer.getPullThresholdForQueue()) {
this.executePullRequestLater(pullRequest, PULL_TIME_DELAY_MILLS_WHEN_FLOW_CONTROL);
if ((queueFlowControlTimes++ % 1000) == 0) {
log.warn(
"the cached message count exceeds the threshold {}, so do flow control, minOffset={}, maxOffset={}, count={}, size={} MiB, pullRequest={}, flowControlTimes={}",
this.defaultMQPushConsumer.getPullThresholdForQueue(), processQueue.getMsgTreeMap().firstKey(), processQueue.getMsgTreeMap().lastKey(), cachedMessageCount, cachedMessageSizeInMiB, pullRequest, queueFlowControlTimes);
}
return;
}

2、緩存消息大小超過閾值

ProcessQueue 保存的消息大小超過閾值(默認 100M,可以配置),源碼如下:

if (cachedMessageSizeInMiB > this.defaultMQPushConsumer.getPullThresholdSizeForQueue()) {
this.executePullRequestLater(pullRequest, PULL_TIME_DELAY_MILLS_WHEN_FLOW_CONTROL);
if ((queueFlowControlTimes++ % 1000) == 0) {
log.warn(
"the cached message size exceeds the threshold {} MiB, so do flow control, minOffset={}, maxOffset={}, count={}, size={} MiB, pullRequest={}, flowControlTimes={}",
this.defaultMQPushConsumer.getPullThresholdSizeForQueue(), processQueue.getMsgTreeMap().firstKey(), processQueue.getMsgTreeMap().lastKey(), cachedMessageCount, cachedMessageSizeInMiB, pullRequest, queueFlowControlTimes);
}
return;
}

3、 緩存消息跨度超過閾值

對于非順序消費的場景,ProcessQueue 中保存的最后一條和第一條消息偏移量之差超過閾值(默認 2000,可以配置)。源代碼如下:

if (!this.consumeOrderly) {
if (processQueue.getMaxSpan() > this.defaultMQPushConsumer.getConsumeConcurrentlyMaxSpan()) {
this.executePullRequestLater(pullRequest, PULL_TIME_DELAY_MILLS_WHEN_FLOW_CONTROL);
if ((queueMaxSpanFlowControlTimes++ % 1000) == 0) {
log.warn(
"the queue's messages, span too long, so do flow control, minOffset={}, maxOffset={}, maxSpan={}, pullRequest={}, flowControlTimes={}",
processQueue.getMsgTreeMap().firstKey(), processQueue.getMsgTreeMap().lastKey(), processQueue.getMaxSpan(),
pullRequest, queueMaxSpanFlowControlTimes);
}
return;
}
}

4、獲取鎖失敗

對于順序消費的情況,ProcessQueue 加鎖失敗,也會延遲拉取,這個延遲時間默認是 3s,可以配置。

三、總結

本文介紹了 RocketMQ 發生流量控制的 8 個場景,其中 Broker 4 個場景,Consumer 4 個場景。Broker 的流量控制,本質是對 Producer 的流量控制,最好的解決方法就是給 Broker 擴容,增加 Broker 寫入能力。而對于 Consumer 端的流量控制,需要解決 Consumer 端消費慢的問題,比如有第三方接口響應慢或者有慢 SQL。

在使用的時候,根據打印的日志可以分析具體是哪種情況的流量控制,并采用相應的措施。

責任編輯:姜華 來源: 君哥聊技術
相關推薦

2025-02-10 10:38:24

2022-05-06 17:12:35

區塊鏈元宇宙

2023-08-07 09:12:51

權限SpringSecurity

2010-02-03 23:04:31

流量控制P2P華夏創新

2022-05-26 00:33:29

權限TienChin項目

2022-05-02 16:18:22

RocketMQBrokertopic

2023-10-08 12:14:42

Sentinel流量控制

2018-04-09 12:44:45

Docker使用場景開發

2015-01-06 09:48:34

Docker多租戶docker應用

2013-07-22 14:25:29

iOS開發ASIHTTPRequ

2011-06-23 09:09:37

流量控制

2024-05-13 18:33:08

SQL日期函數

2019-10-18 15:16:10

Redis數據庫并發

2010-06-04 10:49:58

Linux流量控制

2021-03-09 07:38:15

Percona Xtr流量控制運維

2010-06-17 17:00:07

Linux流量控制

2021-11-19 10:25:23

MySQL數據庫架構

2021-08-12 10:05:06

MySQL數據庫MySQL

2017-03-30 11:20:59

云存儲服務供應商

2016-09-09 13:25:01

Linux
點贊
收藏

51CTO技術棧公眾號

日韩一区二区三区久久| 国产精品视频免费观看| 91n在线视频| 成人免费91| 亚洲一区二区视频在线观看| 久久亚洲高清| 91在线精品入口| 亚洲国产日本| 色偷偷av一区二区三区乱| www.四虎精品| 成人国产激情在线| 午夜欧美视频在线观看| 神马影院午夜我不卡| 亚洲美女性生活| 美国三级日本三级久久99| 欧美高清电影在线看| 蜜桃传媒一区二区亚洲| 国产成人夜色高潮福利影视| 欧美日韩免费观看一区三区| 波多野结衣家庭教师在线| 尤物在线视频| 2021国产精品久久精品| 99在线视频首页| 亚洲综合免费视频| 亚洲欧美日韩综合国产aⅴ| 久久精品国产2020观看福利| 成年人网站免费在线观看| 欧美第一在线视频| 欧美日韩国产片| 免费av网址在线| 久草成色在线| 亚洲欧美韩国综合色| 色之综合天天综合色天天棕色| 亚洲免费国产视频| 国产成人精品午夜视频免费| 成人av色在线观看| 日批视频免费观看| 首页亚洲欧美制服丝腿| 久久青草福利网站| 久久久久久久久久久网| 亚洲成人三区| 操91在线视频| 在线观看日本黄色| 欧美日韩中文一区二区| 亚洲欧美制服第一页| 久久中文字幕人妻| 少妇久久久久| 亚洲美女视频网| 五十路六十路七十路熟婆| 国产精品99久久免费观看| 日韩欧美专区在线| 人妻激情偷乱视频一区二区三区| 国产精品日本一区二区不卡视频 | 成人精品视频一区二区三区尤物| 91深夜福利视频| 国产乱码久久久| 韩国av一区二区三区在线观看| 国产精品视频久久| 亚洲专区第一页| 久久66热偷产精品| 亚洲va久久久噜噜噜久久天堂| 91国产免费视频| 国内精品久久久久影院薰衣草| 国产精品爽爽爽爽爽爽在线观看| 中文字幕av免费观看| 久色婷婷小香蕉久久| 国产日产久久高清欧美一区| 国产又粗又猛又爽又黄的| 精彩视频一区二区| 97人摸人人澡人人人超一碰| 欧美一级淫片免费视频魅影视频 | 一区二区三区久久久久| 国内精品久久久久久久久电影网| 在线看国产精品| 免费成人深夜夜行网站| 雨宫琴音一区二区三区| 久久久久久com| 亚洲婷婷综合网| 青青草一区二区三区| 成人女保姆的销魂服务| 亚洲春色一区二区三区| 91蝌蚪国产九色| 亚洲第一导航| 深夜国产在线播放| 欧美性猛交xxxx黑人| 天堂中文视频在线| 久久中文字幕一区二区| 日韩国产欧美区| 亚洲一级黄色录像| 国产精品国码视频| 国产成人一区二区在线| 国产肥老妇视频| 91蜜桃在线观看| 亚洲精品一区二区三区四区五区| 色呦呦网站在线观看| 欧美性猛交xxxx免费看漫画| 中文字幕在线综合| 精品亚洲免a| 中文字幕在线精品| 九九热国产视频| 美女一区二区视频| 国产无套精品一区二区| 在线免费观看的av网站| 精品久久久国产| 亚洲日本黄色片| 亚洲电影男人天堂| 欧美另类99xxxxx| 成人毛片一区二区三区| 丁香啪啪综合成人亚洲小说| 日韩欧美亚洲日产国产| 成人福利影视| 正在播放一区二区| jizz中文字幕| 一区二区毛片| 91精品国产高清久久久久久91裸体 | 日韩精品视频在线免费观看| 日韩在线不卡av| 久久国产精品久久w女人spa| 国产91亚洲精品一区二区三区| jzzjzzjzz亚洲成熟少妇| 精品国产91久久久久久| 无码国产精品久久一区免费| 欧美gay男男猛男无套| 欧美性在线观看| 日本黄视频在线观看| 亚洲人成网站影音先锋播放| 中文字幕一区二区三区四区在线视频| 青青草原在线亚洲| 欧美高清在线观看| 国产精品系列视频| 国产精品网曝门| 玩弄japan白嫩少妇hd| 欧美人妖在线观看| 久久青草福利网站| 亚洲第一页视频| 亚洲天堂2016| 国产传媒免费观看| 91超碰成人| 91九色国产社区在线观看| 尤物视频在线免费观看| 欧美性色黄大片手机版| 亚洲综合欧美综合| 日韩精品成人一区二区三区| 美女被啪啪一区二区| 国产在线精彩视频| 日韩av在线网页| 日韩人妻无码一区二区三区99| 粉嫩久久99精品久久久久久夜| 国产内射老熟女aaaa| 久久国际精品| 欧美激情网站在线观看| 性猛交xxxx乱大交孕妇印度| 一区二区三区在线观看欧美 | 国产一区二区三区免费在线| 久久亚洲国产精品| www.日本在线观看| 亚洲 欧美综合在线网络| 天堂www中文在线资源| 日韩亚洲国产精品| 久久精品五月婷婷| 嫩草伊人久久精品少妇av杨幂| 国产香蕉97碰碰久久人人| 午夜一级黄色片| 一区二区中文视频| 精品无码av一区二区三区不卡| 国内揄拍国内精品久久| 国产在线精品一区二区中文| 一二三四视频在线中文| 亚洲偷熟乱区亚洲香蕉av| 亚洲性猛交富婆| 成人欧美一区二区三区黑人麻豆| 一卡二卡三卡四卡五卡| 国产欧美午夜| 亚洲一区二区四区| 91国内精品| 欧洲成人在线视频| 免费看美女视频在线网站| 日韩视频123| 久久久久99精品成人片我成大片| 中文无字幕一区二区三区| 激情在线观看视频| 亚洲深夜av| 一区二区三区四区五区精品| 99久热这里只有精品视频免费观看| 国内免费精品永久在线视频| 国产九色在线| 日韩一区二区三区高清免费看看| 午夜精品三级久久久有码| 国产欧美日韩一区二区三区在线观看 | 欧美xxxooo| av电影在线观看一区| 久久99爱视频| 99伊人成综合| 中文字幕剧情在线观看一区| 久久免费视频66| 国产精品自拍网| 一区二区乱码| 美女久久久久久久| 国产高清自拍视频在线观看| 欧美大胆一级视频| 日韩国产亚洲欧美| 无吗不卡中文字幕| 性生交大片免费全黄| 91蝌蚪porny| 黑人无套内谢中国美女| 日韩福利视频网| 2018国产在线| 91av精品| 亚洲视频欧美在线| 天天躁日日躁成人字幕aⅴ| 91精品在线影院| 日本一区二区电影| 性欧美长视频免费观看不卡| 国产在线看片| 在线精品国产成人综合| 深夜福利视频在线免费观看| 日韩精品一区二区三区在线观看| 成人免费一级片| 欧美日韩在线视频一区二区| 久久99久久98精品免观看软件| 国产精品久久久一本精品| 人妻精品久久久久中文字幕| www.66久久| 日本wwwwwww| 黑人巨大精品欧美一区| 99视频在线视频| 裸体一区二区| 看av免费毛片手机播放| 亚洲人成久久| 国产成人艳妇aa视频在线| 亚洲色图网站| 中国人体摄影一区二区三区| 日韩国产欧美| 深夜福利成人| 日韩极品一区| 日韩欧美电影一区二区| 国产亚洲欧美日韩在线观看一区二区 | 麻豆传媒在线看| 国产真实乱子伦精品视频| 国产精品区在线| 九九**精品视频免费播放| 色悠悠久久综合网| 免费不卡在线观看| 亚洲国产精品三区| 久久精品国产99国产| 91国内在线播放| 韩国成人精品a∨在线观看| 国产欧美精品一二三| 九色porny丨国产精品| 久久精品久久99| 国产999精品久久久久久绿帽| 99热这里只有精品2| 国产成人av影院| 国产亚洲精品成人a| 成人av综合一区| 青青草视频播放| 久久婷婷成人综合色| 在线观看福利片| 欧美国产欧美综合| 你懂得视频在线观看| 亚洲视频在线一区二区| 亚洲国产成人精品综合99| 亚洲伊人伊色伊影伊综合网| www.youjizz.com亚洲| 欧美色播在线播放| 超碰在线97观看| 538在线一区二区精品国产| www.爱爱.com| 亚洲激情自拍图| 九色在线视频| 日韩中文字幕av| 久久av色综合| 国产成人精品久久二区二区| 图片一区二区| 懂色av一区二区三区在线播放| 美女主播精品视频一二三四| 日韩精品大片| 羞羞色午夜精品一区二区三区| 日韩美女爱爱视频| 蜜乳av另类精品一区二区| 日本中文字幕二区| av电影在线观看一区| 国产又粗又猛又爽又黄的视频四季| 亚洲欧美区自拍先锋| 日韩毛片一区二区三区| 欧美日韩精品欧美日韩精品一| 精品人妻久久久久一区二区三区| 日韩精品视频在线| 欧美成人三区| 91精品国产777在线观看| 久久久久久久性潮| 国产伦精品一区二区三区照片| 成人羞羞网站入口| 水蜜桃色314在线观看| 奇米精品一区二区三区在线观看一 | 亚洲欧美日韩精品久久久 | 亚洲精品日韩综合观看成人91| 日韩成人免费在线视频| 欧美日韩一区二区三区免费看| 懂色av蜜臀av粉嫩av分享吧| 一区二区成人精品| sm在线播放| 91精品视频网站| 免费精品国产| av无码久久久久久不卡网站| 理论片日本一区| 我和岳m愉情xxxⅹ视频| 亚洲美腿欧美偷拍| 久操视频在线免费观看| 精品黑人一区二区三区久久| av在线收看| 51色欧美片视频在线观看| 久久影院一区二区三区| 亚洲人成网站在线播放2019| 免费亚洲网站| 扒开伸进免费视频| 亚洲欧美另类久久久精品2019| 亚洲精品毛片一区二区三区| 日韩av在线直播| 国产三级伦理在线| 亚洲自拍高清视频网站| 日产精品一区二区| 国产视频一区二区三区在线播放| 不卡视频一二三| 免费麻豆国产一区二区三区四区| 欧美日韩久久不卡| 97在线观看免费观看高清| 欧美主播福利视频| 午夜精品影视国产一区在线麻豆| 日本免费a视频| 国产精品88888| 福利所第一导航| 日韩视频免费观看高清完整版| 含羞草www国产在线视频| 国产欧美日韩精品专区| 国产精品一在线观看| 成人免费xxxxx在线视频| 久久久国际精品| 精品免费囯产一区二区三区| 亚洲激情视频网| 午夜欧美激情| 女女同性女同一区二区三区91| 国产欧美一区二区色老头| 国产精品久久久久久亚洲色 | 欧美巨大黑人极品精男| 高清一区二区| 97精品国产97久久久久久粉红| 久久成人免费网| 成人黄色短视频| 在线不卡中文字幕播放| 成人看av片| 99视频在线免费观看| 亚洲一级高清| 国产精品探花一区二区在线观看| 欧美性极品xxxx做受| 国产亚洲依依| 国产色视频一区| 最新精品国产| 91传媒理伦片在线观看| 欧美日韩国产丝袜美女| 玖玖综合伊人| 成人性生交大片免费看小说 | 欧美国产高跟鞋裸体秀xxxhd| 国产精品99久久免费观看| 18禁男女爽爽爽午夜网站免费| 久久久精品tv| 国产免费无遮挡| 久久久久久国产精品久久| 日韩a级大片| 午夜欧美福利视频| 亚洲色图都市小说| 男人天堂手机在线观看| 国产69久久精品成人看| sdde在线播放一区二区| 能看毛片的网站| 欧美小视频在线观看| 淫片在线观看| 狠狠色综合欧美激情| 日韩国产欧美三级| 国内偷拍精品视频| 亚洲精品小视频在线观看| 亚洲伦理一区二区| 成人午夜免费在线| 中文字幕在线不卡一区二区三区| 精品人妻一区二区三区麻豆91| 日韩免费av在线| 亚洲国产日韩欧美在线| 国产不卡一二三| 欧美精品在线一区二区| 久久青草伊人| 在线视频不卡国产| 99久久777色| 国产熟女一区二区三区五月婷| 国产91成人video| 888久久久| 日韩免费成人av| 亚洲高清在线观看| 久久天天久久| 久久婷婷五月综合色国产香蕉| 亚洲同性gay激情无套|