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

MQ消息積壓,把我整吐血了

開發 前端
使用線程池消費mq消息不是萬能的。該方案也有一些弊端,它有消息順序的問題,也可能會導致服務器的CPU使用率飆升。此外,如果在多線程中調用了第三方接口,可能會導致該第三方接口的壓力太大,而直接掛掉。

前言

我之前在一家餐飲公司待過兩年,每天中午和晚上用餐高峰期,系統的并發量不容小覷。為了保險起見,公司規定各部門都要在吃飯的時間輪流值班,防止出現線上問題時能夠及時處理。

我當時在后廚顯示系統團隊,該系統屬于訂單的下游業務。

用戶點完菜下單后,訂單系統會通過發kafka消息給我們系統,系統讀取消息后,做業務邏輯處理,持久化訂單和菜品數據,然后展示到劃菜客戶端。

這樣廚師就知道哪個訂單要做哪些菜,有些菜做好了,就可以通過該系統出菜。系統自動通知服務員上菜,如果服務員上完菜,修改菜品上菜狀態,用戶就知道哪些菜已經上了,哪些還沒有上。這個系統可以大大提高后廚到用戶的效率。

圖片圖片

這一切的關鍵是消息中間件:kafka,如果它出現問題,將會直接影響到后廚顯示系統的用戶功能使用。

這篇文章跟大家一起聊聊,我們當時出現過的消息積壓問題,希望對你會有所幫助。

1 第一次消息積壓

剛開始我們的用戶量比較少,上線一段時間,mq的消息通信都沒啥問題。

隨著用戶量逐步增多,每個商家每天都會產生大量的訂單數據,每個訂單都有多個菜品,這樣導致我們劃菜系統的劃菜表的數據越來越多。

在某一天中午,收到商家投訴說用戶下單之后,在平板上出現的菜品列表有延遲。

廚房幾分鐘之后才能看到菜品。

我們馬上開始查原因。

出現這種菜品延遲的問題,必定跟kafka有關,因此,我們先查看kafka。

果然出現了消息積壓。

通常情況下,出現消息積壓的原因有:

  1. mq消費者掛了。
  2. mq生產者生產消息的速度,大于mq消費者消費消息的速度。

我查了一下監控,發現我們的mq消費者,服務在正常運行,沒有異常。

剩下的原因可能是:mq消費者消費消息的速度變慢了。

接下來,我查了一下劃菜表,目前不太多只有幾十萬的數據。

看來需要優化mq消費者的處理邏輯了。

我在代碼中增加了一些日志,把mq消息者中各個關鍵節點的耗時都打印出來了。

發現有兩個地方耗時比較長:

  1. 有個代碼是一個for循環中,一個個查詢數據庫處理數據的。
  2. 有個多條件查詢數據的代碼。

于是,我做了有針對性的優化。

將在for循環中一個個查詢數據庫的代碼,改成通過參數集合,批量查詢數據。

有時候,我們需要從指定的用戶集合中,查詢出有哪些是在數據庫中已經存在的。

實現代碼可以這樣寫:

public List<User> queryUser(List<User> searchList) {
    if (CollectionUtils.isEmpty(searchList)) {
        return Collections.emptyList();
    }

    List<User> result = Lists.newArrayList();
    searchList.forEach(user -> result.add(userMapper.getUserById(user.getId())));
    return result;
}

這里如果有50個用戶,則需要循環50次,去查詢數據庫。我們都知道,每查詢一次數據庫,就是一次遠程調用。

如果查詢50次數據庫,就有50次遠程調用,這是非常耗時的操作。

那么,我們如何優化呢?

具體代碼如下:

public List<User> queryUser(List<User> searchList) {
    if (CollectionUtils.isEmpty(searchList)) {
        return Collections.emptyList();
    }
    List<Long> ids = searchList.stream().map(User::getId).collect(Collectors.toList());
    return userMapper.getUserByIds(ids);
}

