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

生產(chǎn)環(huán)境MQ集群一個非常詭異的消費延遲排查

開發(fā) 前端
由于目前我暫時對底層存儲寫入的原理還認識不夠深入,對相關系統(tǒng)采集指標不夠敏感,當時主要分析了一下線程棧,發(fā)現(xiàn)ReputMessageService線程一直在工作,推測可能是轉發(fā)不及時,這塊我還需要更加深入去研究,如果大家對這塊有其實理解,歡迎留言,我也會在后續(xù)工作中提升這塊的技能,更加深入去理解底層的原理。

?1、問題現(xiàn)象

某一天,項目組一個同事向我反饋,他們使用公司的數(shù)據(jù)同步產(chǎn)品將MySQL數(shù)據(jù)同步到MQ集群,然后使用消費者將數(shù)據(jù)再同步到ES,反饋數(shù)據(jù)同步延遲嚴重,但對應的消費組確沒有積壓,但最近最近幾分鐘的數(shù)據(jù)都沒有同步過來。

那問題來了,消費端沒有消費積壓,而且通過查看數(shù)據(jù)同步平臺該通過任務的同步狀態(tài),同樣顯示沒有積壓,那是為什么呢?

遇到這個問題,我們應該冷靜下來,分析一下其大概的數(shù)據(jù)流向圖,梳理后如下圖所示:

圖片

通過初步的診斷,從數(shù)據(jù)同步產(chǎn)品查看Binlog同步無延遲、MQ消費無積壓,那為什么最終Es集群中的數(shù)據(jù)與MySQL有高達幾分鐘的延遲呢?

2、問題排查

根據(jù)上圖幾個關鍵組件數(shù)據(jù)同步延遲的檢測,基本就排除了數(shù)據(jù)同步組件、MQ消費端本身消費的問題,問題的癥結應該就是數(shù)據(jù)同步組件成功將數(shù)據(jù)寫入到MQ集群,并且MQ集群返回了寫入成功,但消費端并沒有及時感知這個消息,也就是說消息雖然寫入到MQ集群,但并沒有達到消費隊列。

因為如果數(shù)據(jù)同步組件如果沒有寫入成功,則MySQL Binlog日志就會出現(xiàn)延遲。但如果是MQ消費端的問題,則MQ平臺也會顯示消費組積壓。

那為什么消息服務器寫入成功,但消費組為什么感知不到呢?

首先為了驗證上述結論是否正確,我還特意去看了一下主題的詳細信息:

圖片

查看主題的統(tǒng)計信息時發(fā)現(xiàn)當前系統(tǒng)的時間為19:01分, 但主題最新的寫入時間才是18:50,兩者之間相差將近10分鐘。

備注:上述界面是我們公司內部的消息運營管理平臺,其實底層是調用了RocketMQ提供的topicStatus命令。

那這又是怎么造成的呢?

在這里我假設大家對RocketMQ底層的實現(xiàn)原理還不是特別熟悉,在這樣的情況下,我覺得我們應該首先摸清楚topicStatus這個命令返回的minOffset、maxOffset以及l(fā)astUpdate這些是的具體獲取邏輯,只有了解了這些,我們才能尋根究底,最終找到解決辦法。

2.1 問題探究與原理剖析

在這個場景中,我們可以通過對topicStatus命令進行解析,從而探究其背后的實現(xiàn)原理。

當我們在命令行中輸入 sh ./mqadmin topicStatus命令時,最終是調用defaultMQAdminExtImpl的examineTopicStats方法,最終在服務端的處理邏輯定義在AdminBrokerProcessor的getTopicStatsInfo方法中,核心代碼如下:

圖片

這里的實現(xiàn)要點:

  • 通過MessageStore的getMinOffsetInQueue獲取最小偏移量。
  • 通過MessageStore的getMaxOffsetInQueue獲取最大偏移量。
  • 最新更新時間為最大偏移量減去一(表示最新一條消息)的存儲時間

故要弄清隊列最大、最小偏移量,關鍵是要看懂getMaxOffsetInQueue或者getMinOffsetInQueue的計算邏輯。

