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

阿里二面:RocketMQ 集群 Broker 掛了,會造成什么影響?

開發 架構
今天分享 RocketMQ 的 Broker 掛了,會帶來什么影響。

大家好,我是君哥。今天分享 RocketMQ 的 Broker 掛了,會帶來什么影響。

面試官:你好,如果 RocketMQ 集群中的一個 Broker 掛了,會造成什么影響呢? 

:Broker 掛了,首先會導致 Producer 發送消息失敗。對于普通消息,Producer 同步發送的情況下會有重試機制,重試時把消息發送到其他 Broker。如下圖,Broker1 宕機了,把消息發送到了 Broker2:

圖片

發送消息的邏輯其實是是一個循環,發送失敗后會不斷嘗試重新發送,代碼如下:

int timesTotal = communicationMode == CommunicationMode.SYNC ? 1 + this.defaultMQProducer.getRetryTimesWhenSendFailed() : 1;
for (; times < timesTotal; times++) {
String lastBrokerName = null == mq ? null : mq.getBrokerName();
MessageQueue mqSelected = this.selectOneMessageQueue(topicPublishInfo, lastBrokerName);
if (mqSelected != null) {
mq = mqSelected;
try {
sendResult = this.sendKernelImpl(msg, mq, communicationMode, sendCallback, topicPublishInfo, timeout - costTime);
switch (communicationMode) {
case ASYNC:
return null;
case ONEWAY:
return null;
case SYNC:
if (sendResult.getSendStatus() != SendStatus.SEND_OK) {
//如果發送失敗了,這里會進行重試
if (this.defaultMQProducer.isRetryAnotherBrokerWhenNotStoreOK()) {
continue;
}
}
return sendResult;
default:
break;
}
} catch (RemotingException e) {
}//省略其他 catch
} else {
break;
}
}

對于異步發送和單邊消息是不會重試的,因此對于異步和單邊消息,就只能發送失敗了。而對于同步消息,可以通過重試的方式發送到其他的 Broker 上。

面試官:在同步的情況下,Producer 重試時怎么保證不把消息發送到掛掉的 Broker 上呢? 

:Producer 默認采用 round-robin 的方式,重試前會記錄上一次發送消息的 Broker,然后選擇下一個 Broker。代碼如下:

//lastBrokerName 記錄了上一次發送的 Broker Name
public MessageQueue selectOneMessageQueue(final String lastBrokerName) {
if (lastBrokerName == null) {
return selectOneMessageQueue();
} else {
for (int i = 0; i < this.messageQueueList.size(); i++) {
int index = this.sendWhichQueue.incrementAndGet();
int pos = Math.abs(index) % this.messageQueueList.size();
if (pos < 0)
pos = 0;
MessageQueue mq = this.messageQueueList.get(pos);
//Broker Name 不等于上次的,才會返回
if (!mq.getBrokerName().equals(lastBrokerName)) {
return mq;
}
}
return selectOneMessageQueue();
}
}

面試官:在大流量的場景下,可能會有大量消費發送到失敗的 Broker,這樣導致大量的消息需要重試,對性能影響會很大,有什么解決方法嗎?

:RocketMQ 有延遲隔離策略,如果發送某一個 Broker 失敗了,會將其隔離,優先選擇正常的 Broker 發送消息。需要注意的是,這個策略默認是不開啟的。

面試官:怎么開啟延遲隔離策略呢? 

:需要在初始化 Producer 的時候定義,見下面代碼第二行:

DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
producer.setSendLatencyFaultEnable(true);
producer.start();

開啟之后,發送消息時會記錄發送消息花費的時間下面 latencyMax 變量,超過一定時間,這個 Broker 就會在一段時間內不允許發送(下面 notAvailableDuration 變量)。

private long[] latencyMax = {50L, 100L, 550L, 1000L, 2000L, 3000L, 15000L};
private long[] notAvailableDuration = {0L, 0L, 30000L, 60000L, 120000L, 180000L, 600000L};