提供一個根據用戶id集合批量查詢用戶的接口,只遠程調用一次,就能查詢出所有的數據。

多條件查詢數據的地方,增加了一個聯合索引,解決了問題。

這樣優化之后, mq消費者處理消息的速度提升了很多,消息積壓問題被解決了。

2 第二次消息積壓

沒想到,過了幾個月之后,又開始出現消息積壓的問題了。

但這次是偶爾會積壓,大部分情況不會。

這幾天消息的積壓時間不長,對用戶影響比較小,沒有引起商家的投訴。

我查了一下劃菜表的數據只有幾百萬。

但通過一些監控,和DBA每天發的慢查詢郵件,自己發現了異常。

我發現有些sql語句,執行的where條件是一模一樣的,只有條件后面的參數值不一樣,導致該sql語句走的索引不一樣。

比如:order_id=123走了索引a,而order_id=124走了索引b。

有張表查詢的場景有很多,當時為了滿足不同業務場景,加了多個聯合索引。

MySQL會根據下面幾個因素選擇索引:

  1. 通過采樣數據來估算需要掃描的行數,如果掃描的行數多那可能io次數會更多,對cpu的消耗也更大。
  2. 是否會使用臨時表,如果使用臨時表也會影響查詢速度;
  3. 是否需要排序,如果需要排序則也會影響查詢速度。

綜合1、2、3以及其它的一些因素,MySql優化器會選出它自己認為最合適的索引。

MySQL優化器是通過采樣來預估要掃描的行數的,所謂采樣就是選擇一些數據頁來進行統計預估,這個會有一定的誤差。

由于MVCC會有多個版本的數據頁,比如刪除一些數據,但是這些數據由于還在其它的事務中可能會被看到,索引不是真正的刪除,這種情況也會導致統計不準確,從而影響優化器的判斷。

上面這兩個原因導致MySQL在執行SQL語句時,會選錯索引。

明明使用索引a的時候,執行效率更高,但實際情況卻使用了索引b。

為了解決MySQL選錯索引的問題,我們使用了關鍵字force index,來強制查詢sql走索引a。

這樣優化之后,這次小范圍的消息積壓問題被解決了。

3 第三次消息積壓

過了半年之后,在某個晚上6點多鐘。

有幾個商家投訴過來,說劃菜系統有延遲,下單之后,幾分鐘才能看到菜品。

我查看了一下監控,發現kafka消息又出現了積壓的情況。

查了一下MySQL的索引,該走的索引都走了,但數據查詢還是有些慢。

此時,我再次查了一下劃菜表,驚奇的發現,短短半年表中有3千萬的數據了。

通常情況下,單表的數據太多,無論是查詢,還是寫入的性能,都會下降。

這次出現查詢慢的原因是數據太多了。

為了解決這個問題,我們必須:

  1. 做分庫分表
  2. 將歷史數據備份

由于現階段做分庫分表的代價太大了,我們的商戶數量還沒有走到這一步。

因此,我們當時果斷選擇了將歷史數據做備份的方案。

當時我跟產品和DBA討論了一下,劃菜表只保留最近30天的數據,超過幾天的數據寫入到歷史表中。

這樣優化之后,劃菜表30天只會產生幾百萬的數據,對性能影響不大。

消息積壓的問題被解決了。

4 第四次消息積壓

通過上面這幾次優化之后,很長一段時間,系統都沒有出現消息積壓的問題。

但在一年之后的某一天下午,又有一些商家投訴過來了。

此時,我查看公司郵箱,發現kafka消息積壓的監控報警郵件一大堆。

但由于剛剛一直在開會,沒有看到。

這次的時間點就有些特殊。

一般情況下,并發量大的時候,是中午或者晚上的用餐高峰期,而這次出現消息積壓問題的時間是下午。

這就有點奇怪了。

剛開始查詢這個問題一點頭緒都沒有。

我問了一下訂單組的同事,下午有沒有發版,或者執行什么功能?

因為我們的劃菜系統,是他們的下游系統,跟他們有直接的關系。

