高并發(fā)架構(gòu)系列:Kafka本砰、RocketMQ、RabbitMQ的優(yōu)劣勢(shì)比較

高并發(fā)架構(gòu)系列:Kafka钢悲、RocketMQ点额、RabbitMQ的優(yōu)劣勢(shì)比較

在高并發(fā)業(yè)務(wù)場(chǎng)景下,典型的阿里雙11秒殺等業(yè)務(wù)莺琳,消息隊(duì)列中間件在流量削峰咖楣、解耦上有不可替代的作用。

今天我們一起來探討:

  1. 全量的消息隊(duì)列究竟有哪些芦昔?
  2. Kafka诱贿、RocketMQ、RabbitMQ的優(yōu)劣勢(shì)比較
  3. 以及消息隊(duì)列的選型

最全MQ消息隊(duì)列有哪些

那么目前在業(yè)界有哪些比較知名的消息引擎呢咕缎?如下圖所示

高并發(fā)架構(gòu)系列:最全消息隊(duì)列有哪些珠十?詳解消息隊(duì)列的選型與應(yīng)用

這里面幾乎完全列舉了當(dāng)下比較知名的消息引擎,包括:

  1. ZeroMQ
  2. 推特的Distributedlog
  3. ActiveMQ:Apache旗下的老牌消息引擎
  4. RabbitMQ凭豪、Kafka:AMQP的默認(rèn)實(shí)現(xiàn)焙蹭。
  5. RocketMQ
  6. Artemis:Apache的ActiveMQ下的子項(xiàng)目
  7. Apollo:同樣為Apache的ActiveMQ的子項(xiàng)目的號(hào)稱下一代消息引擎
  8. 商業(yè)化的消息引擎IronMQ
  9. 以及實(shí)現(xiàn)了JMS(Java Message Service)標(biāo)準(zhǔn)的OpenMQ。

MQ消息隊(duì)列的技術(shù)應(yīng)用

高并發(fā)架構(gòu)系列:最全消息隊(duì)列有哪些嫂伞?詳解消息隊(duì)列的選型與應(yīng)用

1.解耦

解耦是消息隊(duì)列要解決的最本質(zhì)問題孔厉。

2.最終一致性

最終一致性指的是兩個(gè)系統(tǒng)的狀態(tài)保持一致,要么都成功帖努,要么都失敗撰豺。

最終一致性不是消息隊(duì)列的必備特性,但確實(shí)可以依靠消息隊(duì)列來做最終一致性的事情拼余。

2.廣播

消息隊(duì)列的基本功能之一是進(jìn)行廣播污桦。

有了消息隊(duì)列,我們只需要關(guān)心消息是否送達(dá)了隊(duì)列匙监,至于誰希望訂閱凡橱,是下游的事情小作,無疑極大地減少了開發(fā)和聯(lián)調(diào)的工作量。

3.錯(cuò)峰與流控

典型的使用場(chǎng)景就是秒殺業(yè)務(wù)用于流量削峰場(chǎng)景稼钩。

由于篇幅的關(guān)系顾稀,本文重點(diǎn)介紹消息隊(duì)列比較,詳細(xì)應(yīng)用場(chǎng)景請(qǐng)參考:什么是流量削峰坝撑?如何解決秒殺業(yè)務(wù)的削峰場(chǎng)景

高并發(fā)架構(gòu)系列:最全消息隊(duì)列有哪些础拨?詳解消息隊(duì)列的選型與應(yīng)用

Kafka、RocketMQ绍载、RabbitMQ比較

高并發(fā)架構(gòu)系列:最全消息隊(duì)列有哪些诡宗?詳解消息隊(duì)列的選型與應(yīng)用

1.ActiveMQ

優(yōu)點(diǎn)

  • 單機(jī)吞吐量:萬級(jí)
  • topic數(shù)量都吞吐量的影響:
  • 時(shí)效性:ms級(jí)
  • 可用性:高,基于主從架構(gòu)實(shí)現(xiàn)高可用性
  • 消息可靠性:有較低的概率丟失數(shù)據(jù)
  • 功能支持:MQ領(lǐng)域的功能極其完備

缺點(diǎn):

官方社區(qū)現(xiàn)在對(duì)ActiveMQ 5.x維護(hù)越來越少击儡,較少在大規(guī)模吞吐的場(chǎng)景中使用塔沃。

2.Kafka

