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

阿里二面:RocketMQ 消息積壓了,增加消費者有用嗎?

開發(fā) 前端
如果這個接口返回結(jié)果必須要處理,并且不能緩存,可以把拉取到的消息存入本地然后給 Broker 直接返回CONSUME_SUCCESS。等外部系統(tǒng)恢復(fù)正常后再從本地取出來進行處理。

大家好,我是君哥。今天分享一道有意思的面試題。

面試官:RocketMQ 消息積壓了,增加消費者有用嗎?

我:這個要看具體的場景,不同的場景下情況是不一樣的。

面試官:可以詳細說一下嗎?

我:如果消費者的數(shù)量小于 MessageQueue 的數(shù)量,增加消費者可以加快消息消費速度,減少消息積壓。比如一個 Topic 有 4 個 MessageQueue,2 個消費者進行消費,如果增加一個消費者,明細可以加快拉取消息的頻率。如下圖:

如果消費者的數(shù)量大于等于 MessageQueue 的數(shù)量,增加消費者是沒有用的。比如一個 Topic 有 4 個 MessageQueue,并且有 4 個消費者進行消費。如下圖:

面試官:你說的第一種情況,增加消費者一定能加快消息消費的速度嗎?

我:這...,一般情況下是可以的。

面試官:有特殊的情況嗎?

我:當然有。消費者消息拉取的速度也取決于本地消息的消費速度,如果本地消息消費的慢,就會延遲一段時間后再去拉取。

面試官:在什么情況下消費者會延遲一段時間后后再去拉取呢?

我:消費者拉取的消息存在 ProcessQueue,消費者是有流量控制的,如果出現(xiàn)下面三種情況,就不會主動去拉?。?/p>

ProcessQueue 保存的消息數(shù)量超過閾值(默認 1000,可以配置);

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

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

這部分源碼請參考類:org.apache.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl。

面試官:還有其他情況嗎?

我:對于順序消費的場景,ProcessQueue 加鎖失敗,也會延遲拉取,這個延遲時間是 3s。

面試官:消費者延遲拉取消息,一般可能是什么原因?qū)е碌哪?

我:其實延遲拉取的本質(zhì)就是消費者消費慢,導(dǎo)致下次去拉取的時候 ProcessQueue 中積壓的消息超過閾值。以下面這張架構(gòu)圖為例:

消費者消費慢,可是能下面的原因:

消費者處理的業(yè)務(wù)邏輯復(fù)雜,耗時很長;

消費者有慢查詢,或者數(shù)據(jù)庫負載高導(dǎo)致響應(yīng)慢

緩存等中間件響應(yīng)慢,比如 Redis 響應(yīng)慢;

調(diào)用外部服務(wù)接口響應(yīng)慢。

面試官:對于外部接口響應(yīng)慢的情況,有什么應(yīng)對措施嗎?

我:這個要分情況討論。

如果調(diào)用外部系統(tǒng)只是一個通知,或者調(diào)用外部接口的結(jié)果并不處理,可以采用異步的方式,異步邏輯里采用重試的方式保證接口調(diào)成功。

如果外部接口返回結(jié)果必須要處理,可以考慮接口返回的結(jié)果是否可以緩存默認值(要考慮業(yè)務(wù)可行),在調(diào)用失敗后采用快速降級的方式,使用默認值替代返回接口返回值。

如果這個接口返回結(jié)果必須要處理,并且不能緩存,可以把拉取到的消息存入本地然后給 Broker 直接返回 CONSUME_SUCCESS。等外部系統(tǒng)恢復(fù)正常后再從本地取出來進行處理。

面試官:如果消費者數(shù)小于 MessageQueue 數(shù)量,并且外部系統(tǒng)響應(yīng)正常,為了快速消費積壓消息而增加消費者,有什么需要考慮的嗎?

我:外部系統(tǒng)雖然響應(yīng)正常,但是增加多個消費者后,外部系統(tǒng)的接口調(diào)用量會突增,如果達到吞吐量上限,外部系統(tǒng)會響應(yīng)變慢,甚至被打掛。