某位同事說,他們半小時之前,執行了一個批量修改訂單狀態的job,一次性修改了幾萬個訂單的狀態。

而修改了訂單狀態,會自動發送mq消息。

這樣導致,他們的程序在極短的時間內,產生了大量的mq消息。

而我們的mq消費者根本無法處理這些消息,所以才會產生消息積壓的問題。

我們當時一起查了kafka消息的積壓情況,發現當時積壓了幾十萬條消息。

要想快速提升mq消費者的處理速度,我們當時想到了兩個方案:

  1. 增加partion數量。
  2. 使用線程池處理消息。

但考慮到,當時消息已經積壓到幾個已有的partion中了,再新增partion意義不大。

于是,我們只能改造代碼,使用線程池處理消息了。

為了開始消費積壓的消息,我們將線程池的核心線程和最大線程數量調大到了50。

這兩個參數是可以動態配置的。

這樣調整之后,積壓了幾十萬的mq消息,在20分鐘左右被消費完了。

這次突然產生的消息積壓問題被解決了。

解決完這次的問題之后,我們還是保留的線程池消費消息的邏輯,將核心線程數調到8,最大線程數調到10。

當后面出現消息積壓問題,可以及時通過調整線程數量,先臨時解決問題,而不會對用戶造成太大的影響。

注意:使用線程池消費mq消息不是萬能的。該方案也有一些弊端,它有消息順序的問題,也可能會導致服務器的CPU使用率飆升。此外,如果在多線程中調用了第三方接口,可能會導致該第三方接口的壓力太大,而直接掛掉。

總之,MQ的消息積壓問題,不是一個簡單的問題。

雖說產生的根本原因是:MQ生產者生產消息的速度,大于MQ消費者消費消息的速度,但產生的具體原因有多種。

我們在實際工作中,需要針對不同的業務場景,做不同的優化。

我們需要對MQ隊列中的消息積壓情況,進行監控和預警,至少能夠及時發現問題。

沒有最好的方案,只有最合適當前業務場景的方案。

責任編輯:武曉燕 來源: 蘇三說技術
相關推薦

2024-04-23 08:46:45

消息積壓KafkaMQ

2024-12-12 14:56:48

消息積壓MQ分區

2019-09-27 09:13:55

Redis內存機制

2022-07-26 00:00:00

MQ消息中間件

2020-03-09 09:13:40

HTTPSTCP網絡協議

2020-12-09 15:00:08

編程IT線程

2020-12-09 08:27:48

并發編程編程開發

2023-10-17 08:01:46

MQ消息重試

2022-02-07 20:36:12

網絡NASIP網段

2019-06-17 08:21:06

RPC框架服務

2025-01-13 05:00:00

2020-04-14 10:06:20

微服務Netflix語言

2020-12-09 11:38:16

數據庫測試環境

2025-10-16 08:34:01

2025-09-02 04:21:00

消息積壓死信隊列線程池

2021-09-13 08:41:52

職場互聯網自閉

2022-11-14 00:21:07

KafkaRebalance業務

2022-03-14 11:05:01

RocketMQRedis緩存

2025-07-29 09:09:47

2024-11-19 08:36:16

點贊
收藏

51CTO技術棧公眾號

