摘要:能不能支持?jǐn)?shù)據(jù)丟失啊可以的,參考我們之前說(shuō)的那個(gè)數(shù)據(jù)零丟失方案其實(shí)一個(gè)肯定是很復(fù)雜的,其實(shí)這是個(gè)開(kāi)放題,就是看看你有沒(méi)有從架構(gòu)角度整體構(gòu)思和設(shè)計(jì)的思維以及能力。
其實(shí)回答這類(lèi)問(wèn)題,說(shuō)白了,起碼不求你看過(guò)那技術(shù)的源碼,起碼你大概知道那個(gè)技術(shù)的基本原理,核心組成部分,基本架構(gòu)構(gòu)成,然后參照一些開(kāi)源的技術(shù)把一個(gè)系統(tǒng)設(shè)計(jì)出來(lái)的思路說(shuō)一下就好
比如說(shuō)這個(gè)消息隊(duì)列系統(tǒng),我們來(lái)從以下幾個(gè)角度來(lái)考慮一下
(1)首先這個(gè)mq得支持可伸縮性吧,就是需要的時(shí)候快速擴(kuò)容,就可以增加吞吐量和容量,那怎么搞?設(shè)計(jì)個(gè)分布式的系統(tǒng)唄,參照一下kafka的設(shè)計(jì)理念,broker -> topic -> partition,每個(gè)partition放一個(gè)機(jī)器,就存一部分?jǐn)?shù)據(jù)。如果現(xiàn)在資源不夠了,簡(jiǎn)單啊,給topic增加partition,然后做數(shù)據(jù)遷移,增加機(jī)器,不就可以存放更多數(shù)據(jù),提供更高的吞吐量了?
(2)其次你得考慮一下這個(gè)mq的數(shù)據(jù)要不要落地磁盤(pán)吧?那肯定要了,落磁盤(pán),才能保證別進(jìn)程掛了數(shù)據(jù)就丟了。那落磁盤(pán)的時(shí)候怎么落啊?順序?qū)懀@樣就沒(méi)有磁盤(pán)隨機(jī)讀寫(xiě)的尋址開(kāi)銷(xiāo),磁盤(pán)順序讀寫(xiě)的性能是很高的,這就是kafka的思路。
(3)其次你考慮一下你的mq的可用性啊?這個(gè)事兒,具體參考我們之前可用性那個(gè)環(huán)節(jié)講解的kafka的高可用保障機(jī)制。多副本 -> leader & follower -> broker掛了重新選舉leader即可對(duì)外服務(wù)。
(4)能不能支持?jǐn)?shù)據(jù)0丟失啊?可以的,參考我們之前說(shuō)的那個(gè)kafka數(shù)據(jù)零丟失方案
其實(shí)一個(gè)mq肯定是很復(fù)雜的,其實(shí)這是個(gè)開(kāi)放題,就是看看你有沒(méi)有從架構(gòu)角度整體構(gòu)思和設(shè)計(jì)的思維以及能力。
如果你還不清楚,請(qǐng)參考前面幾篇
《消息隊(duì)列的用途、優(yōu)缺點(diǎn)、技術(shù)選型》
《如何保證消息隊(duì)列的高可用》
《如何保證消息不重復(fù)消費(fèi)》
《如何防止數(shù)據(jù)隊(duì)列數(shù)據(jù)丟失》
《如何保證消息按順序執(zhí)行》
《消息積壓在消息隊(duì)列里怎么辦》
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/7305.html
摘要:緊接著征用倍的機(jī)器來(lái)部署,每一批消費(fèi)一個(gè)臨時(shí)的消息。這種做法相當(dāng)于臨時(shí)將資源和資源擴(kuò)大倍,以正常速度的倍來(lái)消費(fèi)消息。解決方案這種情況下,實(shí)際上沒(méi)有什么消息擠壓,而是丟了大量的消息。 1.大量消息在mq里積壓了幾個(gè)小時(shí)了還沒(méi)解決 場(chǎng)景: 幾千萬(wàn)條數(shù)據(jù)在MQ里積壓了七八個(gè)小時(shí),從下午4點(diǎn)多,積壓到了晚上很晚,10點(diǎn)多,11點(diǎn)多。線上故障了,這個(gè)時(shí)候要不然就是修復(fù)consumer的問(wèn)題,讓他恢復(fù)消...
摘要:數(shù)量對(duì)吞吐量的影響可以達(dá)到幾百幾千個(gè)的級(jí)別,吞吐量會(huì)有小幅度的下降。這是的一大優(yōu)勢(shì),可在同等數(shù)量機(jī)器下支撐大量的從幾十個(gè)到幾百個(gè)的時(shí)候,吞吐量會(huì)大幅下降。下一篇如何保證消息隊(duì)列的高可用 1.為什么使用消息隊(duì)列? (1)解耦:可以在多個(gè)系統(tǒng)之間進(jìn)行解耦,將原本通過(guò)網(wǎng)絡(luò)之間的調(diào)用的方式改為使用MQ進(jìn)行消息的異步通訊,只要該操作不是需要同步的,就可以改為使用MQ進(jìn)行不同系統(tǒng)之間的聯(lián)系,這樣項(xiàng)目之間...
摘要:一個(gè)對(duì)應(yīng)一個(gè),但是里面進(jìn)行了多線程消費(fèi),這樣也會(huì)造成消息消費(fèi)順序錯(cuò)誤。保證消息的消費(fèi)順序拆分多個(gè),每個(gè)一個(gè),就是多一些而已,確實(shí)是麻煩點(diǎn)這樣也會(huì)造成吞吐量下降,可以在消費(fèi)者內(nèi)部采用多線程的方式取消費(fèi)。 1.為什么要保證順序 消息隊(duì)列中的若干消息如果是對(duì)同一個(gè)數(shù)據(jù)進(jìn)行操作,這些操作具有前后的關(guān)系,必須要按前后的順序執(zhí)行,否則就會(huì)造成數(shù)據(jù)異常。舉例: 比如通過(guò)mysql binlog進(jìn)行兩個(gè)數(shù)據(jù)...
摘要:消費(fèi)端弄丟了數(shù)據(jù)關(guān)閉自動(dòng)提交,在自己處理完畢之后手動(dòng)提交,這樣就不會(huì)丟失數(shù)據(jù)。弄丟了數(shù)據(jù)一般要求設(shè)置個(gè)參數(shù)來(lái)保證消息不丟失給設(shè)置參數(shù)這個(gè)值必須大于,表示要求每個(gè)必須至少有個(gè)副本。上一篇如何保證消息不重復(fù)消費(fèi)下一篇如何保證消息按順序執(zhí)行 1.mq原則 數(shù)據(jù)不能多,也不能少,不能多是說(shuō)消息不能重復(fù)消費(fèi),這個(gè)我們上一節(jié)已解決;不能少,就是說(shuō)不能丟失數(shù)據(jù)。如果mq傳遞的是非常核心的消息,支撐核心的業(yè)...
摘要:以下為大家整理了阿里巴巴史上最全的面試題,涉及大量面試知識(shí)點(diǎn)和相關(guān)試題。的內(nèi)存結(jié)構(gòu),和比例。多線程多線程的幾種實(shí)現(xiàn)方式,什么是線程安全。點(diǎn)擊這里有一套答案版的多線程試題。線上系統(tǒng)突然變得異常緩慢,你如何查找問(wèn)題。 以下為大家整理了阿里巴巴史上最全的 Java 面試題,涉及大量 Java 面試知識(shí)點(diǎn)和相關(guān)試題。 JAVA基礎(chǔ) JAVA中的幾種基本數(shù)據(jù)類(lèi)型是什么,各自占用多少字節(jié)。 S...
閱讀 3455·2023-04-26 02:31
閱讀 3621·2021-11-23 09:51
閱讀 1286·2021-11-17 09:33
閱讀 2435·2021-11-16 11:45
閱讀 2566·2021-10-11 11:12
閱讀 2406·2021-09-22 15:22
閱讀 2712·2021-09-04 16:40
閱讀 2568·2021-07-30 15:30