同時也要考慮本地數(shù)據(jù)庫、緩存的壓力,如果數(shù)據(jù)庫響應(yīng)變慢,處理消息的速度就會變慢,起不到緩解消息積壓的作用。

面試官:新增加了消費者后,怎么給它分配 MessageQueue 呢?

我:Consumer 在拉取消息之前,需要對 MessageQueue 進行負載操作。RocketMQ 使用一個定時器來完成負載操作,默認每間隔 20s 重新負載一次。

面試官:能詳細說一下都有哪些負載策略嗎?

我:RocketMQ 提供了 6 種負載策略,依次來看一下。

平均負載策略:

把消費者進行排序

計算每個消費者可以平均分配的 MessageQueue 數(shù)量;

如果消費者數(shù)量大于 MessageQueue 數(shù)量,多出的消費者就分不到;

如果不可以平分,就使用 MessageQueue 總數(shù)量對消費者數(shù)量求余數(shù) mod;

對前 mod 數(shù)量消費者,每個消費者加一個,這樣就獲取到了每個消費者分配的 MessageQueue 數(shù)量。

比如 4 個 MessageQueue 和 3 個消費者的情況:

源代碼的邏輯非常簡單,如下:

// AllocateMessageQueueAveragely 這個類
// 4 個 MessageQueue 和 3 個消費者的情況,假如第一個,index = 0
int index = cidAll.indexOf(currentCID);
// mod = 1
int mod = mqAll.size() % cidAll.size();
// averageSize = 2
int averageSize =
mqAll.size() <= cidAll.size() ? 1 : (mod > 0 && index < mod ? mqAll.size() / cidAll.size()
+ 1 : mqAll.size() / cidAll.size());
// startIndex = 0
int startIndex = (mod > 0 && index < mod) ? index * averageSize : index * averageSize + mod;
// range = 2,所以第一個消費者分配到了2個
int range = Math.min(averageSize, mqAll.size() - startIndex);
for (int i = 0; i < range; i++) {
result.add(mqAll.get((startIndex + i) % mqAll.size()));
}

循環(huán)分配策略:

這個很容易理解,遍歷消費者,把 MessageQueue 分一個給遍歷到的消費者,如果 MessageQueue 數(shù)量比消費者多,需要進行多次遍歷,遍歷次數(shù)等于 (MessageQueue 數(shù)量/消費者數(shù)量),還是以 4 個 MessageQueue 和 3 個消費者的情況,如下圖:

源代碼如下:

//AllocateMessageQueueAveragelyByCircle 這個類
//4 個 MessageQueue 和 3 個消費者的情況,假如第一個,index = 0
int index = cidAll.indexOf(currentCID);
for (int i = index; i < mqAll.size(); i++) {
if (i % cidAll.size() == index) {
//i == 0 或者 i == 3 都會走到這里
result.add(mqAll.get(i));
}
}

自定義分配策略:

這種策略在消費者啟動的時候可以指定消費哪些 MessageQueue。可以參考下面代碼:

AllocateMessageQueueByConfig allocateMessageQueueByConfig = new AllocateMessageQueueByConfig();
//綁定消費 messageQueue1
allocateMessageQueueByConfig.setMessageQueueList(Arrays.asList(new MessageQueue("messageQueue1","broker1",0)));
consumer.setAllocateMessageQueueStrategy(allocateMessageQueueByConfig);
consumer.start();

按照機房分配策略:

這種方式 Consumer 只消費指定機房的 MessageQueue,如下圖:Consumer0、Consumer1、Consumer2 綁定 room1 和 room2 這兩個機房,而 room3 這個機房沒有消費者。

Consumer 啟動的時候需要綁定機房名稱??梢詤⒖枷旅娲a:

AllocateMessageQueueByMachineRoom allocateMessageQueueByMachineRoom = new AllocateMessageQueueByMachineRoom();
//綁定消費 room1 和 room2 這兩個機房
allocateMessageQueueByMachineRoom.setConsumeridcs(new HashSet<>(Arrays.asList("room1","room2")));
consumer.setAllocateMessageQueueStrategy(allocateMessageQueueByMachineRoom);
consumer.start();

