成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試題:一個Consumer訂閱兩個Topic,其中一個Topic消息過多堆積了,會影響另一個Topic消費嗎?

開發 架構
一個consumer訂閱兩個topic,其中一個Topic消息過多堆積了,會影響另一個Topic消費嗎?對于RocketMQ這種,看源碼如何方便,于是乎我就開始找相應的源碼,然后一頓思考。

?無意中在網上看到這么一個問題,一個consumer訂閱兩個topic,其中一個topic消息過多堆積了,會影響另一個topic消費嗎?

對于RocketMQ這種,看源碼如何方便,于是乎我就開始找相應的源碼,然后一頓思考。

先給大家上結論,看堵塞的原因,如果原因是生產者瞬時產生大量的消息,比如秒殺,導致的消息堆積,基本不會影響;如果是消費者出現故障,消費速度變得奇慢無比,那就會影響,不過并不會阻塞,只是會影響速率?。

接下來帶著大家一起看源碼。

/**
* Rebalance Service
* consumer負載均衡線程服務
*/
public class RebalanceService extends ServiceThread {}

大家先把目光聚焦到這個負載均衡的線程服務上來,這個大家也看到了,每個20秒執行一次,這個主要負載均衡的邏輯在doRebalance方法中。

圖片

我們進去這個方法看。

圖片

進來之后可以看到,對consumerTable的對象進行循環,這個存儲的是所有的消費者,然后循環調用doRebalance,繼續進去看。

圖片

繼續往里沖。

圖片

線程的創建來到這里,我們可以看到核心處理是這個rebalanceByTopic,傳入的參數就是我們這個消費者監聽的topic。

圖片

這里的mqSet是該topic的所有consumerqueue,也就是默認創建的那4個隊列,當然,這個數量可以改變  。

然后我們可以看到allocateMessageQueueStrategy,這個是一個分配策略對象,調用其中的allocate來進行分配該topic的消息隊列。

    圖片

這個分配策略也有幾種實現方式,大家看一看,根據名字其實大家也可以猜個八九不離十了,感興趣的可以點進去看看詳細的處理機制。

圖片

分配好之后,將隊列賦值給allocateResultSet這個對象,這里為啥要用set集合存儲呢?

我的個人猜測是,防止出現queue數量的重新改變的情況下,可能導致這里出現重復,這里增加一層set防止這種極端情況的出現。

接下來分配好隊列之后,主要的處理就是updateProcessQueueTableInRebalance,這個就是負責更新消息隊列,其實呢,也可以認為成把這個消費者需要負責的這些隊列賦值給它,也就是這是你的責任了,你這個消費者需要處理這些隊列。

圖片

我們進來updateProcessQueueTableInRebalance這個方法之后,上面的那些我就折疊起來不給大家看了,這里的處理主要也是針對于某些機器突然宕機或者增加一些機器的情況。

這個方法的主要處理是在最后這個拉取請求這里,也就是dispatchPullRequest這個,傳入的參數是一個pullRequest的list。

圖片

線程的創建進來之后,循環處理pullRequest,哎,還沒找到最底層,繼續點進去。

圖片

線程的創建哎。終于找到你了,就是你這個家伙,最后就執行了一個put方法,放進去的就是一個LinkedBlockingQueue隊列。

圖片

這個是一個拉取消息的請求隊列,請求的對象就是pullRequest。

實際處理的時候,也就是拉取消息的時候,多個線程會從LinkedBlockingQueue中去take消息,然后按照放入的順序去進行消費。

 家解釋一下這個流程,這里就是rocketmq首先對消息會進行一個負載均衡Rebalance的過程,這個就是將topic中的consumerqueue隊列按照consumer進行分配,分配策略就是上面看到的那幾種。

將pullRequest放入到這個LinkedBlockingQueue中,這里放的是topic、brokerName、queueID這些,這個時候已經排好了后面消費的順序了。

比如有10個request中,大概5個是topicTest1,另外5個是topicTest2。

所以呢,這個時候假如topicTest1消息堆積了,還是會照常去消費topicTest2的,此時我們需要看這個堆積的原因,如果堆積是因為秒殺一類的場景導致瞬時間產生大量消息,這樣消費者還是會正常消費topicTest1,所以不會影響topicTest2,

但是,如果topicTest1消費速度很慢,導致所有線程都處理很慢,都被占了,那樣就會稍微影響topicTest2的速度了,不過那也只是暫時的,不會阻塞topicTest2的,

責任編輯:姜華 來源: 左耳君
相關推薦

2016-12-26 15:23:21

戴爾

2012-01-12 10:09:55

Elementary 思路

2011-07-18 15:08:19

SQL存儲過程

2024-01-15 00:35:23

JavaScript框架HTML

2011-03-28 14:02:07

MirahJava對手

2012-08-02 09:36:58

fork面試題

2011-11-14 09:41:10

Linux Mint

2021-05-29 07:13:26

微軟Nobelium網絡攻擊

2018-12-05 09:00:46

DevOps持續交付持續集成

2023-06-20 08:25:53

NESTED源碼mybatis

2021-06-16 12:03:49

WindowsLinux游戲

2011-11-15 10:16:04

Linux操作系統

2020-11-13 07:16:09

線程互斥鎖死循環

2023-09-19 23:21:48

Python列表

2011-11-22 13:52:38

2016-03-01 14:37:47

華為

2021-04-26 14:02:37

AMD串流硬件

2011-11-10 09:46:41

云計算云管理

2017-05-26 18:06:47

2020-06-18 15:15:02

物聯網網關物聯網IOT
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品亚洲精品 | 本道综合精品 | 国产免费麻豆视频 | 精品国产一区二区国模嫣然 | 三级黄色大片网站 | 一级毛片在线播放 | av一区二区三区 | 久久久久国产精品 | 国产成人精品久久二区二区91 | 午夜视频一区二区 | 免费在线观看成人 | 亚洲一区二区三区视频 | 国际精品鲁一鲁一区二区小说 | 欧美video| 久久久久成人精品 | av在线免费观看网址 | 久久久日韩精品一区二区三区 | 97在线观视频免费观看 | 秋霞av国产精品一区 | 亚洲欧美日韩久久久 | 国产精品免费一区二区三区四区 | 亚洲第1页 | 日韩欧美三级在线 | 九九综合 | 免费一级欧美在线观看视频 | 午夜免费视频 | 久久91av| 亚洲视频三区 | 一级大黄色片 | 国产亚洲一区在线 | 手机av在线 | 中文字幕一区二区三区精彩视频 | 人人操日日干 | 一区二区三区四区在线视频 | 中文字幕一区二区三区四区五区 | 日韩影院在线观看 | 久久婷婷国产 | 久久国产精品久久久久久 | 91美女在线 | 亚洲视频免费播放 | 99精品视频免费观看 |