具體邏輯可以參考類 MQFaultStrategy。

面試官:剛剛聊的是對普通消息的影響,那對順序消息有什么影響呢?

:對于全局順序消息,如果設置了所有消息要發送到同一個 Broker 的同一個 MessageQueue 中的情況,恰好是這個 Broker 掛了,那就只能等 Broker 重啟后再發送了。而對于局部順序消息,比如同一個訂單相關的消息要發送到同一個 Broker 的同一個 MessageQueue 中的情況,如果這個 Broker 掛了,那 MessageQueueSelector 會選擇其他 Broker 上的 MessageQueue 進行發送,這會影響當前這筆訂單消費的順序性。而其他訂單可以被 Producer 發送到其他的隊列中,不受影響。如下圖:

圖片

Broker1 掛之前,Order1 的消息發送到了 Broker1,Broker1 掛之后,Order1 的消息被發送到了 Broker2。在 Broker1 恢復前,消費者只能消費 Broker2 上拉取 Order1 的消息,Broker1 恢復后消費者線程再從 Broker1 拉取,因此 Order1 的消息產生亂序。這里假設沒有從節點。

面試官:Broker 掛了,對 消費者有影響嗎? 

:如果 Broker 沒有設置主從集群,消費者會繼續從掛掉的 Broker 上拉取,這會導致拉取失敗,直到 NameServer 更新了 Broker 列表。

面試官:NameServer 什么時候會更新 Broker 列表呢? 

:NameServer 會有每 10s 一次的定時任務檢查 Broker 是否下線了,如果 120s 內有沒有收到 Broker 心跳,則關閉 channel,把 Broker 信息從本地緩存移除。消費者則默認每隔 30s 向 NameServer 拉取路由信息來刷新本地緩存的 Broker 列表。也就是說可能會有最多 150s 的時間消費者拉取消息失敗。如下圖:

圖片

面試官:如果 Broker 集群配置了從節點,還會有上面的影響嗎? 

:如果有從節點,在 Broker 主節點恢復前,生產者是不能往從節點發送消息的,但是消費者可以去從節點拉取消息。

面試官:消費者什么時候會去 Broker 從節點拉取消息呢? 

:Broker 掛了以后,消費組會通過向 Name Server 拉取訂閱關系來更新本地緩存的 Broker 列表,因為主節點已經不在列表中了,所以會從從節點列表中選擇一個 Broker 進項消息拉取。

面試官:如果主節點沒有掛,消費者會去從節點拉取消息嗎? 

:在主節點系統壓力較大的時候,消費者也會去從節點拉取消息。可以參考下面的代碼:

//DefaultMessageStore 類
//maxOffsetPy:最大物理偏移量
//maxPhyOffsetPulling:這次消息拉取的最大偏移量
//diff:還沒有被拉取的消息總長度
long diff = maxOffsetPy - maxPhyOffsetPulling;
//TOTAL_PHYSICAL_MEMORY_SIZE:系統總的物理內存大小
//getAccessMessageInMemoryMaxRatio 默認是 40
long memory = (long) (StoreUtil.TOTAL_PHYSICAL_MEMORY_SIZE
* (this.messageStoreConfig.getAccessMessageInMemoryMaxRatio() / 100.0));
getResult.setSuggestPullingFromSlave(diff > memory);

從上面的代碼可以看出,當未處理的消息超出物理內存 40% 時就會去從節點拉取。需要注意兩點:

  1. 需要設置 slaveReadEnable 參數為 true,才能去從節點讀取數據。
  2. 需要配置 whichBrokerWhenConsumeSlowly 參數來決定從哪個從 brokerId 讀取。參考下面這段代碼:
if (this.brokerController.getBrokerConfig().isSlaveReadEnable()) {
// consume too slow ,redirect to another machine
if (getMessageResult.isSuggestPullingFromSlave()) {
//這里配置從哪個從節點拉取
responseHeader.setSuggestWhichBrokerId(subscriptionGroupConfig.getWhichBrokerWhenConsumeSlowly());
}
//...
}
  1. brokerId 默認是 0,也就是主節點,如果主節點掛了并且長期啟動失敗,這個參數也是需要改成可以長期拉取的一個從節點。

