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

每次都碰到面試官問我如何保證Kafka不丟失消息,快哭了

云計算 Kafka
這篇文章,我們來聊聊在線上生產(chǎn)環(huán)境使用消息中間件技術(shù)的時候,從前到后的全鏈路到底如何保證數(shù)據(jù)不能丟失。

一、背景引入

這篇文章,我們來聊聊在線上生產(chǎn)環(huán)境使用消息中間件技術(shù)的時候,從前到后的全鏈路到底如何保證數(shù)據(jù)不能丟失。

這個問題,在互聯(lián)網(wǎng)公司面試的時候高頻出現(xiàn),而且也是非常現(xiàn)實的生產(chǎn)環(huán)境問題。

如果你的簡歷中寫了自己熟悉MQ技術(shù)(RabbitMQ、RocketMQ、Kafka),而且在項目里有使用的經(jīng)驗,那么非常實際的一個生產(chǎn)環(huán)境問題就是:投遞消息到MQ,然后從MQ消費消息來處理的這個過程,數(shù)據(jù)到底會不會丟失。

面試官此時會問:如果數(shù)據(jù)會丟失的話,你們項目生產(chǎn)部署的時候,是通過什么手段保證基于MQ傳輸?shù)臄?shù)據(jù)100%不會丟失的?麻煩結(jié)合你們線上使用的消息中間件來具體說說你們的技術(shù)方案。

這個其實就是非常區(qū)分面試候選人技術(shù)水平的一個問題。

實際上相當大比例的普通工程師,哪怕是在一些中小型互聯(lián)網(wǎng)公司里工作過的,也就是基于公司部署的MQ集群簡單的使用一下罷了,可能代碼層面就是基本的發(fā)送消息和消費消息,基本沒考慮太多的技術(shù)方案。

但是實際上,對于MQ、緩存、分庫分表、NoSQL等各式各類的技術(shù)以及中間件在使用的時候,都會有對應(yīng)技術(shù)相關(guān)的一堆生產(chǎn)環(huán)境問題。

那么針對這些問題,就必須要有相對應(yīng)的一整套技術(shù)方案來保證系統(tǒng)的健壯性、穩(wěn)定性以及高可用性。

所以其實中大型互聯(lián)網(wǎng)公司的面試官在面試候選人的時候,如果考察對MQ相關(guān)技術(shù)的經(jīng)驗和掌握程度,十有八九都會拋出這個使用MQ時一定會涉及的數(shù)據(jù)丟失問題。因為這個問題,能夠非常好的區(qū)分候選人的技術(shù)水平。

所以這篇文章,我們就來具體聊聊基于RabbitMQ這種消息中間件的背景下,從投遞消息到MQ,到從MQ消費消息出來,這個過程中有哪些數(shù)據(jù)丟失的風險和可能。

然后我們再一起來看看,應(yīng)該如何結(jié)合MQ自身提供的一些技術(shù)特性來保證數(shù)據(jù)不丟失?

二、目前已有的技術(shù)方案

經(jīng)過之前幾篇文章的討論,目前我們已經(jīng)初步知道,第一個會導致數(shù)據(jù)丟失的地方,就是消費者獲取到消息之后,沒有來得及處理完畢,自己直接宕機了。

此時RabbitMQ的自動ack機制會通知MQ集群這條消息已經(jīng)處理好了,MQ集群就會刪除這條消息。

那么這條消息不就丟失了么?不會有任何一個消費者處理到這條消息了。

所以之前我們詳細討論過,通過在消費者服務(wù)中調(diào)整為手動ack機制,來確保消息一定是已經(jīng)成功處理完了,才會發(fā)送ack通知給MQ集群。

否則沒發(fā)送ack之前消費者服務(wù)宕機,此時MQ集群會自動感知到,然后重發(fā)消息給其他的消費者服務(wù)實例。

手動ack機制之下的架構(gòu)圖如下所示:

當時除了這個數(shù)據(jù)丟失問題之外,還有另外一個問題,就是MQ集群自身如果突然宕機,是不是會導致數(shù)據(jù)丟失?

默認情況下是肯定會的,因為queue和message都沒采用持久化的方式來投遞,所以MQ集群重啟會導致部分數(shù)據(jù)丟失。

此時如果消息還沒來得及投遞給消費者服務(wù),然后MQ集群突然宕機了,數(shù)據(jù)是不會丟失的,因為MQ集群重啟之后會自動從磁盤文件里加載出來沒投遞出去的消息,然后繼續(xù)投遞給消費者服務(wù)。

同樣,該方案沉淀下來的系統(tǒng)架構(gòu)圖,如下所示:

三、數(shù)據(jù)100%不丟失了嗎?

大家想一想,到目前為止,咱們的架構(gòu)一定可以保證數(shù)據(jù)不丟失了嗎?

其實,現(xiàn)在的架構(gòu),還是有一個數(shù)據(jù)可能會丟失的問題。