亚洲精品在线视频免费观看| 一区二区三区四区欧美日韩| 日本三级免费看| 国产精品久久久久久久久久白浆| 亚洲v精品v日韩v欧美v专区 | 欧美另类一区二区| 中文字幕精品影院| 欧美日韩综合色| 久久精品人成| 中文字幕av久久爽| 你懂的国产精品| 精品一区电影国产| 午夜剧场在线免费观看| 黄页网站在线| 国产欧美日韩不卡免费| 亚洲999一在线观看www| 日韩免费一二三区| 日韩免费在线| 亚洲第一中文字幕| 久久黄色片网站| 岛国av在线网站| 中文字幕制服丝袜成人av| 亚洲综合精品伊人久久| 6080午夜伦理| 欧美喷水视频| 色七七影院综合| 日本一卡二卡在线| 日本一道高清亚洲日美韩| 亚洲欧美偷拍卡通变态| 欧美日韩国产不卡在线看| 国产免费视频一区二区三区| 老司机精品视频网站| 色综合久久天天综线观看| 老牛影视av老牛影视av| 精品视频一区二区三区| 欧洲一区二区三区免费视频| 久久男人资源站| 永久免费在线观看视频| 91美女片黄在线| 99在线观看视频网站| 亚洲精品国产精品国自产网站按摩| 精品成人一区| 久久影院模特热| 色一情一交一乱一区二区三区| www.亚洲一二| 日韩亚洲欧美中文三级| 欧美特级aaa| 亚洲第一影院| 狠狠爱在线视频一区| 国产a级黄色大片| 蜜桃视频在线观看免费视频网站www| 久久你懂得1024| 国产在线一区二区三区欧美 | 久久亚洲精选| 欧美成人精品在线| 51精品免费网站| 日韩av专区| 怡红院精品视频| 日韩人妻无码精品综合区| 猫咪成人在线观看| 精品久久人人做人人爱| 日本亚洲一区二区三区| 国产中文欧美日韩在线| 欧美日韩高清一区二区三区| 日韩在线第三页| 电影一区二区三区| 一区二区视频免费在线观看| 99精品一级欧美片免费播放| 视频三区在线| 亚洲四区在线观看| 国产在线拍揄自揄拍无码| av电影在线观看一区二区三区| 中日韩免费视频中文字幕| 日本亚洲自拍| 国产小视频在线观看| 国产清纯白嫩初高生在线观看91 | 殴美一级特黄aaaaaa| 成人免费毛片片v| 高清一区二区三区视频| 欧洲精品久久一区二区| 久久综合狠狠综合久久激情| 鲁片一区二区三区| 粉嫩一区二区三区国产精品| 久久九九影视网| 婷婷久久五月天| 欧美激情免费| 亚洲综合激情另类小说区| 欧美成人高潮一二区在线看| 色一区二区三区| 在线观看视频91| 日本超碰在线观看| 日本亚州欧洲精品不卡| 亚洲国产欧美一区二区三区同亚洲| 国产精品久久久久久亚洲av| 亚洲人成网亚洲欧洲无码| 日韩精品一二三四区| 少妇无套高潮一二三区| 91视频综合| 久久久久久久久久av| 在线永久看片免费的视频| 久久se精品一区精品二区| 91视频99| 人妻少妇精品无码专区久久| 久久精品夜色噜噜亚洲a∨| 亚洲自拍偷拍二区| 538在线观看| 欧美三级视频在线观看| 无码人妻一区二区三区精品视频 | 天堂久久一区二区三区| 成人美女免费网站视频| 日本毛片在线观看| 国产精品网站在线| 日韩视频在线视频| 黄色污网站在线观看| 欧美性猛交xxxxxxxx| 潘金莲一级淫片aaaaa| 一道本一区二区三区| 日韩视频免费在线观看| 午夜精品三级久久久有码| 久久精品国产亚洲高清剧情介绍| 国产精品对白一区二区三区| 91xxx在线观看| 亚洲香蕉伊在人在线观| 日韩不卡一二三| 亚洲免费福利一区| 精品中文字幕在线2019| www.久久网| 不卡一区二区三区四区| 日本丰满大乳奶| 成人日韩av| 亚洲精品一区二区在线| 永久久久久久久| 日韩电影在线免费看| 国产一区二区三区黄| 美女羞羞视频在线观看| 91国产福利在线| aaaa黄色片| 国产精品theporn| 91精品国产综合久久久久久久久| 日本国产在线观看| 亚洲精品欧美二区三区中文字幕| 免费无码国产v片在线观看| 天堂av一区| 日韩中文字幕欧美| 波多野结衣一二区| 91麻豆精品秘密| 日韩av在线播放不卡| 欧美特黄不卡| 久久久国产影院| 在线观看免费高清视频| 久久蜜桃香蕉精品一区二区三区| 欧美a级黄色大片| 国产精品成人3p一区二区三区| 在线午夜精品自拍| 青青视频在线免费观看| 成人自拍视频在线| 欧美黄色免费网址| 99热这里只有精品首页| 色综合久久精品亚洲国产| aaa国产视频| 亚洲欧洲综合另类在线| 中文字幕日韩久久| 国产精品二区不卡| 国产精品一二三在线| 国产露出视频在线观看| 在线亚洲高清视频| 人人爽人人爽人人片| 日韩综合一区二区| 日韩欧美精品在线不卡| 日韩av超清在线观看| 亚洲午夜未删减在线观看| 欧产日产国产69| 国产午夜精品一区二区三区视频| 欧美伦理片在线看| 99久久婷婷国产综合精品电影√| 国产精品专区一| 最爽无遮挡行房视频在线| 欧美mv日韩mv国产网站app| 国产一级片视频| 91在线视频观看| 任你操这里只有精品| 日韩精品一卡| 亚洲综合日韩中文字幕v在线| 日本高清在线观看| 亚洲国产精彩中文乱码av在线播放| 六月丁香在线视频| 日本一区二区视频在线| 99九九精品视频| 精品动漫av| 日本不卡一二三区| www.一区| 欧美大片在线看| 日本啊v在线| 欧美日韩精品电影| 久久无码精品丰满人妻| 成人精品鲁一区一区二区| 成人中文字幕在线播放| 成人一区二区| 99视频在线播放| 天天综合网站| 久久99国产精品自在自在app | 加勒比精品视频| 日韩av网站在线观看| 午夜啪啪福利视频| 女人抽搐喷水高潮国产精品| 国产精品久久久久久久久久免费 | 一区二区美女| 国产色婷婷国产综合在线理论片a| 欧美xxxx黑人又粗又长| 亚洲视频777| av免费在线不卡| 欧美在线视频日韩| 久草手机在线观看| 一区二区三区精品视频在线| www久久久久久久| 2019国产精品| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 在线观看日韩av| 日韩电影免费| 亚洲аv电影天堂网| 国产美女主播在线观看| 欧美无砖专区一中文字| 免费看日批视频| 亚洲国产精品尤物yw在线观看| 小泽玛利亚一区二区免费| 久久精品日产第一区二区三区高清版| 911亚洲精选| 国产成人免费视| 超碰91在线播放| 狠狠色丁香久久婷婷综| 天天干天天玩天天操| 日本在线不卡一区| 不要播放器的av网站| 免费在线播放第一区高清av| 天天夜碰日日摸日日澡性色av| 黄色综合网站| 久久这里只有精品23| 欧美三级视频| 成人在线视频一区二区三区| 欧美粗暴jizz性欧美20| 欧美黄色免费网址| 伊人久久大香线蕉av超碰演员| 四虎精品欧美一区二区免费| 亚洲欧美日韩高清在线| 第九区2中文字幕| 欧美激情性爽国产精品17p| 成人手机在线播放| 亚洲性感美女99在线| 日韩黄色片在线| 在线欧美三区| 国产麻花豆剧传媒精品mv在线| 久久久久看片| 手机在线看福利| 久久丁香综合五月国产三级网站| 激情在线观看视频| 粉嫩久久99精品久久久久久夜| 日本美女视频网站| 99久久er热在这里只有精品66| 国产网站无遮挡| 欧美激情在线观看视频免费| 日本免费网站视频| 亚洲免费看黄网站| 国产午夜激情视频| 色诱视频网站一区| 中文字幕一二三四| 欧美一级片在线| 天堂中文字幕av| 国产亚洲精品一区二区| 欧美日韩欧美| 97精品国产97久久久久久免费 | 女尊高h男高潮呻吟| 国产日韩亚洲欧美综合| 北条麻妃在线观看视频| 亚洲专区一二三| 国产视频1区2区| 4438成人网| 亚洲欧美综合一区二区| 日韩最新在线视频| wwww在线观看免费视频| 国产成一区二区| 人人九九精品视频| 欧美一级爽aaaaa大片| 91九色精品| 少妇高潮毛片色欲ava片| 免费精品视频在线| 久久久高清视频| 国产精品色噜噜| 欧美成人aaaaⅴ片在线看| 91传媒视频在线播放| 亚洲av无码国产精品久久不卡| 日韩电影中文字幕在线| 黄色片网站在线| 欧美中在线观看| 日韩高清在线观看一区二区| 欧洲国产精品| 激情综合网址| 99re6在线观看| 91久色porny| 青娱乐国产精品| 欧美色图片你懂的| 婷婷亚洲一区二区三区| 久久天天躁狠狠躁老女人| 欧美片第1页| 国产福利久久精品| 青青草成人影院| 免费 成 人 黄 色| 国产一区亚洲一区| 国产精品av久久久久久无| 欧美日韩国产丝袜美女| 精品人妻一区二区三区日产乱码| 在线视频欧美性高潮| 天堂av中文在线观看| 国产精品国模大尺度私拍| 日韩一区电影| 国产一级片黄色| 99re视频精品| 久久婷婷综合国产| 日韩视频一区二区三区| 免费成人黄色| 国产精品免费电影| 久久不见久久见国语| 日本国产在线播放| 成人精品鲁一区一区二区| 黄色一级片中国| 91精品午夜视频| 1024免费在线视频| 国产精品日韩在线播放| 视频一区在线观看| 国产精品-区区久久久狼| a级精品国产片在线观看| 久久久.www| 日韩免费在线观看| 中文字幕在线观看播放| 91久久嫩草影院一区二区| 午夜精品一区二区三区国产 | 日韩少妇内射免费播放18禁裸乳| 高清视频一区二区| 久久国产一级片| 欧美大片在线观看一区二区| 色黄网站在线观看| 亚洲999一在线观看www| 欧美成人国产| 蜜桃色一区二区三区| 亚洲成av人**亚洲成av**| 欧美在线 | 亚洲| 6080yy精品一区二区三区| 久久精品亚洲成在人线av网址| 五十路熟女丰满大屁股| 99re亚洲国产精品| 中文字幕精品视频在线观看| 亚洲精品自拍第一页| 精品国模一区二区三区| 亚洲韩国在线| 国产在线不卡一区| 国产人妻精品一区二区三区不卡| 日韩色视频在线观看| 免费在线中文字幕| 蜜桃av久久久亚洲精品| 免费人成网站在线观看欧美高清| 五月天色婷婷丁香| 日韩精品专区在线| 在线中文字幕播放| 视频在线一区二区三区| 精品一区二区三区久久| 在线免费观看毛片| 亚洲欧美中文字幕| 国产999精品在线观看| www.av片| 国产欧美中文在线| 国产成人三级一区二区在线观看一 | 国产精品国产亚洲精品看不卡15 | 亚洲国产欧美日韩另类综合| 青青免费在线视频| 国产日韩精品视频| 亚洲国产高清一区二区三区| 无码熟妇人妻av| 6080午夜不卡| 色老头在线一区二区三区| 影音先锋亚洲视频| 成人黄色a**站在线观看| 波多野结衣不卡| 欧美大片免费看| 久操国产精品| 国产精品久久久久野外| 色综合天天视频在线观看| a篇片在线观看网站| 欧美黑人xxxxx| 国产传媒久久文化传媒| 国产一级免费视频| 九九视频直播综合网| 国产精品美女久久久久久不卡| 久久人人爽人人片| 一本到三区不卡视频| 伊人在我在线看导航| 视频在线一区二区三区| 成人免费精品视频| 亚洲性猛交富婆| 91po在线观看91精品国产性色| 无需播放器亚洲| 成人片黄网站色大片免费毛片|