號(hào)稱大數(shù)據(jù)的殺手锏,談到大數(shù)據(jù)領(lǐng)域內(nèi)的消息傳輸阳谍,則繞不開Kafka蛀柴,這款為大數(shù)據(jù)而生的消息中間件,以其百萬級(jí)TPS的吞吐量名聲大噪矫夯,迅速成為大數(shù)據(jù)領(lǐng)域的寵兒鸽疾,在數(shù)據(jù)采集、傳輸训貌、存儲(chǔ)的過程中發(fā)揮著舉足輕重的作用制肮。

Apache Kafka它最初由LinkedIn公司基于獨(dú)特的設(shè)計(jì)實(shí)現(xiàn)為一個(gè)分布式的提交日志系統(tǒng)( a distributed commit log),之后成為Apache項(xiàng)目的一部分递沪。

目前已經(jīng)被LinkedIn豺鼻,Uber, Twitter, Netflix等大公司所采納。

優(yōu)點(diǎn)

  • 性能卓越款慨,單機(jī)寫入TPS約在百萬條/秒儒飒,最大的優(yōu)點(diǎn),就是吞吐量高檩奠。

  • 時(shí)效性:ms級(jí)

  • 可用性:非常高桩了,kafka是分布式的,一個(gè)數(shù)據(jù)多個(gè)副本埠戳,少數(shù)機(jī)器宕機(jī)井誉,不會(huì)丟失數(shù)據(jù),不會(huì)導(dǎo)致不可用

  • 消費(fèi)者采用Pull方式獲取消息, 消息有序, 通過控制能夠保證所有消息被消費(fèi)且僅被消費(fèi)一次;

  • 有優(yōu)秀的第三方Kafka Web管理界面Kafka-Manager乞而;

  • 在日志領(lǐng)域比較成熟送悔,被多家公司和多個(gè)開源項(xiàng)目使用;

  • 功能支持:功能較為簡(jiǎn)單爪模,主要支持簡(jiǎn)單的MQ功能欠啤,在大數(shù)據(jù)領(lǐng)域的實(shí)時(shí)計(jì)算以及日志采集被大規(guī)模使用

缺點(diǎn):

  1. Kafka單機(jī)超過64個(gè)隊(duì)列/分區(qū),Load會(huì)發(fā)生明顯的飆高現(xiàn)象屋灌,隊(duì)列越多洁段,load越高,發(fā)送消息響應(yīng)時(shí)間變長(zhǎng)
  2. 使用短輪詢方式共郭,實(shí)時(shí)性取決于輪詢間隔時(shí)間祠丝;
  3. 消費(fèi)失敗不支持重試;
  4. 支持消息順序除嘹,但是一臺(tái)代理宕機(jī)后写半,就會(huì)產(chǎn)生消息亂序;
  5. 社區(qū)更新較慢尉咕;

3.RabbitMQ

RabbitMQ 2007年發(fā)布叠蝇,是一個(gè)在AMQP(高級(jí)消息隊(duì)列協(xié)議)基礎(chǔ)上完成的,可復(fù)用的企業(yè)消息系統(tǒng)年缎,是當(dāng)前最主流的消息中間件之一悔捶。

RabbitMQ優(yōu)點(diǎn)

  1. 由于erlang語言的特性,mq 性能較好单芜,高并發(fā)蜕该;
  2. 吞吐量到萬級(jí),MQ功能比較完備
  3. 健壯洲鸠、穩(wěn)定堂淡、易用、跨平臺(tái)扒腕、支持多種語言淤齐、文檔齊全;
  4. 開源提供的管理界面非常棒袜匿,用起來很好用
  5. 社區(qū)活躍度高更啄;

RabbitMQ缺點(diǎn):

  1. erlang開發(fā),很難去看懂源碼居灯,基本職能依賴于開源社區(qū)的快速維護(hù)和修復(fù)bug祭务,不利于做二次開發(fā)和維護(hù)。
  2. RabbitMQ確實(shí)吞吐量會(huì)低一些怪嫌,這是因?yàn)樗龅膶?shí)現(xiàn)機(jī)制比較重义锥。
  3. 需要學(xué)習(xí)比較復(fù)雜的接口和協(xié)議,學(xué)習(xí)和維護(hù)成本較高岩灭。

4.RocketMQ

RocketMQ出自 阿里公司的開源產(chǎn)品拌倍,用 Java 語言實(shí)現(xiàn),在設(shè)計(jì)時(shí)參考了 Kafka,并做出了自己的一些改進(jìn)柱恤。