面試官:Broker 主節點掛了,如果成功從節點拉取消息,可能會重復消費嗎?

:對于廣播模式,消息偏移量是保存在消費者本地的,只要消費者不掛,按照內存中的偏移量去從節點拉取就行了,不會有問題。對于集群模式,消息偏移量保存在 Broker,路徑如下:

/${rocketmq.client.localOffsetStoreDir}/.rocketmq_offsets/${clientId}/${groupName}/offsets.json

消費者消費完一批消息后,會向 Broker 發送請求更新 Broker 內存中保存的偏移量,內存中的偏移量會定時(每 5s 一次)更新到上面文件中。如果 Broker 主節點不掛,無論消費者從主節點還是從節點拉取消息,更新偏移量的請求都會發送到主節點,從節點會每隔 10s 從主節點同步偏移量,如下圖:

圖片

代碼如下:

//BrokerController 類 handleSlaveSynchronize
if (role == BrokerRole.SLAVE) {
slaveSyncFuture = this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try {
BrokerController.this.slaveSynchronize.syncAll();
}
}
}, 1000 * 3, 1000 * 10, TimeUnit.MILLISECONDS);
}

也就是說,如果主節點掛了,去從節點拉取消息,可能因為偏移量沒有同步到主節點,從節點保存的偏移量不正確。不過只要消費者不宕機,就會根據消費者本地保存的偏移量去拉取,并不會拉取到重復消息。

面試官:如果 Broker 主節點重啟了,主節點并不能同步從節點的最新偏移量,那消費者從主節點讀取會讀到重復消息嗎? 

:如果主節點重啟了,如果消費者會用本地保存的偏移量去主節點拉取消息,主節點會更新本地的偏移量,同時從節點也會去主節點同步偏移量,所以并不會拉取到重復消息。如果消費者也掛了,消費者重啟后 Broker 主節點的偏移量還沒有被其他消費者更新過,那確實會拉取到重復消息。

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

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

2022-10-18 08:38:16

內存泄漏線程

2022-06-02 10:54:16

BrokerRocketMQ

2021-04-25 09:58:48

mmapJava面試

2021-03-17 15:54:32

IO零拷貝方式

2025-07-01 07:21:15

2021-10-27 20:54:24

分庫分表高并發

2022-05-02 16:18:22

RocketMQBrokertopic

2022-03-14 11:05:01

RocketMQRedis緩存

2024-05-24 10:15:36

2022-09-13 14:42:35

Redis內存函數

2021-12-28 14:53:47

Java編程語言

2024-12-16 09:11:57

2024-03-22 13:31:00

線程策略線程池

2022-04-15 11:26:14

緩存功能

2013-04-25 11:45:39

Google Glas

2025-02-26 07:53:21

2023-10-30 01:02:56

Java類類加載器雙親委派

2021-06-17 09:16:34

MySQL數據庫隔離級別

2020-10-27 08:58:47

設計NUMA內存

2019-08-07 15:51:15

5G網絡運營商
點贊
收藏

51CTO技術棧公眾號