我也注意到分析源碼雖然能直抵真相,但閱讀起來太粗糙,所以我接下來的文章會盡量避免通篇的源碼解讀,取而代之的是只點出源碼的入口處,其旁支細節(jié)將通過時序圖獲流程圖,方便感興趣的讀者朋友去探究,我重點進行知識點的提煉,降低大家的學習成本。

如果大家想成體系的研究RocketMQ,想將消息中間件當成自己職業(yè)的閃光點,強烈建議購買我的兩本關于RocketMQ的數(shù)據(jù):《RocketMQ技術內幕》與《RocketMQ實戰(zhàn)》。

MessageStore的getMaxOffsetInQueue的時序圖如下所示:

圖片

從上述時序圖我們可以得知,調用DefaultMessageStore的getMaxOffsetInQueue方法,首先是根據(jù)主題、隊列ID獲取ConsumeQueue對象(在RocketMQ中一個主題的一個隊列會對應一個ConsumeQueue,代表一個消費隊列),也就是這里獲取的偏移量指的是消費者隊列中的偏移量,而不是Commitlog文件的偏移量。

如果是找最大偏移量,就從該隊列中的找到最后一個文件,去獲取器最大的有效偏移量,也就是等于文件的起始偏移量(fileFromOffset)加上該文件當前最大可讀的偏移量(readPosition),故引起這張時序圖一個非常關鍵的點,就是如何獲取消費隊列最大的可讀偏移量,代碼見MappedFile的getReadPosition:

public int getReadPosition(){
return this.writeBuffer == null ? this.wrotePosition.get() : this.committedPosition.get();
}

由于ConsumeQueue并沒有 transientStorePoolEnable 機制,數(shù)據(jù)直接寫入到FlieChannel中,故這里的writeBuffer為空,取的是 wrotePosition的值,那ConsumeQueue文件的wrotePosition值在什么地方更新呢?

這個可以通過查看MappedFile中修改wrotePosition的方法appendMessage方法的調用,如下圖所示:

圖片

與ConsumeQueue對應的入口主要有兩個:

  • ReputMessageService#doReput Commitlog異步轉發(fā)線程,通過該線程異步構建Consumequeue、Index等文件
  • Commitlog#recoverAbnormally RocketMQ啟動時根據(jù)Commitlog文件自動恢復Consumequeue文件

今天的主角當然不讓非ReputMessageService莫屬,這里先和大家普及一下一個最基本的知識:RocketMQ為了追求極致的順序寫,會將所有主題的消息順序寫入到一個文件(Commitlog文件),然后異步轉發(fā)到ConsumeQueue(消費隊列文件)、IndexFile(索引文件)。

其轉發(fā)服務就是通過ReputMessageService來實現(xiàn)的。

在深入介紹Commitlog文件的轉發(fā)機制之前,我在這里先問大家一個問題:消息是寫入到內存就轉發(fā)給ConsumeQueue,亦或是刷寫到磁盤后再轉發(fā)呢?

為了方便大家對這個問題的探究,其代碼的核心入口如下圖所示:

圖片

這里的關鍵實現(xiàn)要點如下:

  • 判斷是否轉發(fā)關鍵條件在于 isCommitlogAvailable()方法返回true
  • 根據(jù)轉發(fā)位點reputFromOffset,從Commitlog文件中獲取消息的物理偏移量、消息大小,tags等信息轉發(fā)到消息消費隊列、索引文件。

那isCommitlogAvailable的核心如下所示:

圖片

故轉發(fā)的關鍵就在于Commitlog的maxOffset的獲取邏輯了,其實現(xiàn)時序圖如下所示:

圖片

這里核心重點是getReadPosition方法的實現(xiàn),在RocketMQ寫Commitlog文件,為了提升寫入性能,引入了內存級讀寫分離機制,具體的實現(xiàn)原理如下圖所示:

圖片

具體在實現(xiàn)層面,就是如果transientStorePoolEnable=true,數(shù)據(jù)寫入到堆外內存(writeBuffer)中,然后再提交到FileChannel,提交的位置(commitedPosition來表示)。