這種策略 broker 的命名必須按照格式:機房名@brokerName,因為消費者分配隊列的時候,首先按照機房名稱過濾出所有的 MessageQueue,然后再按照平均分配策略進行分配。

//AllocateMessageQueueByMachineRoom 這個類
List<MessageQueue> premqAll = new ArrayList<MessageQueue>();
for (MessageQueue mq : mqAll) {
String[] temp = mq.getBrokerName().split("@");
if (temp.length == 2 && consumeridcs.contains(temp[0])) {
premqAll.add(mq);
}
}
//上面按照機房名稱過濾出所有的 MessageQueue 放入premqAll,后面就是平均分配策略

按照機房就近分配:

跟按照機房分配原則相比,就近分配的好處是可以對沒有消費者的機房進行分配。如下圖,機房 3 的 MessageQueue 也分配到了消費者:

如果一個機房沒有消費者,則會把這個機房的 MessageQueue 分配給集群中所有的消費者。

源碼所在類:AllocateMachineRoomNearby。

一致性 Hash 算法策略:

把所有的消費者經(jīng)過 Hash 計算分布到 Hash 環(huán)上,對所有的 MessageQueue 進行 Hash 計算,找到順時針方向最近的消費者節(jié)點進行綁定。如下圖:

源代碼如下:

//所在類 AllocateMessageQueueConsistentHash
Collection<ClientNode> cidNodes = new ArrayList<ClientNode>();
for (String cid : cidAll) {
cidNodes.add(new ClientNode(cid));
}
//使用消費者構(gòu)建 Hash 環(huán),把消費者分布在 Hash 環(huán)節(jié)點上
final ConsistentHashRouter<ClientNode> router; //for building hash ring
if (customHashFunction != null) {
router = new ConsistentHashRouter<ClientNode>(cidNodes, virtualNodeCnt, customHashFunction);
} else {
router = new ConsistentHashRouter<ClientNode>(cidNodes, virtualNodeCnt);
}
//對 MessageQueue 做 Hash 運算,找到環(huán)上距離最近的消費者
List<MessageQueue> results = new ArrayList<MessageQueue>();
for (MessageQueue mq : mqAll) {
ClientNode clientNode = router.routeNode(mq.toString());
if (clientNode != null && currentCID.equals(clientNode.getKey())) {
results.add(mq);
}
}

面試官:恭喜你,通過了。

責任編輯:武曉燕 來源: 君哥聊技術(shù)
相關(guān)推薦

2022-06-02 10:54:16

BrokerRocketMQ

2023-01-29 08:46:08

2024-01-24 09:00:31

SSD訂閱關(guān)系內(nèi)存

2024-04-22 00:00:00

RocketMQ優(yōu)化位點

2021-12-17 08:17:00

RocketMQ數(shù)據(jù)結(jié)構(gòu)消息中間件

2022-11-08 07:36:17

RocketMQ消費者消息堆積

2022-07-07 09:00:49

RocketMQ消費者消息消費

2025-05-12 02:00:00

2021-07-12 10:25:03

RocketMQ數(shù)據(jù)結(jié)構(gòu)kafka

2024-03-14 11:58:43

2025-02-26 07:53:21

2022-05-09 11:15:05

RocketMQPULL 模式PUSH 模式

2023-10-24 08:25:20

TCC模式事務(wù)

2013-09-03 15:16:05

軟件專利軟件

2023-03-28 07:08:09

RocketMQ消費者堆棧

2023-06-01 08:08:38

kafka消費者分區(qū)策略

2015-06-24 13:52:52

2021-04-20 08:32:51

消息MQ隊列

2015-08-26 09:39:30

java消費者

2022-09-05 16:55:23

RocketMQBroker
點贊
收藏

51CTO技術(shù)棧公眾號