五月综合色婷婷| 艳母动漫在线免费观看| 欧美一二三区视频| 国产一区二区三区四区| 欧美丝袜自拍制服另类| 成年人视频大全| 中文字幕丰满乱子伦无码专区| 黑人巨大精品| 亚洲自拍偷拍综合| 清纯唯美一区二区三区| 国产欧美日韩成人| 欧美亚洲一级| 欧美情侣性视频| 免费一级做a爰片久久毛片潮| 96sao精品免费视频观看| 亚洲成人7777| 91精品视频大全| 久久夜靖品2区| 国产高清欧美| 亚洲视频国产视频| 波多野结衣办公室双飞 | 天堂资源在线亚洲| 555夜色666亚洲国产免| 久久久久国产精品熟女影院| 色呦呦在线资源| 国产精品午夜久久| 欧美日韩一区综合| 天堂在线资源网| 欧美精品aa| 国产亚洲在线播放| 国产免费看av| 欧美黑白配在线| 日韩女同互慰一区二区| 一区二区三区不卡在线| 无码国精品一区二区免费蜜桃| 国产一区二区电影| 国产精品一区久久| 波多野结衣视频在线看| 国产欧美一区二区三区国产幕精品| 久久天堂av综合合色| 亚洲一区视频在线播放| 欧亚精品一区| 亚洲精品黄网在线观看| 日本三级日本三级日本三级极| 精品国产不卡一区二区| 91精品国产91久久久久久最新毛片| 日本特级黄色大片| av大片在线观看| 久久免费看少妇高潮| 国产一区二区精品在线| 国产91绿帽单男绿奴| 中文亚洲欧美| 性欧美xxxx视频在线观看| 91成人福利视频| 中文字幕一区二区三区乱码图片| 久久天天躁狠狠躁夜夜av| 激情高潮到大叫狂喷水| 99视频精品全部免费在线视频| 日韩亚洲精品视频| 日本不卡视频一区| 成人性生交大片免费看96| 日韩免费在线观看| 亚洲一区二区三区四区av| 成午夜精品一区二区三区软件| 日韩欧美综合在线| 亚洲午夜久久久久久久久| 亚洲综合影院| 亚洲成色777777女色窝| 狠狠人妻久久久久久综合蜜桃| 97精品国产99久久久久久免费| 91黄视频在线| 色一情一区二区三区| 秋霞影院一区| 在线观看日产精品| 久久这里只精品| 日韩激情电影| 欧美中文字幕一区二区三区| 在线黄色免费看| 在线日韩成人| 亚洲欧美综合v| 乱老熟女一区二区三区| 欧美激情视频一区二区三区免费| 亚洲色图美腿丝袜| 国产福利在线导航| 欧美日韩国产色综合一二三四| 992tv在线成人免费观看| 伊人中文字幕在线观看| 国内外成人在线视频| www.久久艹| 男人av在线| 亚洲女女做受ⅹxx高潮| 国产成人精品视频免费看| 日韩毛片一区| 亚洲福利小视频| 人与嘼交av免费| 国产精品激情| 国产精品丝袜一区二区三区| 性一交一乱一色一视频麻豆| 久久综合国产精品| 日本黄网站色大片免费观看| 性欧美又大又长又硬| 欧美福利视频一区| 国产三级国产精品| 在线观看日韩| 国产精品高潮呻吟视频| 亚洲av永久纯肉无码精品动漫| 国产亚洲综合性久久久影院| 精品免费国产| 欧美成人三区| 日韩欧美中文字幕在线观看| 在线观看免费av网址| 丝袜美腿一区二区三区动态图| 久久久999国产| 国产真实乱在线更新| 亚洲人成免费| 999精品视频一区二区三区| 成人综合影院| 国产精品午夜电影| 黄色一级片播放| 欧洲精品99毛片免费高清观看 | 国产高清在线观看| 亚洲va国产va欧美va观看| 亚洲美女爱爱视频| 精品国产不卡| 欧美亚洲第一区| 国产无遮挡又黄又爽在线观看| 毛片av中文字幕一区二区| 久久一区免费| sm捆绑调教国产免费网站在线观看| 欧美日韩精品欧美日韩精品 | 成人免费公开视频| 综合在线观看色| 可以免费在线看黄的网站| 婷婷五月色综合香五月| 国语自产偷拍精品视频偷| 国产一级特黄视频| 国产一区二区三区在线观看免费| 色综合久久av| 性欧美hd调教| 亚洲欧美三级在线| 欧美日韩一级黄色片| 久久婷婷色综合| 3d动漫一区二区三区| www.神马久久| 午夜精品久久久久久99热| 免费a视频在线观看| 亚洲国产中文字幕在线视频综合| 香蕉视频色在线观看| 中文精品电影| 亚洲va欧美va在线观看| 少妇无码一区二区三区| 亚洲一区二区四区蜜桃| 久草免费资源站| 亚洲国产专区校园欧美| 国产一区二区不卡视频| 老色鬼在线视频| 亚洲视频在线观看免费| 成人一级免费视频| 国产精品久久久久久久久搜平片| 日韩精品视频一二三| 婷婷伊人综合| 豆国产97在线| 天堂中文最新版在线中文| 亚洲人成电影在线| 中文字幕一区二区久久人妻| 亚洲丝袜制服诱惑| 激情小说欧美色图| 亚洲精品在线二区| 欧美污视频久久久| 日韩色性视频| 久久久久久久久久av| 神马亚洲视频| 欧美伦理视频网站| 五月天婷婷丁香| 久久久99久久| 在线免费看v片| 夜久久久久久| 午夜精品短视频| 91成人午夜| 国产精品久久久久久久一区探花| 国产福利视频在线观看| 精品sm在线观看| 最新在线中文字幕| 一区二区成人在线| 国产精品国产三级国产专业不| 久国产精品韩国三级视频| 99久久国产综合精品五月天喷水| 欧美大片网站| 欧美国产日韩一区二区在线观看| 亚洲欧美丝袜中文综合| 91黄色免费看| 国产极品在线播放| 亚洲国产精品精华液2区45| 久久久精品人妻一区二区三区| 亚洲色诱最新| 潘金莲一级淫片aaaaaa播放1| 欧美1区2区3区4区| 91在线色戒在线| 黄色亚洲网站| 欧美极品第一页| √天堂资源地址在线官网| 亚洲成人激情图| 亚洲精品国产欧美在线观看| 亚洲一区二区三区四区在线| 国产18无套直看片| av在线播放不卡| 五十路熟女丰满大屁股| 日韩精品永久网址| 久久久久久欧美精品色一二三四| 精品视频在线观看免费观看| 日韩美女毛茸茸| а√在线中文在线新版| 超碰97人人做人人爱少妇| 九九热视频在线观看| 337p日本欧洲亚洲大胆精品| 国产精品午夜福利| 欧美中文字幕不卡| 欧美精品一二三四区| 亚洲成a人片在线观看中文| 亚洲怡红院在线观看| 国产女人aaa级久久久级 | 中文字幕一区二区三区四区视频 | **欧美大码日韩| 免费看污片的网站| 99精品视频一区二区三区| 女王人厕视频2ⅴk| 国内不卡的二区三区中文字幕| 99视频免费播放| 天堂蜜桃一区二区三区| 人妻少妇精品无码专区二区| 欧美激情一区| 免费日韩在线观看| 偷拍欧美精品| 中文字幕一区二区三区乱码 | 视频精品一区二区三区| 91亚洲永久免费精品| 福利精品在线| 国产精品自在线| 日韩黄色碟片| 91在线色戒在线| 99视频这里有精品| 91免费欧美精品| 成人乱码手机视频| 96pao国产成视频永久免费| 成人精品视频在线观看| 7777精品伊久久久大香线蕉语言| 91精品视频一区二区| 91麻豆国产精品| 蜜桃精品视频| 国产二区不卡| 精品按摩偷拍| 久久成人资源| 亚洲资源网站| 成人h猎奇视频网站| 成人全视频在线观看在线播放高清| 国产精品久久av| 欧美一区=区三区| 成人做爽爽免费视频| 欧美日韩黄网站| 国产伦理久久久| 亚洲肉体裸体xxxx137| 日韩国产美国| 91精品久久久久久久蜜月 | 91精品久久| 日韩精品免费视频| 精品三级久久久久久久电影聊斋| 在线观看不卡av| mm1313亚洲国产精品美女| 久久久久久久久久久免费精品 | 欧美在线视屏| 可以看毛片的网址| 久久蜜桃资源一区二区老牛| 99热这里只有精品在线播放| 亚洲视频碰碰| 岳毛多又紧做起爽| 麻豆国产一区二区| 欧美图片自拍偷拍| www久久精品| 黄色a级片在线观看| 亚洲成av人片一区二区| 久草手机在线视频| 欧美精品免费视频| 欧美一区二区三区激情| 中文国产成人精品| 人交獸av完整版在线观看| 欧美一级淫片丝袜脚交| 亚洲人成网站在线在线观看| 国产欧美综合精品一区二区| 国产一区网站| 黄色激情在线视频| 男女男精品视频网| 我看黄色一级片| 国产成人三级在线观看| 国产女主播喷水高潮网红在线| 国产精品久久久久一区| 国产成人一区二区三区影院在线| 欧美少妇性性性| 色欲av伊人久久大香线蕉影院| 在线中文字幕日韩| 色综合亚洲图丝熟| 91网站在线看| 欧美精品色图| 国产精品国产亚洲精品看不卡 | 久久久久国产免费| 国产欧美日韩中文久久| 中文字幕一区二区三区手机版| 欧美色精品在线视频| 手机看片国产1024| 久99九色视频在线观看| 91福利精品在线观看| 久久99精品国产99久久| 亚洲影视一区| 欧美自拍偷拍一区| 亚洲国产精品狼友在线观看| 日本一区二区免费在线| 国产无遮无挡120秒| 欧美精品高清视频| 国产原创av在线| 91国内精品久久| **爰片久久毛片| 91xxx视频| 看国产成人h片视频| 91成人破解版| 五月激情六月综合| 亚洲欧美另类日韩| 欧美精品在线观看91| 色999韩欧美国产综合俺来也| 欧美日韩精品免费看 | 欧美激情久久久久| 日韩中文字幕| 乱熟女高潮一区二区在线| 久久成人麻豆午夜电影| 免费91在线观看| 欧美视频完全免费看| 国产三级在线免费| 国产福利视频一区二区| 亚洲综合图色| chinese少妇国语对白| 久久美女艺术照精彩视频福利播放 | 亚洲欧美在线另类| 一区二区日韩在线观看| 欧美日韩亚洲不卡| 91大神在线网站| 国产精品夜色7777狼人| 色综合咪咪久久网| 五月花丁香婷婷| 亚洲男女毛片无遮挡| 国产一区二区三区三州| 久久综合国产精品台湾中文娱乐网| 亚洲综合资源| 性生活免费观看视频| 国产高清不卡二三区| 激情视频在线播放| 亚洲国产毛片完整版| 午夜影院在线观看国产主播| 欧美日韩国产高清视频| 日日噜噜夜夜狠狠视频欧美人| 国产aⅴ激情无码久久久无码| 日本二三区不卡| 国产在线激情视频| www久久99| 国产麻豆综合| 亚洲天堂av中文字幕| 日韩一区二区三区视频| 98色花堂精品视频在线观看| 久久99精品久久久久久水蜜桃| 狂野欧美一区| 登山的目的在线| 亚洲福利在线视频| 美女福利一区二区三区| 亚洲三区视频| 国产成人精品免费看| 五月天激情国产综合婷婷婷| 夜夜嗨av一区二区三区免费区 | 亚洲国产精品高清久久久| 亚洲精华液一区二区三区| 无码免费一区二区三区免费播放 | 色狠狠色噜噜噜综合网| 免费观看成人高潮| 国产精品中出一区二区三区| 丝袜脚交一区二区| 美女福利视频在线观看| 日韩成人av网| 一区二区三区日本视频| 成人一区二区免费视频| 亚洲国产精品成人综合| 亚洲精品国产suv一区| 国产不卡在线观看| 欧美成人一品| 老熟妇一区二区| 欧美不卡一区二区三区| 第四色男人最爱上成人网| 公共露出暴露狂另类av| 久久免费美女视频| 精品美女www爽爽爽视频| 日韩在线观看成人| 精品淫伦v久久水蜜桃| 精品综合久久久久| 日韩欧美黄色动漫| 久久五月精品中文字幕|