AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

阿里二面:要保證消息不丟失,又不重復,消息隊列怎么選型?

來源: 責編: 時間:2024-01-16 10:14:42 239觀看
導讀大家好,我是君哥。在使用消息隊列時,有兩個經常讓我們煩惱的問題,消息丟失和消息重復。那我們在做技術選型時,有沒有一個消息隊列能解決消息丟失和消息重復這兩個問題呢?消息丟失如上圖,從生產者發(fā)送消息,Broker 保存消息,消

GK728資訊網(wǎng)——每日最新資訊28at.com

大家好,我是君哥。GK728資訊網(wǎng)——每日最新資訊28at.com

在使用消息隊列時,有兩個經常讓我們煩惱的問題,消息丟失和消息重復。那我們在做技術選型時,有沒有一個消息隊列能解決消息丟失和消息重復這兩個問題呢?GK728資訊網(wǎng)——每日最新資訊28at.com

消息丟失

GK728資訊網(wǎng)——每日最新資訊28at.com

如上圖,從生產者發(fā)送消息,Broker 保存消息,消費者消費消息,每一個環(huán)節(jié)都有可能丟失消息。GK728資訊網(wǎng)——每日最新資訊28at.com

發(fā)送丟失

生產者發(fā)送消息時,如果處理不當,很可能會造成消息丟失。GK728資訊網(wǎng)——每日最新資訊28at.com

生產者發(fā)送消息,主流消息隊列都支持同步發(fā)送和異步發(fā)送。如果使用同步發(fā)送,生產者發(fā)送消息后,會同步等待 Broker 返回的 ACK,收到 ACK 消息,就認為消息發(fā)送成功。如果長時間沒有收到,則會認為消息發(fā)送失敗,需要進行重試。GK728資訊網(wǎng)——每日最新資訊28at.com

同步發(fā)送可以保證消息不丟失,但是會有性能問題,所以多數(shù)情況會選擇異步發(fā)送。異步發(fā)送如何保證消息不丟失呢?主流消息隊列(比如 Kafka 和 RocketMQ)實現(xiàn)方法基本類似,使用回調函數(shù)來實現(xiàn)。下面看一下 Kafka 的異步發(fā)送代碼:GK728資訊網(wǎng)——每日最新資訊28at.com

producer.send(record, new Callback() { public void onCompletion(RecordMetadata metadata, Exception exception) { if (exception != null) {  logger.error("發(fā)送消息失敗:", exception); } if (metadata != null) {     logger.info("消息發(fā)送成功");  } }});

消息存儲

生產者發(fā)送消息成功,也不能保證消息絕對不丟失。因為即使消息發(fā)送到 Broker,如果在消費者拉取到消息之前,Broker 宕機了,消息還沒有落盤,也會導致消息丟失。GK728資訊網(wǎng)——每日最新資訊28at.com

在存儲階段要保證消息不丟失,可以考慮幾個方面:GK728資訊網(wǎng)——每日最新資訊28at.com

同步刷盤

采用異步刷盤,如果在消息落盤之前 Broker 宕機了,就會造成消息丟失。而采用同步刷盤,等待消息落盤之后,再給 Sender 返回發(fā)送成功,可以從消息發(fā)送環(huán)節(jié)保證消息不丟失。GK728資訊網(wǎng)——每日最新資訊28at.com

GK728資訊網(wǎng)——每日最新資訊28at.com

在 RocketMQ 中,把 flushDiskType 參數(shù)配置為 SYNC_FLUSH 就可以開啟同步刷盤。GK728資訊網(wǎng)——每日最新資訊28at.com

Broker 集群

如果 Broker 集群中只有一個節(jié)點,即使消息落盤成功了,Broker 發(fā)送故障,在 Broker 恢復以前消費者也會拉取不到消息。而且如果 Broker 磁盤故障不可恢復,消息也會丟失。GK728資訊網(wǎng)——每日最新資訊28at.com

采用 Broker 集群可以很好地解決這個問題。見下圖:GK728資訊網(wǎng)——每日最新資訊28at.com

GK728資訊網(wǎng)——每日最新資訊28at.com

在 Broker 集群時,可以等待 2 個以上的節(jié)點同步消息完成后再給 Producer 返回成功。這樣即使一個 Broker 掛了,也可以很容易找到替代的 Broker。GK728資訊網(wǎng)——每日最新資訊28at.com

消息消費

消費者保證不丟失消息,需要消費完成后再給 Broker 返回 ACK。在主流的消息隊列中,如果 Broker 收不到 ACK,都會給消費者再次發(fā)送這條消息。GK728資訊網(wǎng)——每日最新資訊28at.com

有時候為了解決消息積壓的問題,消費者拉取到消息后會直接返回 ACK,然后再異步執(zhí)行消息處理邏輯。這樣要保證消息不丟失,需要在返回 ACK 之前把消息保存到本地,比如持久化到數(shù)據(jù)庫,后面可以取數(shù)據(jù)庫保存的消息進行處理。GK728資訊網(wǎng)——每日最新資訊28at.com

消息重復