那就是上面作為生產(chǎn)者的訂單服務(wù)把消息投遞到MQ集群之后,暫時還駐留在MQ的內(nèi)存里,還沒來得及持久化到磁盤上,同時也還沒來得及投遞到作為消費者的倉儲服務(wù)。

此時要是MQ集群自身突然宕機,咋辦呢?

尷尬了吧,駐留在內(nèi)存里的數(shù)據(jù)是一定會丟失的,我們來看看下面的圖示。

四、按需制定技術(shù)方案

現(xiàn)在,我們需要考慮的技術(shù)方案是:訂單服務(wù)如何保證消息一定已經(jīng)持久化到磁盤?

實際上,作為生產(chǎn)者的訂單服務(wù)把消息投遞到MQ集群的過程是很容易丟數(shù)據(jù)的。

比如說網(wǎng)絡(luò)出了點什么故障,數(shù)據(jù)壓根兒沒傳輸過去,或者就是上面說的消息剛剛被MQ接收但是還駐留在內(nèi)存里,沒落地到磁盤上,此時MQ集群宕機就會丟數(shù)據(jù)。

所以首先,我們得考慮一下作為生產(chǎn)者的訂單服務(wù)要如何利用RabbitMQ提供的相關(guān)功能來實現(xiàn)一個技術(shù)方案。

這個技術(shù)方案需要保證:只要訂單服務(wù)發(fā)送出去的消息確認成功了,此時MQ集群就一定已經(jīng)將消息持久化到磁盤了。

我們必須實現(xiàn)這樣的一個效果,才能保證投遞到MQ集群的數(shù)據(jù)是不會丟失的。

五、需要研究的技術(shù)細節(jié)

這里我們需要研究的技術(shù)細節(jié)是:倉儲服務(wù)手動ack保證數(shù)據(jù)不丟失的實現(xiàn)原理。

之前,筆者就收到很多同學提問:

  • 倉儲服務(wù)那塊到底是如何基于手動ack就可以實現(xiàn)數(shù)據(jù)不丟失的?
  • RabbitMQ底層實現(xiàn)的細節(jié)和原理到底是什么?
  • 為什么倉儲服務(wù)沒發(fā)送ack就宕機了,RabbitMQ可以自動感知到他宕機了,然后自動重發(fā)消息給其他的倉儲服務(wù)實例呢?

這些東西背后的實現(xiàn)原理和底層細節(jié),到底是什么?

責任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2021-10-22 08:37:13

消息不丟失rocketmq消息隊列

2024-06-18 08:26:22

2024-08-06 09:55:25

2020-12-31 07:34:04

Redis數(shù)據(jù)宕機

2021-05-20 08:54:16

Go面向對象

2021-08-04 07:47:18

Kafka消息框架

2021-12-02 08:19:06

MVCC面試數(shù)據(jù)庫

2023-09-01 15:27:31

2024-02-28 10:14:47

Redis數(shù)據(jù)硬盤

2021-09-13 07:23:53

KafkaGo語言

2023-06-05 07:57:53

Kafka消息事務(wù)消息

2021-03-08 10:19:59

MQ消息磁盤

2024-06-06 11:38:55

2019-03-13 09:27:57

宕機Kafka數(shù)據(jù)

2023-01-14 17:36:39

微服務(wù)注冊中心數(shù)據(jù)

2021-12-21 07:07:43

HashSet元素數(shù)量

2020-04-16 08:22:11

HTTPS加解密協(xié)議

2010-08-23 15:06:52

發(fā)問

2022-05-24 08:03:28

InnoDBMySQL數(shù)據(jù)

2024-02-26 08:10:00

Redis數(shù)據(jù)數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 超黄毛片 | 久久精品视频在线免费观看 | 欧美日韩在线一区二区三区 | 国产一区日韩在线 | 美女二区| 久久亚洲一区二区 | 99成人 | 成av在线 | 亚洲精品二区 | 黄网站在线播放 | 亚洲国产一区在线 | 亚洲一区毛片 | 亚洲激情在线视频 | 福利视频网站 | 一级片网址 | 精品一二三区在线观看 | www.日韩av.com| 青春草在线 | 亚洲精品久久久久avwww潮水 | 欧美影院 | 中文字幕在线免费 | 一级全黄少妇性色生活免费看 | 91视频网址 | 免费麻豆视频 | 热re99久久精品国99热观看 | 97久久久久久 | 人人99| 欧美一区二区在线 | 91精品久久久久久久久久入口 | 久久一区二区三区四区五区 | 久久久精品一区二区三区 | 亚洲xxxxx| 欧美日韩在线播放 | 99精品网 | 亚洲日本中文字幕在线 | 欧美影院久久 | 中文字幕人成乱码在线观看 | 日韩精品一区二区三区四区视频 | 岛国毛片 | 日日淫 | 日韩国产一区二区 |