大家可以分別看一下改變wrotePosition與committedPposition的調用鏈。

其中wrotePosition的調用鏈如下所示:

圖片

可以得知:wrotePosition是消息寫入到內存(pagecache或者堆外內存)都會更新,但一旦開啟了堆外內存機制,并不會取該值,所以我們可以理解為當消息寫入到Pagecache中時,就可以被轉發(fā)到消息消費隊列。

緊接著我們再看一下committedPosition的調用鏈,如下所示:

圖片

原來在RocketMQ中,如果開啟了transientStorePoolEnable機制,消息先寫入到堆外內存,然后就會向消息發(fā)送者返回發(fā)送成功,然后會有一個異步線程(CommitRealTimeService)定時將消息(默認200ms一次循環(huán))提交到FileChannel,即更新committedPosition的值,消息就會轉發(fā)給消費隊列,從而消費者就可以進行消費。

2.2 問題原因提煉

經(jīng)過上面的解析,問題應該有所眉目了。

由于我們公司為了提高RocketMQ的資源利用率,提升RocketMQ的寫入性能,我們開啟了transientStorePoolEnable機制,消息發(fā)送端寫入到堆外內存,就會返回寫入成功,這樣MySQL Binlog數(shù)據(jù)同步并不會產(chǎn)生延遲,那這里的問題,無非就2個:

  • CommitRealTimeService 線程并沒有及時將堆外內存中的數(shù)據(jù)提交到FileChannel
  • ReputMessageService線程沒有及時將數(shù)據(jù)轉發(fā)到消費隊列

由于目前我暫時對底層存儲寫入的原理還認識不夠深入,對相關系統(tǒng)采集指標不夠敏感,當時主要分析了一下線程棧,發(fā)現(xiàn)ReputMessageService線程一直在工作,推測可能是轉發(fā)不及時,這塊我還需要更加深入去研究,如果大家對這塊有其實理解,歡迎留言,我也會在后續(xù)工作中提升這塊的技能,更加深入去理解底層的原理。

也就是目前知道了問題的表象原因,雖然底層原理還未通透,但目前足以指導我們更好的處理問題:將集群內消息寫入大的主題,遷移到其他負載較低的集群,從而降低該集群的寫入壓力,當遷移了幾個主題后,果不其然,消息到達消費隊列接近實時,集群得以恢復。

責任編輯:武曉燕 來源: 中間件興趣圈
相關推薦

2023-02-23 08:02:19

PulsarJava

2013-12-05 10:50:13

2024-06-28 08:28:43

反序列化filterJson

2022-05-31 08:35:05

RocketMQACK客戶端

2018-07-20 08:44:21

Redis內存排查

2024-07-02 11:29:28

Typer庫Python命令

2020-09-29 15:08:47

Go UI框架開發(fā)

2014-05-23 10:37:37

聊天程序PHP聊天程序

2021-04-20 08:32:51

消息MQ隊列

2018-08-07 10:54:02

HTTPS郵箱瀏覽器

2024-05-09 08:08:32

SpringBinderJava

2025-01-08 06:00:00

Argus開源安全檢查工具

2025-01-07 13:00:00

日志分析平臺Graylog網(wǎng)絡安全

2024-04-24 11:42:21

Redis延遲消息數(shù)據(jù)庫

2021-04-30 07:09:48

SQLP0事故

2013-04-23 14:32:28

創(chuàng)業(yè)創(chuàng)業(yè)者Mark Suster

2021-10-13 10:22:10

Python多繼承開發(fā)

2024-07-16 18:05:19

延遲隊列MQRabbitMQ

2019-04-15 13:15:12

數(shù)據(jù)庫MySQL死鎖

2022-04-18 09:07:54

Linux網(wǎng)絡延遲
點贊
收藏

51CTO技術棧公眾號