久久精品亚洲人成影院| 电影一区电影二区| 91麻豆成人久久精品二区三区| 91av在线视频观看| 亚洲欧美卡通动漫| 好吊妞视频这里有精品| 色久优优欧美色久优优| 国产免费一区二区三区四在线播放| 亚洲AV无码精品国产| 国产美女精品| 久久在线免费观看视频| theav精尽人亡av| av在线成人| 一本大道av一区二区在线播放| 久久免费视频2| 欧美日韩激情视频一区二区三区| 久久99国产精品免费网站| 91国产美女视频| 99久久婷婷国产综合| 免费视频国产一区| 精品剧情v国产在线观看在线| 国产男女激情视频| 91美女主播在线视频| 中文字幕中文字幕一区| 精品无码久久久久国产| 精品人妻少妇嫩草av无码专区| 久热re这里精品视频在线6| 久久久久久亚洲精品中文字幕| 在线免费看视频| 欧美热在线视频精品999| 精品国产自在久精品国产| 亚洲欧美自偷自拍另类| 女生影院久久| 欧美日韩亚洲视频| 成人午夜免费在线| 伊人电影在线观看| 亚洲欧美激情小说另类| 亚洲欧美久久234| 免费黄网站在线观看| av高清不卡在线| av资源站久久亚洲| av一区二区三| 国产精品自拍网站| 亚洲qvod图片区电影| 欧美诱惑福利视频| 日韩av在线第一页| av福利导福航大全在线| 亚洲综合免费观看高清完整版在线 | 在线观看污视频| 在线看av的网址| 国产日韩欧美综合一区| 开心色怡人综合网站| 天天爽夜夜爽夜夜爽| 99久久精品国产一区| 国产嫩草一区二区三区在线观看| 亚洲国产剧情在线观看| 国产成人在线免费| 风间由美一区二区三区| 囯产精品久久久久久| 成人小视频免费观看| yellow视频在线观看一区二区| 国产三级漂亮女教师| 国产精品中文字幕一区二区三区| 91久久精品在线| 国产黄色av片| 成人精品视频一区二区三区尤物| 国产伦精品一区二区三| 日漫免费在线观看网站| 国产人久久人人人人爽| youjizz.com亚洲| 性欧美ⅴideo另类hd| 一级精品视频在线观看宜春院 | 日韩久久久精品| 性高潮久久久久久| 久久国产精品色av免费看| 亚洲精品综合久久中文字幕| 国产手机在线观看| 97色伦图片97综合影院| 99久久久久久| 亚洲成av人乱码色午夜| aaa黄色大片| 欧美色资源站| 原创国产精品91| 免费在线黄色网| 亚洲区一区二| 国产精品狼人色视频一区| 91福利在线观看视频| 国产成人av在线影院| 久久国产精品久久精品国产| 精品三级久久久久久久电影聊斋| 国产精品色在线| 国产欧美久久久久| 成人短视频app| 欧美精品乱码久久久久久| 巨乳女教师的诱惑| 国产一卡不卡| 九九热精品视频| 国产一级片免费在线观看| 国产在线视频不卡二| 精品网站在线看| 欧美三级理伦电影| 欧美视频在线免费| 国产又粗又猛大又黄又爽| 偷拍自拍一区| 久久99亚洲精品| 波多野结衣绝顶大高潮| 懂色一区二区三区免费观看| 日本免费一区二区三区| 高潮在线视频| 日韩一区二区三区视频在线| 国产精品密蕾丝袜| 亚洲精品资源| 5g国产欧美日韩视频| 国产免费永久在线观看| 亚洲成人免费视| 久久婷婷中文字幕| 欧美日韩精品一区二区视频| 韩国日本不卡在线| 国产黄色高清视频| 日韩理论片一区二区| 精品久久久久久久免费人妻| 高清精品视频| 久国内精品在线| 国产美女主播在线观看| 欧美极品xxx| 国产免费人做人爱午夜视频| 国产96在线亚洲| 在线一区欧美| 久久精品国产亚洲精品| 精品无码一区二区三区的天堂| 福利视频网站一区二区三区| 中文字幕在线中文字幕日亚韩一区 | 国产视频一区二区在线| 亚洲中文字幕无码专区| 波多野结衣在线一区二区| 久久综合电影一区| 一区二区www| 欧美经典三级视频一区二区三区| 欧美成人精品欧美一级乱| 欧美理伦片在线播放| 97久久精品在线| 色综合免费视频| 午夜视频在线观看一区二区| 精品国产一二区| 国产在线欧美| 国产精品露出视频| 俺来俺也去www色在线观看| 日韩精品一区在线| 国产午夜精品无码| av一区二区三区在线| 日韩中文字幕在线视频观看| 欧美电影免费网站| 91精品国产高清| 欧美男男同志| 欧美体内she精视频| 1024手机在线观看你懂的| 六月丁香综合在线视频| 一区二区精品视频| 国产在线视频欧美一区| 九九视频这里只有精品| 亚洲高清视频在线播放| 无吗不卡中文字幕| 亚洲av无码一区二区三区网址| 亚洲精品视频啊美女在线直播| 国产一区二区三区无遮挡| 欧美调教sm| 国产一区二区精品丝袜| 亚洲无码精品在线观看| 亚洲精品va在线观看| 一级黄色免费视频| 久久一区激情| 中日韩在线视频| 91在线一区| 欧美在线激情网| 日韩av中文| 精品国产伦一区二区三区观看体验 | 黄色工厂这里只有精品| 精品久久久久久中文字幕动漫| 樱花草涩涩www在线播放| 中文字幕精品久久| 国产成人精品一区二三区四区五区| 亚洲成在线观看| 亚洲一区视频在线播放| 国产剧情一区在线| 国产精品免费观看久久| 我不卡神马影院| 好吊色欧美一区二区三区四区| 欧美福利在线播放| 欧美剧在线观看| 韩国免费在线视频| 欧美一区二区三区成人| 青草视频在线观看免费| 椎名由奈av一区二区三区| 少妇被狂c下部羞羞漫画| 日本欧美一区二区| 国产九九九九九| 色天天久久综合婷婷女18| 产国精品偷在线| 国产69精品久久久久9999人| 久久久免费电影| 欧美成人hd| 亚洲另类激情图| 黄色av中文字幕| 欧美日韩高清一区| 天天干天天干天天| 一区二区日韩av| 成年人看的免费视频| 97久久精品人人做人人爽| 在线观看免费av网址| 老司机一区二区三区| 在线观看17c| 99久久激情| 鲁鲁视频www一区二区| 亚洲啊v在线免费视频| 国产精品视频久久久久| av综合电影网站| 久久久久久国产免费| 免费网站成人| 亚洲韩国日本中文字幕| wwwxxxx国产| 欧美挠脚心视频网站| 无码人妻丰满熟妇区bbbbxxxx| 亚洲国产精品久久久久秋霞影院 | 97精品在线| 日本免费高清不卡| 西瓜成人精品人成网站| 国产精品视频一区二区三区经| 在线免费成人| 国产精品十八以下禁看| 伊人久久高清| 国产成人av在线播放| 亚洲淫成人影院| 97精品国产97久久久久久春色| 宅男在线观看免费高清网站| 久久香蕉频线观| 国产原厂视频在线观看| www日韩中文字幕在线看| 在线免费观看黄色av| 一区二区三区www| 浮生影视网在线观看免费| 亚洲欧美日本另类| 日色在线视频| 亚洲网址你懂得| 国产资源在线观看| 中日韩美女免费视频网址在线观看| 三级黄视频在线观看| 日韩激情片免费| 欧美视频免费一区二区三区| 日韩精品免费看| 精品视频二区| 中文字幕亚洲无线码a| av二区在线| 久久久久999| 在线三级中文| 国产做受高潮69| 在线手机中文字幕| 日本一区二区三区四区视频| 欧美日韩精品免费观看视欧美高清免费大片 | 午夜影院一区| 国产成人一区二区三区电影| 亚洲电影有码| 成人在线一区二区| 99a精品视频在线观看| 国产伦精品一区二区三区照片91| 大陆精大陆国产国语精品| 精品国产一区二区三区日日嗨| 亚洲aaa级| 亚洲欧美影院| 欧美不卡在线| 青青草原av在线播放| 免费高清在线一区| 麻豆精品国产传媒| 99久久精品免费精品国产| 亚洲黄色免费视频| 亚洲欧美一区二区三区国产精品 | 色狠狠久久av五月综合|| 四季av在线一区二区三区 | 小泽玛利亚一区二区免费| 一区二区三区在线免费观看| 国产精品2020| 欧美曰成人黄网| 午夜老司机福利| 精品中文字幕久久久久久| 日本www在线| 午夜精品久久久久久99热软件| 原纱央莉成人av片| 91精品国产综合久久香蕉的用户体验| 日本亚洲视频| 日本高清久久一区二区三区| 午夜精品毛片| 日本一本二本在线观看| 极品销魂美女一区二区三区| 久久久午夜精品福利内容| 中文字幕成人av| 亚洲一区 视频| 欧美日韩国产综合视频在线观看 | 久久久久久不卡| 欧美一级理论性理论a| 欧美日韩国产中文字幕在线| 美日韩精品视频免费看| 亚洲www.| 国产传媒欧美日韩| 国产精品99一区二区三| 国产91在线视频观看| 国产伦精品一区二区三区免费迷| 色呦呦一区二区| 亚洲精品乱码久久久久久 | 精品少妇一区二区三区日产乱码 | 国产精品自产拍在线观| 啪啪国产精品| 国产一级不卡视频| 美女脱光内衣内裤视频久久影院| 自拍视频一区二区| 亚洲免费av网站| 夜夜躁狠狠躁日日躁av| 日韩电影免费在线观看中文字幕| 午夜在线激情影院| 成人精品在线观看| 欧美精品久久久久久| 大陆极品少妇内射aaaaa| 成人午夜短视频| 日本高清一二三区| 欧美男男青年gay1069videost| 黄色av网站在线免费观看| 亚洲97在线观看| www.亚洲一二| 日本wwwcom| 国产精品99久久久| 国产ts一区二区| 自拍视频在线免费观看| 日本免费在线精品| 开心激情综合| 国产精品专区在线| 不卡电影一区二区三区| 亚洲国产成人精品综合99| 3751色影院一区二区三区| 午夜精品一区| 国产裸体写真av一区二区| 日韩av专区| 久久国产这里只有精品| 国产精品久久久久久久久晋中 | 欧美一区免费视频| 久久资源在线| 岛国片在线免费观看| 欧美性高清videossexo| eeuss影院在线观看| 国产精品99久久99久久久二8| 国产一区二区三区四区五区传媒| 欧美韩国日本在线| 国产亚洲va综合人人澡精品| 免费观看日批视频| 在线观看欧美日韩国产| 国产精品原创视频| 青青草影院在线观看| 国产成人综合在线播放| 久久久精品国产sm调教| 亚洲国产成人久久综合| 中文不卡1区2区3区| 日本最新一区二区三区视频观看| 日韩av一区二| 免费91在线观看| 日韩欧美综合在线| 爱搞国产精品| 日本不卡一区二区三区视频| 日韩电影在线一区二区三区| 日韩欧美在线视频播放| 日韩小视频在线观看专区| 黄视频免费在线看| 五月天丁香综合久久国产| 国产一区视频导航| 日本熟妇毛茸茸丰满| 亚洲区中文字幕| 999久久久国产999久久久| 日本福利视频一区| 国产偷国产偷精品高清尤物 | 三级成人黄色影院| 亚洲自拍三区| 成人午夜短视频| 日韩一级片中文字幕| 久久影院模特热| 亚洲精品小区久久久久久| 久久99爱视频| 亚洲午夜激情网站| 91福利在线视频| 成人区精品一区二区| 久久蜜桃资源一区二区老牛| 一本一本久久a久久| 亚洲激情电影中文字幕| 久久久久伊人| 日韩小视频在线播放| 国产精品久久久一区麻豆最新章节| 精品人妻无码一区二区三区蜜桃一| 欧美在线精品免播放器视频| 91精品综合| 亚洲区免费视频| 精品久久国产97色综合| abab456成人免费网址| 国产真人做爰毛片视频直播| 欧美激情综合在线| 午夜视频1000|