RocketMQ在阿里集團(tuán)被廣泛應(yīng)用在訂單数初,交易,充值梗顺,流計(jì)算泡孩,消息推送,日志流式處理寺谤,binglog分發(fā)等場(chǎng)景仑鸥。

RocketMQ優(yōu)點(diǎn):

  1. 單機(jī)吞吐量:十萬級(jí)
  2. 可用性:非常高,分布式架構(gòu)
  3. 消息可靠性:經(jīng)過參數(shù)優(yōu)化配置变屁,消息可以做到0丟失
  4. 功能支持:MQ功能較為完善眼俊,還是分布式的,擴(kuò)展性好
  5. 支持10億級(jí)別的消息堆積粟关,不會(huì)因?yàn)槎逊e導(dǎo)致性能下降
  6. 源碼是java疮胖,我們可以自己閱讀源碼,定制自己公司的MQ誊役,可以掌控

RocketMQ缺點(diǎn):

  1. 支持的客戶端語言不多获列,目前是java及c++,其中c++不成熟蛔垢;
  2. 社區(qū)活躍度一般
  3. 沒有在 mq 核心中去實(shí)現(xiàn)JMS等接口击孩,有些系統(tǒng)要遷移需要修改大量代碼

消息隊(duì)列選擇建議

1.Kafka

Kafka主要特點(diǎn)是基于Pull的模式來處理消息消費(fèi),追求高吞吐量鹏漆,一開始的目的就是用于日志收集和傳輸巩梢,適合產(chǎn)生大量數(shù)據(jù)的互聯(lián)網(wǎng)服務(wù)的數(shù)據(jù)收集業(yè)務(wù)。

大型公司建議可以選用艺玲,如果有日志采集功能括蝠,肯定是首選kafka了。

2.RocketMQ

天生為金融互聯(lián)網(wǎng)領(lǐng)域而生饭聚,對(duì)于可靠性要求很高的場(chǎng)景忌警,尤其是電商里面的訂單扣款,以及業(yè)務(wù)削峰秒梳,在大量交易涌入時(shí)法绵,后端可能無法及時(shí)處理的情況。

RoketMQ在穩(wěn)定性上可能更值得信賴酪碘,這些業(yè)務(wù)場(chǎng)景在阿里雙11已經(jīng)經(jīng)歷了多次考驗(yàn)朋譬,如果你的業(yè)務(wù)有上述并發(fā)場(chǎng)景,建議可以選擇RocketMQ兴垦。

3.RabbitMQ

RabbitMQ :結(jié)合erlang語言本身的并發(fā)優(yōu)勢(shì)徙赢,性能較好字柠,社區(qū)活躍度也比較高,但是不利于做二次開發(fā)和維護(hù)狡赐。不過窑业,RabbitMQ的社區(qū)十分活躍,可以解決開發(fā)過程中遇到的bug阴汇。

如果你的數(shù)據(jù)量沒有那么大数冬,小公司優(yōu)先選擇功能比較完備的RabbitMQ节槐。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末搀庶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铜异,更是在濱河造成了極大的恐慌哥倔,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揍庄,死亡現(xiàn)場(chǎng)離奇詭異咆蒿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蚂子,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門沃测,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人食茎,你說我怎么就攤上這事蒂破。” “怎么了别渔?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵附迷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我哎媚,道長(zhǎng)喇伯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任拨与,我火速辦了婚禮稻据,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘买喧。我一直安慰自己捻悯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布岗喉。 她就那樣靜靜地躺著秋度,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钱床。 梳的紋絲不亂的頭發(fā)上荚斯,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼事期。 笑死滥壕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的兽泣。 我是一名探鬼主播绎橘,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼唠倦!你這毒婦竟也來了称鳞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤稠鼻,失蹤者是張志新(化名)和其女友劉穎冈止,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體候齿,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熙暴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慌盯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片周霉。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖亚皂,靈堂內(nèi)的尸體忽然破棺而出俱箱,到底是詐尸還是另有隱情,我是刑警寧澤孕讳,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布匠楚,位于F島的核電站,受9級(jí)特大地震影響厂财,放射性物質(zhì)發(fā)生泄漏芋簿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一璃饱、第九天 我趴在偏房一處隱蔽的房頂上張望与斤。 院中可真熱鬧,春花似錦荚恶、人聲如沸撩穿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽食寡。三九已至,卻和暖如春廓潜,著一層夾襖步出監(jiān)牢的瞬間抵皱,已是汗流浹背善榛。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呻畸,地道東北人移盆。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像伤为,于是被迫代替她去往敵國(guó)和親咒循。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容