1. Kafka、RabbitMQ、RocketMQ等消息中間件的對(duì)比

        共 8285字,需瀏覽 17分鐘

         ·

        2021-02-23 10:57

        點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

        優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

        76套java從入門到精通實(shí)戰(zhàn)課程分享

        消息中間件現(xiàn)在有不少,網(wǎng)上很多文章都對(duì)其做過(guò)對(duì)比,在這我對(duì)其做進(jìn)一步總結(jié)與整理。

        RocketMQ

        淘寶內(nèi)部的交易系統(tǒng)使用了淘寶自主研發(fā)的Notify消息中間件,使用Mysql作為消息存儲(chǔ)媒介,可完全水平擴(kuò)容,為了進(jìn)一步降低成本,我們認(rèn)為存儲(chǔ)部分可以進(jìn)一步優(yōu)化,2011年初,Linkin開源了Kafka這個(gè)優(yōu)秀的消息中間件,淘寶中間件團(tuán)隊(duì)在對(duì)Kafka做過(guò)充分Review之后,Kafka無(wú)限消息堆積,高效的持久化速度吸引了我們,但是同時(shí)發(fā)現(xiàn)這個(gè)消息系統(tǒng)主要定位于日志傳輸,對(duì)于使用在淘寶交易、訂單、充值等場(chǎng)景下還有諸多特性不滿足,為此我們重新用Java語(yǔ)言編寫了RocketMQ,定位于非日志的可靠消息傳輸(日志場(chǎng)景也OK),目前RocketMQ在阿里集團(tuán)被廣泛應(yīng)用在訂單,交易,充值,流計(jì)算,消息推送,日志流式處理,binglog分發(fā)等場(chǎng)景。

        Kafka

        Kafka是LinkedIn開源的分布式發(fā)布-訂閱消息系統(tǒng),目前歸屬于Apache定級(jí)項(xiàng)目。Kafka主要特點(diǎn)是基于Pull的模式來(lái)處理消息消費(fèi),追求高吞吐量,一開始的目的就是用于日志收集和傳輸。0.8版本開始支持復(fù)制,不支持事務(wù),對(duì)消息的重復(fù)、丟失、錯(cuò)誤沒有嚴(yán)格要求,適合產(chǎn)生大量數(shù)據(jù)的互聯(lián)網(wǎng)服務(wù)的數(shù)據(jù)收集業(yè)務(wù)。

        RabbitMQ

        RabbitMQ是使用Erlang語(yǔ)言開發(fā)的開源消息隊(duì)列系統(tǒng),基于AMQP協(xié)議來(lái)實(shí)現(xiàn)。AMQP的主要特征是面向消息、隊(duì)列、路由(包括點(diǎn)對(duì)點(diǎn)和發(fā)布/訂閱)、可靠性、安全。AMQP協(xié)議更多用在企業(yè)系統(tǒng)內(nèi),對(duì)數(shù)據(jù)一致性、穩(wěn)定性和可靠性要求很高的場(chǎng)景,對(duì)性能和吞吐量的要求還在其次。

        有關(guān)測(cè)試結(jié)論

        Kafka的吞吐量高達(dá)17.3w/s,不愧是高吞吐量消息中間件的行業(yè)老大。這主要取決于它的隊(duì)列模式保證了寫磁盤的過(guò)程是線性IO。此時(shí)broker磁盤IO已達(dá)瓶頸。

        RocketMQ也表現(xiàn)不俗,吞吐量在11.6w/s,磁盤IO %util已接近100%。RocketMQ的消息寫入內(nèi)存后即返回ack,由單獨(dú)的線程專門做刷盤的操作,所有的消息均是順序?qū)懳募?/span>

        RabbitMQ的吞吐量5.95w/s,CPU資源消耗較高。它支持AMQP協(xié)議,實(shí)現(xiàn)非常重量級(jí),為了保證消息的可靠性在吞吐量上做了取舍。我們還做了RabbitMQ在消息持久化場(chǎng)景下的性能測(cè)試,吞吐量在2.6w/s左右。

        在服務(wù)端處理同步發(fā)送的性能上,Kafka>RocketMQ>RabbitMQ。

        對(duì)比了最簡(jiǎn)單的小消息發(fā)送場(chǎng)景,Kafka暫時(shí)勝出。但是,作為經(jīng)受過(guò)歷次雙十一洗禮的RocketMQ,在互聯(lián)網(wǎng)應(yīng)用場(chǎng)景中更有它優(yōu)越的一面。

        阿里官網(wǎng)對(duì)比

        功能消息隊(duì)列 RocketMQApache RocketMQ
        (開源)
        消息隊(duì)列 KafkaApache Kafka
        (開源)
        RabbitMQ
        (開源)
        安全防護(hù)支持不支持支持不支持支持
        主子賬號(hào)支持支持不支持支持不支持不支持
        可靠性- 同步刷盤?
        - 同步雙寫?
        - 超3份數(shù)據(jù)副本?
        - 99.99999999%
        - 同步刷盤
        - 異步刷盤
        - 同步刷盤?
        - 同步雙寫?
        - 超3份數(shù)據(jù)副本?
        - 99.99999999%
        異步刷盤,丟數(shù)據(jù)概率高同步刷盤
        可用性- 非常好,99.95%
        - Always Writable
        - 非常好,99.95%
        - Always Writable
        橫向擴(kuò)展能力- 支持平滑擴(kuò)展
        - 支持百萬(wàn)級(jí) QPS
        支持- 支持平滑擴(kuò)展
        - 支持百萬(wàn)級(jí) QPS
        支持- 集群擴(kuò)容依賴前端
        - LVS 負(fù)載均衡調(diào)度
        Low Latency支持不支持支持不支持不支持
        消費(fèi)模型Push / PullPush / PullPush / PullPullPush / Pull
        定時(shí)消息支持(可精確到秒級(jí))支持(只支持18個(gè)固定 Level)暫不支持不支持支持
        事務(wù)消息支持不支持不支持不支持不支持
        順序消息支持支持暫不支持支持不支持
        全鏈路消息軌跡支持不支持暫不支持不支持不支持
        消息堆積能力百億級(jí)別
        不影響性能
        百億級(jí)別
        影響性能
        百億級(jí)別
        不影響性能
        影響性能影響性能
        消息堆積查詢支持支持支持不支持不支持
        消息回溯支持支持支持不支持不支持
        消息重試支持支持暫不支持不支持支持
        死信隊(duì)列支持支持不支持不支持支持
        性能(常規(guī))非常好
        百萬(wàn)級(jí) QPS
        非常好
        十萬(wàn)級(jí) QPS
        非常好
        百萬(wàn)級(jí) QPS
        非常好
        百萬(wàn)級(jí) QPS
        一般
        萬(wàn)級(jí) QPS
        性能(萬(wàn)級(jí) Topic 場(chǎng)景)非常好
        百萬(wàn)級(jí) QPS
        非常好
        十萬(wàn)級(jí) QPS
        非常好
        百萬(wàn)級(jí) QPS
        性能(海量消息堆積場(chǎng)景)非常好
        百萬(wàn)級(jí) QPS
        非常好
        十萬(wàn)級(jí) QPS
        非常好
        百萬(wàn)級(jí) QPS


        對(duì)比



        ActiveMQRabbitMQRocketMqZeroMQKafka
        關(guān)注度

        成 熟度

        ????????????????

        成熟成熟比較成熟不成熟成熟

        所屬社區(qū)/公司

        ???????????????????????

        ApacheMozilla
        Public
        License

        Alibaba

        Apache



        社區(qū)活躍度
        文檔
        特點(diǎn)功能齊全,被大量開源項(xiàng)目使用由于Erlang?語(yǔ)言的并發(fā)能力,性能很好??
        各個(gè)環(huán)節(jié)分布式擴(kuò)展設(shè)計(jì),主從 HA;支持上萬(wàn)個(gè)隊(duì)列;多種消費(fèi)模式;性能很好低延時(shí),高性能,最高?43萬(wàn)條消息每秒
        授權(quán)方式開源開源開源開源開源
        開發(fā)語(yǔ)言JavaErlangJavaC
        支持的協(xié)議OpenWire、
        STOMP、
        REST、XMPP、
        AMQP
        AMQP?
        自己定義的一
        套(社區(qū)提供
        JMS--不成熟)
        TCP、UDP
        客戶端支持語(yǔ)言Java、C、
        C++、
        Python、
        PHP、
        Perl、.net?等?
        Java、C、
        C++、
        Python、
        PHP、
        Perl、.net?等?
        Java??
        C++(不成熟)
        python、?java、?php、.net?等
        持久化內(nèi)存、文件、數(shù)據(jù)庫(kù)內(nèi)存、文件磁盤文件在消息發(fā)送端保存
        事務(wù)支持不支持支持不支持
        集群支持支持支持不支持
        負(fù)載均衡支持支持支持不支持
        管理界面一般無(wú)社區(qū)有?web
        console???實(shí)現(xiàn)
        無(wú)
        部署方式獨(dú)立、嵌入獨(dú)立獨(dú)立獨(dú)立
        順序無(wú)法保證嚴(yán)格的順序
        保證嚴(yán)格的消費(fèi)順序

        評(píng)價(jià)優(yōu)點(diǎn):
        ???成熟的產(chǎn)品,已經(jīng)在很多公司得到應(yīng)用(非大規(guī)模場(chǎng)景)。有較多的文檔。各種協(xié)議支持較好,有多重語(yǔ)言的成熟的客戶端;
        缺點(diǎn):
        根據(jù)其他用戶反饋,會(huì)出莫名其妙的問(wèn)題,切會(huì)丟失消息。?其重心放到activemq6.0?產(chǎn)品—apollo 上去了,目前社區(qū)不活躍,且對(duì) 5.x 維護(hù)較少;
        Activemq?不適合用于上千個(gè)隊(duì)列的應(yīng)用場(chǎng)景
        優(yōu)點(diǎn):???由于erlang語(yǔ)言的特性,mq 性能較好;管理界面較豐富,在互聯(lián)網(wǎng)公司也有較大規(guī)模的應(yīng)用;支持amqp系誒,有多中語(yǔ)言且支持 amqp 的客戶端可用
        ?
        缺點(diǎn):
        ??erlang語(yǔ)言難度較
        大。集群不支持動(dòng)態(tài)擴(kuò)展。
        優(yōu)點(diǎn):
        ???模型簡(jiǎn)單,接口易用(JMS ??的接口很多場(chǎng)合并不太實(shí)用)。在阿里大規(guī)模應(yīng)用。目前支付寶中的余額寶等新興產(chǎn)
        品均使用rocketmq。集群規(guī)模大概在50?臺(tái)左右,單日處理消息上百億;性能非常好,可以大量堆
        積消息在broker ??中;支持多種消費(fèi),包括集群消費(fèi)、廣播消費(fèi)等。開發(fā)度較活躍,版本更新很快。
        ?缺點(diǎn):
        ??沒有在?mq?核心中去實(shí)現(xiàn)JMS?等接口,









        RabbitMQ

        是使用Erlang編寫的一個(gè)開源的消息隊(duì)列,本身支持很多的協(xié)議:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它變的非常重量級(jí),更適合于企業(yè)級(jí)的開發(fā)。同時(shí)實(shí)現(xiàn)了一個(gè)經(jīng)紀(jì)人(Broker)構(gòu)架,這意味著消息在發(fā)送給客戶端時(shí)先在中心隊(duì)列排隊(duì)。對(duì)路由(Routing),負(fù)載均衡(Load balance)或者數(shù)據(jù)持久化都有很好的支持。

        Redis

        是一個(gè)Key-Value的NoSQL數(shù)據(jù)庫(kù),開發(fā)維護(hù)很活躍,雖然它是一個(gè)Key-Value數(shù)據(jù)庫(kù)存儲(chǔ)系統(tǒng),但它本身支持MQ功能,所以完全可以當(dāng)做一個(gè)輕量級(jí)的隊(duì)列服務(wù)來(lái)使用。對(duì)于RabbitMQ和Redis的入隊(duì)和出隊(duì)操作,各執(zhí)行100萬(wàn)次,每10萬(wàn)次記錄一次執(zhí)行時(shí)間。測(cè)試數(shù)據(jù)分為128Bytes、512Bytes、1K和10K四個(gè)不同大小的數(shù)據(jù)。實(shí)驗(yàn)表明:入隊(duì)時(shí),當(dāng)數(shù)據(jù)比較小時(shí)Redis的性能要高于RabbitMQ,而如果數(shù)據(jù)大小超過(guò)了10K,Redis則慢的無(wú)法忍受;出隊(duì)時(shí),無(wú)論數(shù)據(jù)大小,Redis都表現(xiàn)出非常好的性能,而RabbitMQ的出隊(duì)性能則遠(yuǎn)低于Redis。

        ZeroMQ

        號(hào)稱最快的消息隊(duì)列系統(tǒng),尤其針對(duì)大吞吐量的需求場(chǎng)景。ZMQ能夠?qū)崿F(xiàn)RabbitMQ不擅長(zhǎng)的高級(jí)/復(fù)雜的隊(duì)列,但是開發(fā)人員需要自己組合多種技術(shù)框架,技術(shù)上的復(fù)雜度是對(duì)這MQ能夠應(yīng)用成功的挑戰(zhàn)。ZeroMQ具有一個(gè)獨(dú)特的非中間件的模式,你不需要安裝和運(yùn)行一個(gè)消息服務(wù)器或中間件,因?yàn)槟愕膽?yīng)用程序?qū)缪萘诉@個(gè)服務(wù)角色。你只需要簡(jiǎn)單的引用ZeroMQ程序庫(kù),可以使用NuGet安裝,然后你就可以愉快的在應(yīng)用程序之間發(fā)送消息了。但是ZeroMQ僅提供非持久性的隊(duì)列,也就是說(shuō)如果down機(jī),數(shù)據(jù)將會(huì)丟失。其中,Twitter的Storm中使用ZeroMQ作為數(shù)據(jù)流的傳輸。

        ActiveMQ

        是Apache下的一個(gè)子項(xiàng)目。類似于ZeroMQ,它能夠以代理人和點(diǎn)對(duì)點(diǎn)的技術(shù)實(shí)現(xiàn)隊(duì)列。同時(shí)類似于RabbitMQ,它少量代碼就可以高效地實(shí)現(xiàn)高級(jí)應(yīng)用場(chǎng)景。RabbitMQ、ZeroMQ、ActiveMQ均支持常用的多種語(yǔ)言客戶端 C++、Java、.Net,、Python、 Php、 Ruby等。

        Jafka/Kafka

        Kafka是Apache下的一個(gè)子項(xiàng)目,是一個(gè)高性能跨語(yǔ)言分布式Publish/Subscribe消息隊(duì)列系統(tǒng),而Jafka是在Kafka之上孵化而來(lái)的,即Kafka的一個(gè)升級(jí)版。具有以下特性:快速持久化,可以在O(1)的系統(tǒng)開銷下進(jìn)行消息持久化;高吞吐,在一臺(tái)普通的服務(wù)器上既可以達(dá)到10W/s的吞吐速率;完全的分布式系統(tǒng),Broker、Producer、Consumer都原生自動(dòng)支持分布式,自動(dòng)實(shí)現(xiàn)復(fù)雜均衡;支持Hadoop數(shù)據(jù)并行加載,對(duì)于像Hadoop的一樣的日志數(shù)據(jù)和離線分析系統(tǒng),但又要求實(shí)時(shí)處理的限制,這是一個(gè)可行的解決方案。Kafka通過(guò)Hadoop的并行加載機(jī)制來(lái)統(tǒng)一了在線和離線的消息處理,這一點(diǎn)也是本課題所研究系統(tǒng)所看重的。Apache Kafka相對(duì)于ActiveMQ是一個(gè)非常輕量級(jí)的消息系統(tǒng),除了性能非常好之外,還是一個(gè)工作良好的分布式系統(tǒng)。

        rabbitmq比kafka可靠,kafka更適合IO高吞吐的處理,比如ELK日志收集**

        Kafka和RabbitMq一樣是通用意圖消息代理,他們都是以分布式部署為目的。但是他們對(duì)消息語(yǔ)義模型的定義的假設(shè)是非常不同的。我對(duì)”AMQP 更成熟”這個(gè)論點(diǎn)是持懷疑態(tài)度的。讓我們用事實(shí)說(shuō)話來(lái)看看用什么解決方案來(lái)解決你的問(wèn)題。?
          a) 以下場(chǎng)景你比較適合使用Kafka。你有大量的事件(10萬(wàn)以上/秒)、你需要以分區(qū)的,順序的,至少傳遞成功一次到混雜了在線和打包消費(fèi)的消費(fèi)者、你希望能重讀消息、你能接受目前是有限的節(jié)點(diǎn)級(jí)別高可用或則說(shuō)你并不介意通過(guò)論壇/IRC工具得到還在幼兒階段的軟件的支持。?
          b) 以下場(chǎng)景你比較適合使用RabbitMQ。你有較少的事件(2萬(wàn)以上/秒)并且需要通過(guò)復(fù)雜的路由邏輯去找到消費(fèi)者、你希望消息傳遞是可靠的、你并不關(guān)心消息傳遞的順序、你需要現(xiàn)在就支持集群-節(jié)點(diǎn)級(jí)別的高可用或則說(shuō)你需要7*24小時(shí)的付費(fèi)支持(當(dāng)然也可以通過(guò)論壇/IRC工具)。

        redis 消息推送(基于分布式 pub/sub)多用于實(shí)時(shí)性較高的消息推送,并不保證可靠。

        redis 消息推送(基于分布式 pub/sub)多用于實(shí)時(shí)性較高的消息推送,并不保證可靠。其他的mq和kafka保證可靠但有一些延遲(非實(shí)時(shí)系統(tǒng)沒有保證延遲)。redis-pub/sub斷電就清空,而使用redis-list作為消息推送雖然有持久化,但是又太弱智,也并非完全可靠不會(huì)丟。另外一點(diǎn),redis 發(fā)布訂閱除了表示不同的 topic 外,并不支持分組,比如kafka中發(fā)布一個(gè)東西,多個(gè)訂閱者可以分組,同一個(gè)組里只有一個(gè)訂閱者會(huì)收到該消息,這樣可以用作負(fù)載均衡。比如,kafka 中發(fā)布:topic = “發(fā)布帖子” data=”文章1” 這個(gè)消息,后面有一百臺(tái)服務(wù)器每臺(tái)服務(wù)器都是一個(gè)訂閱者,都訂閱了這個(gè) topic,但是他們可能分為三組,A組50臺(tái),用來(lái)真的做發(fā)布文章,A組50臺(tái)里所有 subscriber 都訂閱了這個(gè)topic。由于在同一組,這條消息 (topic=”發(fā)布帖子”, data=”文章1”)只會(huì)被A組里面一臺(tái)當(dāng)前空閑的機(jī)器收到。而B組25臺(tái)服務(wù)器用于統(tǒng)計(jì),C組25臺(tái)服務(wù)器用于存檔備份,每組只有一臺(tái)會(huì)收到。用不同的組來(lái)決定每條消息要抄送出多少分去,用同組內(nèi)哪些訂閱者忙,哪些訂閱者空閑來(lái)決定消息會(huì)被分到哪臺(tái)服務(wù)器去處理,生產(chǎn)者消費(fèi)者模型嘛。redis完全沒有這類機(jī)制,這兩點(diǎn)是最大的區(qū)別。

        redis是內(nèi)存數(shù)據(jù)庫(kù)!redis他爹做了disque,你要不要試試。mq一般都采用訂閱~發(fā)布模型,如果你考慮性能,主要關(guān)注點(diǎn)就放在消費(fèi)模型是pull還是push。影響最大的,應(yīng)該是存儲(chǔ)結(jié)構(gòu)。kafka的性能要在topic數(shù)量小于64的時(shí)候,才能發(fā)揮威力。partition決定的。極限情況下丟消息,例如:主寫入消息后,主機(jī)器宕機(jī),并硬盤損壞。review代碼的時(shí)候發(fā)現(xiàn)的。rabbit不知道,但是rocket的性能是(萬(wàn)條每秒),并且能夠橫向無(wú)限擴(kuò)展,單機(jī)topic數(shù)量在256時(shí),性能損失較小。rocket可以說(shuō)是kafka的變種,是阿里在充分reviewkafka代碼后,開發(fā)的metaQ。在不斷更新,修補(bǔ)以后,阿里把metaQ3.0更名為rocket,并且rocket是java寫的易于維護(hù)。另外就是rocket和kafka有類似無(wú)限堆積的能力。想想,斷電不丟消息,積壓兩億條消息毫無(wú)壓力,niubilitykafka和rocket性能根本不是你需要考慮的問(wèn)題。

        在應(yīng)用場(chǎng)景方面,

        RabbitMQ,遵循AMQP協(xié)議,由內(nèi)在高并發(fā)的erlanng語(yǔ)言開發(fā),用在實(shí)時(shí)的對(duì)可靠性要求比較高的消息傳遞上。

        kafka是Linkedin于2010年12月份開源的消息發(fā)布訂閱系統(tǒng),它主要用于處理活躍的流式數(shù)據(jù),大數(shù)據(jù)量的數(shù)據(jù)處理上。

        在架構(gòu)模型方面,

        RabbitMQ遵循AMQP協(xié)議,RabbitMQ的broker由Exchange,Binding,queue組成,其中exchange和binding組成了消息的路由鍵;客戶端Producer通過(guò)連接channel和server進(jìn)行通信,Consumer從queue獲取消息進(jìn)行消費(fèi)(長(zhǎng)連接,queue有消息會(huì)推送到consumer端,consumer循環(huán)從輸入流讀取數(shù)據(jù))。rabbitMQ以broker為中心;有消息的確認(rèn)機(jī)制。

        kafka遵從一般的MQ結(jié)構(gòu),producer,broker,consumer,以consumer為中心,消息的消費(fèi)信息保存的客戶端consumer上,consumer根據(jù)消費(fèi)的點(diǎn),從broker上批量pull數(shù)據(jù);無(wú)消息確認(rèn)機(jī)制。

        在吞吐量,

        kafka具有高的吞吐量,內(nèi)部采用消息的批量處理,zero-copy機(jī)制,數(shù)據(jù)的存儲(chǔ)和獲取是本地磁盤順序批量操作,具有O(1)的復(fù)雜度,消息處理的效率很高。

        rabbitMQ在吞吐量方面稍遜于kafka,他們的出發(fā)點(diǎn)不一樣,rabbitMQ支持對(duì)消息的可靠的傳遞,支持事務(wù),不支持批量的操作;基于存儲(chǔ)的可靠性的要求存儲(chǔ)可以采用內(nèi)存或者硬盤。

        在可用性方面,

        rabbitMQ支持miror的queue,主queue失效,miror queue接管。

        kafka的broker支持主備模式。

        在集群負(fù)載均衡方面,

        kafka采用zookeeper對(duì)集群中的broker、consumer進(jìn)行管理,可以注冊(cè)topic到zookeeper上;通過(guò)zookeeper的協(xié)調(diào)機(jī)制,producer保存對(duì)應(yīng)topic的broker信息,可以隨機(jī)或者輪詢發(fā)送到broker上;并且producer可以基于語(yǔ)義指定分片,消息發(fā)送到broker的某分片上。

        rabbitMQ的負(fù)載均衡需要單獨(dú)的loadbalancer進(jìn)行支持。

        Kafka是可靠的分布式日志存儲(chǔ)服務(wù)。用簡(jiǎn)單的話來(lái)說(shuō),你可以把Kafka當(dāng)作可順序?qū)懭氲囊淮缶泶艓В?可以隨時(shí)倒帶,快進(jìn)到某個(gè)時(shí)間點(diǎn)重放。先說(shuō)下日志的定義:日志是數(shù)據(jù)庫(kù)的核心,是對(duì)數(shù)據(jù)庫(kù)的所有變更的嚴(yán)格有序記錄,“表”是變更的結(jié)果。日志的其他名字有:Changelog, Write Ahead Log, Commit Log, Redo Log, Journaling.Kafka的特征如下:高寫入速度:Kafka能以超過(guò)1Gbps NIC的速度寫這盤磁帶(實(shí)際可以到SATA 3速度,參考Benchmarking Apache Kafka: 2 Million Writes Per Second (On Three Cheap Machines)),充分利用了磁盤的物理特性,即,隨機(jī)寫入慢(磁頭沖停),順序?qū)懭肟欤ù蓬^懸?。8呖煽啃裕和ㄟ^(guò)zookeeper做分布式一致性,同步到任意多塊磁盤上,故障自動(dòng)切換選主,自愈。高容量:通過(guò)橫向擴(kuò)展,LinkedIn每日通過(guò)Kafka存儲(chǔ)的新增數(shù)據(jù)高達(dá)175TB,8000億條消息,可無(wú)限擴(kuò)容,類似把兩條磁帶粘到一起。傳統(tǒng)業(yè)務(wù)數(shù)據(jù)庫(kù)的根本缺陷在于:1. 太慢,讀寫太昂貴,無(wú)法避免的隨機(jī)尋址。(磁盤最快5ms尋址,固態(tài)又太昂貴。)2. 根本無(wú)法適應(yīng)持續(xù)產(chǎn)生的數(shù)據(jù)流,越用越慢。(索引效率問(wèn)題)3. 無(wú)法水平scale。(多半是讀寫分離,一主多備。另: NewSQL通過(guò)一致性算法,有多主。)針對(duì)這些問(wèn)題,Kafka提出了一種方法: “l(fā)og-centric approach(以日志為中心的方法)?!睂鹘y(tǒng)數(shù)據(jù)庫(kù)分為兩個(gè)獨(dú)立的系統(tǒng),即日志系統(tǒng)和索引系統(tǒng)。“持久化和索引分開,日志盡可能快的落地,索引按照自己的速度追趕?!痹跀?shù)據(jù)可靠性在得到Kafka這種快速的,類似磁帶順序記錄方式保障的大前提下。數(shù)據(jù)的呈現(xiàn),使用方式變得非常靈活,可以根據(jù)需要將數(shù)據(jù)流同時(shí)送入搜索系統(tǒng),RDBMS系統(tǒng),數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng), 圖數(shù)據(jù)庫(kù)系統(tǒng),日志分析等這些各種不同的數(shù)據(jù)庫(kù)系統(tǒng)。這些不同的系統(tǒng)只不過(guò)是一種對(duì)Kafka磁帶數(shù)據(jù)的一種詮釋,一個(gè)側(cè)面,一個(gè)索引,一個(gè)快照。數(shù)據(jù)丟了,沒關(guān)系,重放一遍磁帶即可,更多的時(shí)候,對(duì)這些各式數(shù)據(jù)庫(kù)系統(tǒng)的維護(hù)只是需要定期做一個(gè)快照,并拷貝到一個(gè)安全的對(duì)象存儲(chǔ)(如S3) 而已。一句話:“日志都是相同的日志,索引各有各的不同。”關(guān)于流計(jì)算:在以流為基本抽象的存儲(chǔ)模型下,數(shù)據(jù)流和數(shù)據(jù)流之間,可以多流混合處理,或者流和狀態(tài),狀態(tài)和狀態(tài)的JOIN處理,這就是Kafka Stream提供的功能。一個(gè)簡(jiǎn)單的例子是,在用戶觸發(fā)了某個(gè)事件后,和用戶表混合處理,產(chǎn)生數(shù)據(jù)增補(bǔ)(Augment),再進(jìn)入數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行相關(guān)性分析,一些簡(jiǎn)單的窗口統(tǒng)計(jì)和實(shí)時(shí)分析也很容易就能滿足,比如 在收到用戶登錄消息的時(shí)候,在線人數(shù)+1, 離線的時(shí)候-1,反應(yīng)出當(dāng)前系統(tǒng)的在線用戶總數(shù)。這方面可以參考PipelineDB https://www.pipelinedb.com/Kafka會(huì)讓你重新思考系統(tǒng)的構(gòu)建方式,使以前不可能的事變?yōu)榭赡?,是一個(gè)系統(tǒng)中最重要的最核心的部分,不夸張的說(shuō),系統(tǒng)設(shè)計(jì)都需要圍繞Kafka做。



        版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。

        本文鏈接:

        https://blog.csdn.net/belvine/article/details/80842240



        鋒哥最新SpringCloud分布式電商秒殺課程發(fā)布

        ??????

        ??長(zhǎng)按上方微信二維碼?2 秒





        感謝點(diǎn)贊支持下哈?

        瀏覽 43
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 久久高清无码视频 | 国产成人精品无码区在线 | 成人做爱A片 | 岛国A片 蜜桃一区二区三区 | 黄色直播在线观看 |