消息重復一般有兩個原因,一個是生產者發(fā)送消息后沒有收到 ACK,然后進行重復發(fā)送,另一個原因是消費者消費完成后 Broker 沒有收到 ACK,導致消息重復推送給消費者。GK728資訊網(wǎng)——每日最新資訊28at.com

重復消息會對業(yè)務造成影響,比如電商場景中的重復支付、賬務場景中的重復記賬,對業(yè)務造成的影響都比較嚴重。GK728資訊網(wǎng)——每日最新資訊28at.com

從目前主流的消息隊列來看,并沒有一個消息隊列能解決消息重復消費的問題,只能在消費端做冪等處理。下面提供幾個思路作為參考。GK728資訊網(wǎng)——每日最新資訊28at.com

數(shù)據(jù)庫唯一鍵約束

如果消息會落本地數(shù)據(jù)庫,可以采用消息 ID 作為唯一鍵。如果消息不落數(shù)據(jù)庫,可以將消息 ID 或者消息中其他唯一能標識消息的屬性作為唯一鍵落業(yè)務數(shù)據(jù)表。GK728資訊網(wǎng)——每日最新資訊28at.com

保存消費記錄

我們也可以將消息 ID 保存 Redis,消費消息前判斷消息 ID 是否已存在。GK728資訊網(wǎng)——每日最新資訊28at.com

ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();Boolean result = valueOperations.setIfAbsent(messageId, messageId);if (result) { //消費邏輯;} else { logger.error("這條消息已經消費,跳過,消息ID:{}", messageId);}

這里有一個注意點,如果消費失敗了,需要刪除 Redis 中保存的消息 ID。GK728資訊網(wǎng)——每日最新資訊28at.com

總結

消息不丟失、不重復是消息隊列的基本要求,但這個基本要求還是很難滿足的。GK728資訊網(wǎng)——每日最新資訊28at.com

消息丟失這個要求,主流消息隊列通過消息重試和消息持久化的方式可以滿足。GK728資訊網(wǎng)——每日最新資訊28at.com

但消息重試也同時帶來了消息重復的可能性,主流消息隊列在解決重復消息的問題上并沒有現(xiàn)成的方案,對不允許重復消費的場景,需要開發(fā)人員在消費端做冪等處理。GK728資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-62355-0.html阿里二面:要保證消息不丟失,又不重復,消息隊列怎么選型?

聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 部署過Vue項目嗎?遇到404如何解決?

下一篇: Android開發(fā)之漸變色,你學會了嗎?

標簽:
  • 熱門焦點
  • 俄羅斯:將審查iPhone等外國公司設備 保數(shù)據(jù)安全

    iPhone和特斯拉都屬于在各自領域領頭羊的品牌,推出的產品也也都是數(shù)一數(shù)二的,但對于一些國家而言,它們的產品可靠性和安全性還是在限制范圍內。近日,俄羅斯聯(lián)邦通信、信息技術
  • 小米官宣:2023年上半年出貨量中國第一!

    今日早間,小米電視官方微博帶來消息,稱2023年小米電視上半年出貨量達到了中國第一,同時還表示小米電視的巨屏風暴即將開始。“公布一個好消息2023年#小米電視上半年出貨量中國
  • 0糖0卡0脂 旭日森林仙草烏龍茶優(yōu)惠:15瓶到手29元

    旭日森林無糖仙草烏龍茶510ml*15瓶平時要賣為79.9元,今日下單領取50元優(yōu)惠券,到手價為29.9元。產品規(guī)格:0糖0卡0脂,添加草本仙草汁,清涼爽口,富含茶多酚,保留
  • 把LangChain跑起來的三個方法

    使用LangChain開發(fā)LLM應用時,需要機器進行GLM部署,好多同學第一步就被勸退了,那么如何繞過這個步驟先學習LLM模型的應用,對Langchain進行快速上手?本片講解3個把LangChain跑起來
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數(shù)據(jù)的地方,是數(shù)據(jù)源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數(shù)據(jù),它既可以保
  • 新電商三兄弟,“抖快紅”成團!

    來源:價值研究所作 者:Hernanderz 隨著內容電商的概念興起,抖音、快手、小紅書組成的&ldquo;新電商三兄弟&rdquo;成為業(yè)內一股不可忽視的勢力,給阿里、京東、拼多多帶去了巨大壓
  • 認真聊聊東方甄選:如何告別低垂的果實

    來源:山核桃作者:財經無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關心的&ldquo;網(wǎng)紅&rdquo;。7月5日至9日,為期5天的東方甄選&ldquo;甘肅行&rdquo;首次在自有App內直播,
  • 華為和江淮汽車合作開發(fā)百萬元問界MPV?雙方回應來了

    8月1日消息,郭明錤今天在社交平臺發(fā)文稱,華為正在和江淮汽車合作,開發(fā)售價在100萬元的問界MPV,預計在2024年第2季度量產,銷量目標為上市首年交付5萬輛。
  • 三星推出Galaxy Tab S9系列平板電腦以及Galaxy Watch6系列智能手表

    2023年7月26日,三星電子正式發(fā)布了Galaxy Z Flip5與Galaxy Z Fold5。除此之外,Galaxy Tab S9系列平板電腦以及三星Galaxy Watch6系列智能手表也同期
Top