精品国产第一福利网站| 天堂中文在线资源| 久久精品久久久| 日韩视频在线你懂得| 国产免费一区二区视频| 奇米影视888狠狠狠777不卡| 久久精品久久综合| 久久久爽爽爽美女图片| av电影在线不卡| 日韩一区二区三区色| 色呦呦网站一区| 欧美aaa在线观看| 天堂av在线免费观看| 精品在线播放免费| 欧美最近摘花xxxx摘花| 中国一级片在线观看| 色婷婷狠狠五月综合天色拍| 欧美电影一区二区三区| 激情综合在线观看| 91精品久久| 欧美极品aⅴ影院| 国产伦精品一区二区| 国产又粗又猛视频| 免费精品视频| 性欧美激情精品| 老女人性淫交视频| 欧美午夜精品一区二区三区电影| 精品国产免费一区二区三区四区| 波多野结衣xxxx| 欧美大胆a人体大胆做受| 亚洲精品高清在线| 亚洲一区二区三区四区中文| 欧美xxx.com| 成人av网址在线| 91精品天堂| 一区二区www| 全部av―极品视觉盛宴亚洲| 日本成人激情视频| 久久99精品波多结衣一区| 国产在线日韩| 欧美精品第一页在线播放| 日本福利片在线观看| 日韩国产一区二区| 一本色道久久88综合日韩精品| 中出视频在线观看| 成人中文字幕视频| 欧美tickling挠脚心丨vk| 999热精品视频| 亚洲欧洲二区| 91精品在线免费| 加勒比av中文字幕| 国产成人久久精品一区二区三区| 欧美日韩精品久久久| 91女神在线观看| 97人人做人人爽香蕉精品| 欧美亚洲国产bt| caoporn超碰97| 成人福利一区二区| 欧美日韩精品一区二区三区四区 | 国语精品一区| 欧美高清激情视频| 久久久国产成人| 亚洲欧洲另类| 亲子乱一区二区三区电影| 日韩人妻精品中文字幕| 日本不卡视频在线| 91精品国产综合久久香蕉最新版| 国产精品区在线观看| 国产一区二区伦理片| www 成人av com| 天天干天天操av| 久久久久久久免费视频了| 日本在线高清视频一区| 一级日本在线| 亚洲小说欧美激情另类| 37pao成人国产永久免费视频| 国产精品av一区二区三区| 欧亚洲嫩模精品一区三区| av网站在线不卡| 日韩一二三区在线观看| 亚洲国产日韩欧美在线99| 新91视频在线观看| 色喇叭免费久久综合| 色综合导航网站| 国产无遮挡呻吟娇喘视频| 日本午夜精品视频在线观看| 91亚洲va在线va天堂va国 | 亚洲天堂av在线免费| www.涩涩爱| 欧美大片专区| 欧美一性一乱一交一视频| 综合久久中文字幕| 国产成人h网站| 欧美精品一区二区三区四区五区 | 亚洲人成网77777色在线播放 | 日韩精品一区二区三区在线| 亚洲成人av免费在线观看| 日韩精品久久久久久久电影99爱| 欧美精品在线网站| 中文字幕在线播| 国产成人在线看| 日韩国产高清一区| 黄污视频在线观看| 在线观看成人小视频| 中文字幕久久久久久久| 欧美理论电影大全| 久久久久久久久久久免费| 国产情侣免费视频| 成人h动漫精品一区二| 亚洲日本精品国产第一区| 擼擼色在线看观看免费| 欧美一区二区三区的| 一级片久久久久| 在线观看不卡| 成人一区二区电影| 国产粉嫩一区二区三区在线观看| 亚洲成人激情自拍| 国产又粗又猛大又黄又爽| 精品一二三区| 欧美在线不卡区| 好吊色在线观看| 亚洲欧美日韩国产中文在线| 亚洲中文字幕久久精品无码喷水| 久久精品66| 欧美激情a∨在线视频播放| 中文在线a天堂| 久久久久九九视频| 777久久久精品一区二区三区| 视频精品一区| 插插插亚洲综合网| 中文字幕视频免费观看| 国产欧美日韩另类一区| 红桃av在线播放| 欧美大奶一区二区| 久久久久久69| 黄色aaa大片| 一区二区三区在线不卡| 男男受被啪到高潮自述| 在线精品国产| 亚洲最大福利视频网| 免费黄色在线看| 欧美精品高清视频| 疯狂试爱三2浴室激情视频| 另类的小说在线视频另类成人小视频在线 | 亚洲天堂av在线免费观看| 亚洲av中文无码乱人伦在线视色| 99国产精品国产精品久久| 男女超爽视频免费播放| 国产亚洲精品美女久久| 高清欧美性猛交xxxx| 丰满少妇一级片| 亚洲综合一区在线| 精品国产免费久久久久久婷婷| 欧美三区美女| 国产麻豆乱码精品一区二区三区| 国产精品一区hongkong| 亚洲第一视频在线观看| av网站中文字幕| 中文字幕欧美国产| 亚洲自拍第三页| 亚洲一本视频| 免费一区二区三区在在线视频| 欧美三级精品| 精品国模在线视频| 精品黑人一区二区三区国语馆| 亚洲综合免费观看高清完整版在线 | 99re亚洲国产精品| 成人免费毛片播放| 欧美oldwomenvideos| 亚洲自拍另类欧美丝袜| jizzjizz中国精品麻豆| 日韩极品精品视频免费观看| 中文字幕精品无| 亚洲视频在线观看一区| 韩国三级hd两男一女| 老妇喷水一区二区三区| 一本久久a久久精品vr综合 | 樱花草涩涩www在线播放| 一区二区国产精品视频| 国产精品久久久久久免费| 自拍偷拍国产亚洲| 艳妇乳肉豪妇荡乳xxx| 日韩精品欧美精品| a级网站在线观看| 青青操综合网| 91久久精品视频| 一本大道色婷婷在线| 日韩小视频网址| 亚洲色欧美另类| 欧美丰满少妇xxxxx高潮对白| 国产一级免费观看| 久久精品欧美日韩精品| 天美一区二区三区| 性xx色xx综合久久久xx| 欧美一级黄色录像片| 农村少妇一区二区三区四区五区 | avtt综合网| 国产精品久久久久久一区二区| 国产99re66在线视频| 国产一区二区三区高清在线观看| 国产熟女一区二区丰满| 色婷婷精品大视频在线蜜桃视频 | 黄色欧美成人| 亚洲视频sss| 日本福利一区| av在线不卡一区| 日本午夜精品久久久久| 欧美亚洲成人网| 精品一性一色一乱农村| 色噜噜狠狠色综合网图区| 性插视频在线观看| 欧美一级高清片| 中文字幕一区二区三区波野结| 婷婷成人激情在线网| 黄色一级视频免费观看| 亚洲欧洲三级电影| 毛片aaaaaa| 91麻豆成人久久精品二区三区| 巨乳女教师的诱惑| 九九视频精品免费| 天天操天天爽天天射| 校园春色综合网| 免费超爽大片黄| 午夜欧美精品| 99热都是精品| 香蕉久久网站| 中文字幕久精品免| 精品香蕉视频| 色姑娘综合网| 欧美色蜜桃97| 先锋影音欧美| 日韩欧美伦理| 一区二区精品免费视频| av一区二区在线播放| 欧美美乳视频网站在线观看| 色天下一区二区三区| 久久国产精品亚洲va麻豆| 国产精品一线| 国产欧美日韩亚洲| 久久精品国产亚洲5555| 精品国产一二| 欧洲亚洲一区二区三区| 免费成人av网站| 亚洲a级精品| 免费久久一级欧美特大黄| 日本国产精品| 日本一区免费看| 国产毛片一区二区三区| 欧美亚洲免费在线| 精品国产乱码久久久| 日日噜噜噜噜夜夜爽亚洲精品| 免费欧美视频| 日韩精品久久久| 天天天综合网| 一级性生活视频| 激情av一区| 欧美女人性生活视频| 久久一区二区三区四区五区 | av在线不卡免费看| 国产夫妻性爱视频| 久久久久国色av免费看影院| 女人黄色一级片| 亚洲精品少妇30p| 麻豆亚洲av熟女国产一区二| 亚洲福利视频一区二区| 无码一区二区三区在线观看| 欧美日韩五月天| 国产日韩在线观看一区| 精品日产卡一卡二卡麻豆| 日韩av成人| 中文字幕亚洲欧美日韩2019| 国产传媒在线播放| 91精品国产777在线观看| 欧美三区四区| 亚洲自拍欧美色图| 日韩欧美美女在线观看| 亚洲精品在线免费| 欧美久久99| 久久久精品三级| 懂色av一区二区三区免费看| 久久精品国产亚洲av麻豆| 国产精品久久久久久一区二区三区| 青青青在线视频| 欧美日韩精品国产| 91资源在线视频| 亚洲韩国日本中文字幕| 91露出在线| 性欧美在线看片a免费观看| 日本美女久久| 国产精品亚洲不卡a| 欧美电影《轻佻寡妇》| www.av毛片| 麻豆传媒一区二区三区| 中文字幕影片免费在线观看| 国产精品第五页| 国产精品一区二区6| 在线播放中文字幕一区| 婷婷久久久久久| 久热99视频在线观看| 二区三区不卡| 国产精选一区二区| 天堂网在线观看国产精品| 欧美极品欧美精品欧美| 国内一区二区视频| 欧美多人猛交狂配| 亚洲曰韩产成在线| 在线免费观看一区二区| 亚洲精品理论电影| www在线视频| 国产精品青青在线观看爽香蕉| 欧美日韩一区二区三区不卡视频| 懂色av一区二区三区四区五区| 日韩一区欧美二区| 国产麻豆xxxvideo实拍| 一区二区三区在线视频免费| 亚洲自拍第二页| 亚洲人成电影网站色| 91av久久| 99在线影院| 亚洲电影影音先锋| jizzzz日本| 久久精品视频一区二区三区| 国产黄色片免费看| 欧美不卡激情三级在线观看| 精品美女在线观看视频在线观看| 国产精品第三页| 亚洲欧美成人vr| 无码播放一区二区三区| 不卡一区二区三区四区| 久久亚洲AV无码| 欧美大片日本大片免费观看| 老司机福利在线视频| 国产综合视频在线观看| 91综合久久一区二区| 欧美wwwwwww| 国产精品久久午夜夜伦鲁鲁| 最近中文字幕在线视频| 一区二区三区动漫| 日韩a**中文字幕| 视频在线99| 青青草原综合久久大伊人精品优势| 无码人妻aⅴ一区二区三区69岛| 欧美色视频日本版| 亚洲av电影一区| 日韩av不卡电影| 国产午夜一区| wwwwwxxxx日本| 中文字幕一区二区三区蜜月 | 久草视频在线免费看| 日韩午夜三级在线| 国产精品69xx| 国产一级特黄a大片99| 午夜在线一区| 五月天精品在线| 这里只有精品免费| 日本欧美电影在线观看| 激情伦成人综合小说| 美女精品网站| 娇小11一12╳yⅹ╳毛片| 4438x亚洲最大成人网| 婷婷av在线| 久久久久国产精品视频| 日韩av一二三| 国产女人被狂躁到高潮小说| 亚洲福利在线看| 欧美男体视频| 一区二区免费电影| 国产成人精品一区二| 可以在线观看av的网站| 国产午夜精品一区二区三区| 只有精品亚洲| 欧美 日韩 亚洲 一区| 国产欧美日韩综合精品一区二区| 国产精品久久久久久免费免熟 | 日韩欧美大片在线观看| 亚洲人成电影在线播放| 日本午夜免费一区二区| 久久国产午夜精品理论片最新版本| wwwwww.欧美系列| 在线观看免费高清视频| 欧美激情第6页| 国产一区二区三区四区五区传媒| 中文字幕在线观看日 | 国模无码视频一区二区三区| 国产精品免费看片| 亚洲乱熟女一区二区| 国产精品美女视频网站| 欧美成人一品| 女人黄色一级片| 亚洲国产成人在线视频| 日本免费成人| 女性女同性aⅴ免费观女性恋| 中文字幕在线不卡视频| 午夜视频福利在线| 成人黄色午夜影院| 久久av一区二区三区| 青娱乐国产精品| 这里精品视频免费| 日韩av不卡一区| 91人妻一区二区三区|