精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

精品日韩视频在线观看| 成人动漫一区二区在线| 中文字幕一精品亚洲无线一区 | 国产免费一区二区三区网站免费| 欧美人与性动交xxⅹxx| 综合精品久久久| 久久精品一二三区| 国产精品国产一区二区三区四区 | 亚洲高清视频网站| 丝袜诱惑亚洲看片| 欧美高清视频在线播放| 波多野在线播放| 2023国产精华国产精品| 欧美性受xxxx黑人xyx| 人妻无码一区二区三区四区| 亚洲欧美综合在线观看| 国产一区二区三区不卡在线观看| 97免费视频在线| 欧美手机在线观看| 伊人久久大香线蕉无限次| 日韩天堂在线观看| 天天干天天玩天天操| 波多野结衣在线观看| 国产日韩欧美制服另类| 国产亚洲精品自在久久| 91精品中文字幕| 久久精品官网| 国模极品一区二区三区| 午夜爱爱毛片xxxx视频免费看| 国产一区调教| 日韩你懂的在线观看| 日本美女高潮视频| 国产精品高颜值在线观看| 亚洲精品国久久99热| 亚洲图片欧洲图片日韩av| 欧美一区二区三区少妇| 成人的网站免费观看| 亚洲综合在线做性| 97人妻精品一区二区三区视频| 日韩中文欧美在线| 欧美大片免费观看| 久久高清内射无套| 国产精品探花视频| 亚洲三区四区| 中文字幕资源站| 欧美猛男做受videos| 精品成a人在线观看| 中文字幕视频三区| 成人国产激情在线| 91成人国产精品| aaaaaa亚洲| 日韩av影片| 天天色 色综合| 给我免费播放片在线观看| 麻豆av在线免费观看| 亚洲中国最大av网站| 国产高清不卡无码视频| 日韩在线资源| 中文字幕一区二| 国产91av视频在线观看| 欧美精品日韩少妇| 亚洲欧洲综合另类| 四虎免费在线观看视频| а√天堂资源地址在线下载| 亚洲欧美日韩小说| 潘金莲一级淫片aaaaaa播放1| 大地资源网3页在线观看| 亚洲男人的天堂一区二区| 中文字幕在线乱| 日韩免费影院| 欧美日韩黄色大片| 可以免费在线看黄的网站| 国产精品无码久久久久| 欧美一区二区三区视频在线| 丰满饥渴老女人hd| 国产欧美啪啪| 亚洲天堂2020| 乱h高h女3p含苞待放| 黄色另类av| 青青青国产精品一区二区| 国产精品免费无遮挡无码永久视频| 日本视频一区二区| 91九色国产视频| 欧美熟妇交换久久久久久分类| 99精品视频一区二区三区| 日本一区二区三区四区在线观看| 天堂а√在线官网| 亚洲一区成人在线| 性欧美极品xxxx欧美一区二区| 亚洲精品成人一区| 精品国产乱码久久久久久浪潮| 亚洲永久无码7777kkk| 俺要去色综合狠狠| 欧美剧在线观看| 亚洲熟妇无码乱子av电影| 久久国产精品色婷婷| 国产三区二区一区久久| 成人精品福利| 亚洲无线码一区二区三区| 国产一级片黄色| 亚洲精品无播放器在线播放| 日韩av在线高清| 波多野结衣亚洲一区二区| 国产精品一二| 91久久大香伊蕉在人线| 蝌蚪视频在线播放| 夜夜揉揉日日人人青青一国产精品| 免费黄色福利视频| 日韩欧美高清一区二区三区| 亚洲人成在线观| 精品一级少妇久久久久久久| 另类综合日韩欧美亚洲| 久久99精品久久久久久久久久| 国产盗摄在线观看| 色婷婷久久久综合中文字幕| 亚洲区 欧美区| 久久理论电影| 国产ts人妖一区二区三区| 国产日韩免费视频| 国产精品午夜在线观看| 黄色国产一级视频| 欧美另类中文字幕| 色999日韩欧美国产| 韩国av中文字幕| 处破女av一区二区| 国产树林野战在线播放| 成人四虎影院| 亚洲人成绝费网站色www| 日本一区二区三区免费视频| 国产一区二区三区四| 亚洲一区免费看| 欧美在线va视频| 国产午夜精品麻豆| 日韩成人免费观看| 成人免费高清视频| wwwwww欧美| 日韩视频1区| 久久精品成人动漫| 一级黄色片在线| 欧美极品美女视频| 色综合色综合色综合色综合| 欧美人与牛zoz0性行为| 国产成人jvid在线播放| 日本天堂影院在线视频| 欧美日韩在线看| 800av在线播放| 国产日韩1区| 精品国产乱码久久久久久88av| free性欧美| 亚洲成年人在线播放| 国产一级一级片| 成人av免费观看| 久久综合久久网| 欧美在线导航| 日本电影亚洲天堂| 国产毛片av在线| 欧美日本精品一区二区三区| 国产一级淫片久久久片a级| 麻豆成人91精品二区三区| 亚洲精品影院| 成人av在线播放| 欧美人交a欧美精品| 亚洲精品免费在线观看视频| 亚洲国产美国国产综合一区二区| 三级男人添奶爽爽爽视频| 亚洲在线一区| 日产国产精品精品a∨| a屁视频一区二区三区四区| 精品国产美女在线| 国产黄色一区二区| 精品久久中文字幕| 极品人妻videosss人妻| 狠狠色综合色综合网络| 久久久国内精品| 五月综合久久| 成人黄色在线观看| 久久一卡二卡| 亚洲人成绝费网站色www| 国产精品久久久久久久久毛片| 亚洲精品国久久99热| 无码人妻精品一区二区三应用大全| 久久精品首页| 99久re热视频精品98| 精品三级在线观看视频| 国产精品黄色av| 宅男网站在线免费观看| 日韩国产欧美精品一区二区三区| 中文字幕你懂的| 一区二区欧美在线观看| 亚洲精品视频久久久| 久久机这里只有精品| 国产高清www| 成人在线免费小视频| 成人黄色片视频网站| 国产精品一区二区av影院萌芽| 精品国偷自产在线视频99| 黄色www视频| 欧美系列亚洲系列| 久久久久99精品| 国产精品三级电影| 麻豆精品国产传媒av| 男人的j进女人的j一区| 免费看黄在线看| 亚洲91中文字幕无线码三区| 欧美xxxx黑人又粗又长密月| 精品一区91| 国产成人中文字幕| 超级碰碰不卡在线视频| 色婷婷综合久久久久| 欧美日韩在线中文字幕| 日韩欧美中文字幕一区| 亚洲一区二区三区高清视频| 欧美日韩在线另类| 国产亚洲色婷婷久久99精品| **网站欧美大片在线观看| 免费看污黄网站在线观看| 国产91在线观看| 久久久久xxxx| 日日夜夜免费精品| 欧美在线观看成人| 国产精品多人| 91免费视频黄| 日韩欧美一区二区三区在线视频 | 中文字幕22页| 玖玖精品视频| 男人用嘴添女人下身免费视频| 欧美在线播放| 亚洲精品在线免费| 国产免费久久| 欧美 日韩 国产在线| 日韩最新在线| 狠狠色噜噜狠狠狠狠色吗综合| 久久免费精品| 亚洲精品日韩av| 亚洲人体在线| 成人一区二区电影| 亚洲福利影视| 91久久久久久久久久久久久| 国产综合色在线观看| 国产成人综合精品| 欧美人体一区二区三区| 国产成+人+综合+亚洲欧洲 | 亚洲视频免费| 久久最新免费视频| 亚洲欧洲中文字幕| 亚洲av综合色区| 7777久久香蕉成人影院| 天天爱天天做天天操| 欧美激情1区| a天堂资源在线观看| 亚洲国产高清一区| 久激情内射婷内射蜜桃| 国产精品日本| 国产淫片av片久久久久久| 久久久久99| 男操女免费网站| 精一区二区三区| 精品国产乱码久久久久久1区二区 91网址在线观看精品 | 成人看片黄a免费看在线| 色哟哟视频在线| 99re亚洲国产精品| av女人的天堂| 国产精品夫妻自拍| 一区二区视频免费看| 亚洲国产欧美日韩另类综合 | 国产视频一区二区| 色综合久久中文字幕综合网小说| 欧美高清另类hdvideosexjaⅴ| 97国产精品久久| japanese23hdxxxx日韩| 国产自产女人91一区在线观看| 精品午夜av| 久久久久久a亚洲欧洲aⅴ| 第一会所亚洲原创| 日韩中文字幕亚洲精品欧美| 亚洲青色在线| 久草在在线视频| 国产呦萝稀缺另类资源| 911亚洲精选| 久久精品网站免费观看| 好吊日在线视频| 激情成人在线视频| 自拍偷拍福利视频| 欧美v日韩v国产v| 黄色av网址在线免费观看| 久久久精品亚洲| 亚洲欧美一区二区三区| 国产精品日韩在线一区| 不卡的国产精品| 欧美日韩日本网| 一区二区三区在线| 色欲av无码一区二区人妻| 国产伦理精品不卡| 国产成人精品无码免费看夜聊软件| 亚洲天堂免费在线观看视频| 中日韩黄色大片| 91麻豆精品国产91久久久久久久久| 欧洲成人一区二区三区| 深夜精品寂寞黄网站在线观看| 国产嫩草在线视频| 成人xvideos免费视频| 天堂一区二区三区四区| www.国产亚洲| 免费成人在线网站| 国产国语性生话播放| 亚洲另类在线制服丝袜| 久久久久久无码精品大片| 欧美v亚洲v综合ⅴ国产v| 老司机午夜在线| 国产精品第三页| 久久久久97| 日本免费成人网| 久久99九九99精品| 一级黄色性视频| 高跟丝袜一区二区三区| 亚洲国产成人精品一区二区三区| 日韩在线视频国产| 日日夜夜天天综合| 精品免费日产一区一区三区免费| 欧美精品国产一区| caoporm在线视频| 国产欧美日本一区视频| 国产精品视频免费播放| 亚洲国产美女精品久久久久∴| jizz性欧美| 成人性教育视频在线观看| 青青草成人影院| 超碰在线97免费| 久久九九久久九九| 中文字幕精品视频在线观看| 日韩av在线最新| 日韩激情电影免费看| 精品国产乱码久久久久久88av| 亚洲国产精品第一区二区三区| 青娱乐精品在线| 亚洲欧美视频在线观看视频| 这里只有精品9| 中文字幕在线看视频国产欧美| 欧美精品高清| 色综合电影网| 日本大胆欧美人术艺术动态 | 一区二区三区精品| 国内精品偷拍视频| 欧美精品午夜视频| 日本成人手机在线| 国产一区二区三区播放| 国产成人av一区二区三区在线观看| 东方av正在进入| 日韩欧美成人一区| 丁香花在线观看完整版电影| 国产精品v欧美精品v日韩精品| 欧美午夜精品| 老熟妇精品一区二区三区| 岛国av午夜精品| 久草在线免费福利资源| 国产精品久久久久久久久久免费| 成人中文视频| 永久免费黄色片| 亚洲成人免费观看| 日本亚洲欧美| 国产中文日韩欧美| 国产综合自拍| 黄色工厂在线观看| 在线日韩国产精品| 一级毛片视频在线观看| 97在线中文字幕| 99伊人成综合| 日韩精品电影一区二区三区| 91精品国产综合久久香蕉的特点| 美女91在线| 日本在线观看不卡| 激情欧美日韩一区二区| 精品无码m3u8在线观看| 亚洲欧美999| 四虎视频在线精品免费网址| 日本a在线天堂| 久久久久久麻豆| 国产精品热久久| 97人人爽人人喊人人模波多| 欧美久久精品一级c片| 亚洲欧美天堂在线| 精品久久久久久久久久| 在线观看国产原创自拍视频| 都市激情久久久久久久久久久| 久久激情综合| www.xxxx日本| 亚洲欧美日韩成人| 久久精品一级| 99re在线视频免费观看| 亚洲男人的天堂av| 国产视频精品久久| 99久久久精品免费观看国产| 老牛嫩草一区二区三区日本 | 国产精品二区三区| 丝袜亚洲精品中文字幕一区| 青青草原在线免费观看视频| 亚洲人成网在线播放| 7777精品| 自拍偷拍一区二区三区四区| 午夜久久久影院|