国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RabbitMQ、Kafka和RocketMQ比較

這篇具有很好參考價值的文章主要介紹了RabbitMQ、Kafka和RocketMQ比較。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、概述

消息隊列中間件(MQ)是不同系統(tǒng)之間消息傳遞,異步通信的常見組件,RabbitMQ、Kafka和RocketMQ是目前業(yè)界常見的3種消息中間件,本文重點闡述了他們特性差異、架構設計和處理常見問題的方案。

二、特性比較

RabbitMQ適合于中小規(guī)模的使用場景,是目前業(yè)界使用最廣泛的一種MQ,其完全實現(xiàn)了AMQP的協(xié)議,實現(xiàn)了非常豐富的消息可靠性的保障機制,和其他MQ相比,其在可靠性方面是最強的,但也正是由于可靠性方面實現(xiàn)機制過于沉重,導致其吞吐量并不高,在生產環(huán)境經(jīng)常會出現(xiàn)消息積壓的問題。

Kafka適合于實時流處理的使用場景,在大數(shù)據(jù)處理領域經(jīng)常見到,可以用來處理海量的日志數(shù)據(jù)和IoT海量數(shù)據(jù)采集,由于其基于文件順序讀寫的存儲架構和基于zero-copy的IO處理策略,使得他的吞吐量非常之高,性能非常之好,能夠達到百萬級別的數(shù)據(jù)處理吞吐量,其可靠性保障主要是基于多副本這種策略,所以可靠性方面明顯不如RabbitMQ。

RabbitMQ Kafka RocketMQ
使用場景 中小規(guī)模的使用場景 實時流處理、海量日志數(shù)據(jù)處理 性能均衡,優(yōu)勢在分布式事務場景
可靠性 高,AMPQ協(xié)議保障 低,基于多副本機制保障 中等,基于事務的保障
吞吐量 低,萬級別 高,基于順序讀寫的存儲架構,百萬級別 中等,十萬級別
時效性 毫秒級別 毫秒級別 毫秒級別
優(yōu)點 可靠性非常高 吞吐量非常大,性能非常好,集群高可用 性能和功能全面,擅長分布式事務方向
缺點 吞吐量比較低,消息積累會影響性能,基于erlang開發(fā)不好定制 數(shù)據(jù)可靠性保障較低,會存在數(shù)據(jù)丟失 客戶端只支持Java,官方文檔支持較少

三、常見問題處理策略

1.可靠性保障

  • RabbitMQ
  1. 持久化機制。RabbitMQ通過消息持久化機制來確保消息的可靠傳遞。生產者可以選擇將消息標記為持久化,使得即使在消息隊列服務器故障后,消息也能被保存并傳遞給消費者。
  2. RabbitMQ生產者提供的可靠性機制包括發(fā)布確認(Publish Confirm)、事務機制(Transaction),生產者可以通過發(fā)布確認和事務機制獲取消息是否成功被RabbitMQ接收和處理的確認;RabbitMQ生產者提供的可靠性保障機制包括消息確認機制(ACK),消費者可以通過消息確認機制來保障消息的可靠消費。
void basicAck(long deliveryTag, boolean multiple)//確認消息
void basicNack(long deliveryTag, boolean multiple, boolean requeue)//拒絕消息
void basicRecover(boolean requeue)//重發(fā)消息
  • Kafka
  1. 持久化。kafka的消息在發(fā)送前會被持久化存儲到磁盤上,即使在服務器重啟后也不會丟失。但也需要對kafka的持久化消息設置失效時間,保障存儲空間的充足。
  2. 多副本。Kafka采用多副本機制,將消息復制到多個Broker節(jié)點上,即使其中一個Broker節(jié)點故障,仍然可以從其他副本節(jié)點讀取和傳遞消息。
  • RocketMQ

    和kafka類似。

總結:RabbitMQ相比Kafka和RocketMQ,他有跟豐富的可靠性保障機制,包括保障生產者消息的可靠發(fā)送、數(shù)據(jù)的持久化還有消費者的可靠消費。

2.流控措施

流控措施主要是為了解決消息積壓的問題,如果生產者生成消息速率過快,而消費者消費消息的速率過慢,則會在MQ中形成消息擠壓,如果不及時處理就會造成MQ服務不可用或者OOM等問題。

  • RabbitMQ
  1. 調整消費者消息消費速率。主要是用來控制消費任務的條數(shù)。可以使用QoS(Quality of Service)機制設置每個消費者的預取計數(shù),限制每次從隊列中獲取的消息數(shù)量,以控制消費者的處理速度。
  2. 調整消費者消息消費流量。主要是用來控制消費消息的大小。通過設置basic.qos或basic.consume命令的參數(shù)來控制消費者的處理速度,避免消息過多導致積壓。
/**
* prefetchSize:服務器傳送最大內容量(以八位字節(jié)計算),如果沒有限制,則為0
* prefetchCount:服務器每次傳遞的最大消息數(shù),如果沒有限制,則為0;
* global:如果為true,則當前設置將會應用于整個Channel(頻道)
**/
void basicQos(int prefetchSize, int prefetchCount, boolean global)
  • Kafka
  1. 調整分區(qū)數(shù)和副本數(shù)。kafka下游消費者的數(shù)量和其分區(qū)數(shù)是一致的,所以Kafka通過分區(qū)和副本機制來實現(xiàn)消息的并行處理和負載均衡。可以根據(jù)消息的負載情況和消費者的處理能力,通過增加分區(qū)數(shù)量、調整副本分配策略等方式來提高系統(tǒng)的處理能力。
  2. 調整消息失效策略。kafka提供了消息的保存策略和清理策略,可以根據(jù)時間和數(shù)據(jù)的使用情況來設置。
  • RocketMQ
  1. 動態(tài)調整消費者數(shù)量。RabbitMQ可以根據(jù)系統(tǒng)的負載情況和消息隊列的堆積情況,動態(tài)調整消費者的并發(fā)消費線程數(shù),以適應消息的處理需求。
  2. 調整數(shù)據(jù)的拉取或推送的模式。RocketMQ還提供了消息拉取和推拉模式,消費者可以根據(jù)自身的處理能力主動拉取消息,避免消息積壓過多。

總結:流控措施的幾種方式主要包括:(1)擴大下游消費者的消費速率和流量;(2)增大消費者的數(shù)量,擴大消費能力;(3)調整MQ的副本或分區(qū)數(shù),發(fā)揮下游消費者的最大消費能力;(4)拉取或推送模式的權衡。

3.重復消費問題

重復性消費問題主要需要解決是冪等性問題,對于重復下發(fā)的消息也能保障唯一性消費。

  • RabbitMQ
  1. 冪等性處理。在消費者端實現(xiàn)冪等性邏輯,即無論消息被消費多少次,最終的結果應該保持一致。這可以通過在消費端進行唯一標識的檢查或者記錄已經(jīng)處理過的消息來實現(xiàn)。沒下消費任務時都去查詢該任務是否已被消費,這種是重復下發(fā)后處理的方式。
  2. 消息確認機制。消費者在處理完消息后,發(fā)送確認消息(ACK)給RabbitMQ,告知消息已經(jīng)成功處理。RabbitMQ根據(jù)接收到的確認消息來判斷是否需要重新投遞消息給其他消費者,這種是主動通知消息下發(fā)的方式。
  • Kafka
  1. 消息確認機制。消費者在處理完消息后,提交已消費的偏移量(Offset)給Kafka,Kafka會記錄已提交的偏移量,以便在消費者重新啟動時從正確的位置繼續(xù)消費。消費者可以定期提交偏移量,確保消息只被消費一次。
  • RocketMQ
  1. 使用消息唯一標識符(Message ID)。在消息發(fā)送時,為每條消息附加一個唯一標識符。消費者在處理消息時,可以通過判斷消息唯一標識符來避免重復消費??梢詫⑾D記錄在數(shù)據(jù)庫或緩存中,用于去重檢查。

總結:在MQ中處理重復消費的問題主要的思路有:(1)通過給消息加唯一性標識來過濾已經(jīng)消費的消息,對于像RocketMQ這種存在Messeage ID的,處理起來就比較簡單,就只需要對Messeage ID去重即可,對于像RabbitMQ和kafka這種可以將消息狀態(tài)保存在數(shù)據(jù)庫或緩存中進行唯一性去重;(2)消息確認機制,就是對于消息的消費會主動上報的,每次消費完就會進行確認,在RabbitMQ中是會恢復ACK標識,在kafka中是會恢復offset標識。

4.消息順序性

  • RabbitMQ
  1. 單個隊列。rabbitmq 保證了同一個隊列中的消息按照發(fā)布的順序進入和出隊。
  • Kafka
  1. 有序分區(qū)。kafka 保證了同一個分區(qū)(topic + partition)中的消息按照發(fā)布的順序存儲和消費。
  • RocketMQ
  1. 有序分區(qū)。rokcetmq 保證了同一個隊列(topic + queueId)中的消息按照發(fā)布的順序存儲和消費。

參考資料

  1. MQ黃金三劍客:RabbitMQ、RocketMQ和Kafka深入解密常見問題及功能對比指南?:https://juejin.cn/post/7254267283249840184?utm_source=gold_browser_extension
  2. 【RabbitMQ.Client筆記】Qos與消息應答:https://www.cnblogs.com/fanfan-90/p/13589626.html (說明了通過Qos做限流,通過手動ACK來進行消息確認)
  3. 《RabbitMQ系列》之RabbitMQ的優(yōu)先級隊列:https://zhuanlan.zhihu.com/p/582787804(實現(xiàn)了優(yōu)先級隊列)

本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!文章來源地址http://www.zghlxwxcb.cn/news/detail-719952.html

到了這里,關于RabbitMQ、Kafka和RocketMQ比較的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Kafka、RabbitMQ、RocketMQ中間件的對比

    Kafka、RabbitMQ、RocketMQ中間件的對比

    消息中間件現(xiàn)在有不少,網(wǎng)上很多文章都對其做過對比,在這我對其做進一步總結與整理。 ? ? RocketMQ 淘寶內部的交易系統(tǒng)使用了淘寶自主研發(fā)的Notify消息中間件,使用Mysql作為消息存儲媒介,可完全水平擴容,為了進一步降低成本,我們認為存儲部分可以進一步優(yōu)化,201

    2024年02月05日
    瀏覽(26)
  • 消息中間件,RabbitMQ,kafka常見面試題

    RabbitMQ和Kafka都是消息隊列系統(tǒng),可以用于流處理。流處理是指對高速、連續(xù)、增量的數(shù)據(jù)進行實時處理。 RabbitMQ 和 Kafka 的相同點有以下幾個: 都是消息隊列系統(tǒng),可以用于流處理、異步通信、解耦等場景 都是開源的,有活躍的社區(qū)和豐富的文檔 都支持分布式部署,具有高

    2024年02月04日
    瀏覽(38)
  • 基于golang多消息隊列中間件的封裝nsq,rabbitmq,kafka

    場景 在創(chuàng)建個人的公共方法庫中有這樣一個需求,就是不同的項目會用到不同的消息隊列中間件,我的思路把所有的消息隊列中間件進行封裝一個消息隊列接口(MQer)有兩個方法一個生產一個消費,那么在實例化對象的時候根據(jù)配置文件指定當前項目使用的那個消息隊列中

    2024年02月14日
    瀏覽(93)
  • 實戰(zhàn):Spring Cloud Stream集成兼容多消息中間件kafka、rabbitmq

    實戰(zhàn):Spring Cloud Stream集成兼容多消息中間件kafka、rabbitmq

    前面的博文我們介紹并實戰(zhàn)演示了Spring Cloud Stream整合rabbitmq,其中主要介紹了如何使用和配置完成消息中間件的集成。但是,在實際的生產環(huán)境中可能會用到多個消息中間件,又或者是由于業(yè)務改變需要更換消息中間件,在這些情況下我們的Spring Cloud Stream框架可以完全兼容多

    2024年02月08日
    瀏覽(25)
  • 想學高并發(fā)技能,這些常用的消息中間件( RabbitMQ、Kafka、ActiveMQ、Redis、NATS )你要必知

    對于全?;蛘吆蠖斯こ處焷碚f,解決高并發(fā)是一個必備的技能,一說到高并發(fā)時,我們第一反應是分布式系統(tǒng),那么,消息中間件( RabbitMQ 、 Kafka 、 ActiveMQ 、 Redis 、 NATS 等)的出現(xiàn)是為了解決分布式系統(tǒng)中的消息傳遞和異步通信的問題,以及提供可靠的消息傳遞機制。它們

    2024年04月15日
    瀏覽(43)
  • RocketMQ(消息中間件)

    RocketMQ(消息中間件)

    目錄 一、為什么會出現(xiàn)消息中間件? 二、消息中間件是干嘛的? 三、應用解耦 四、流量削峰 五、異步處理 1.串行方式: 2.并行方式: 3.引入消息隊列: ?六、RocketMQ的架構及概念 Http請求默認采用同步請求方式,基于請求與響應模式,在客戶端與服務器進行通訊 時,客戶端

    2024年02月10日
    瀏覽(18)
  • 消息中間件-RocketMQ

    消息中間件-RocketMQ

    ????????RocketMQ是阿里巴巴開源的消息分布中間件,在阿里內部使用非常更廣泛,已經(jīng)經(jīng)過了“雙11”這種萬億級的應用場景考驗。 1.安裝 ????????下載地址:http://rocketmq.apache.org/release_notes/release-notes-4.4.0/ ????????下載完成后解壓縮安裝包到指定目錄。 2.配置 ? ?

    2024年02月09日
    瀏覽(28)
  • 消息中間件系列 - RocketMQ

    消息中間件系列 - RocketMQ

    本內容僅用于個人學習筆記,如有侵擾,聯(lián)系刪除 【尚硅谷】RocketMQ教程丨深度掌握MQ消息中間件_嗶哩嗶哩_bilibili 1 、MQ簡介 MQ , Message Queue ,是一種提供 消息隊列服務 的中間件,也稱為消息中間件,是一套提供了消息生產、存儲、消費全過程API的軟件系統(tǒng)。消息即數(shù)據(jù)。

    2024年02月16日
    瀏覽(23)
  • 消息隊列中間件 MetaQ/RocketMQ

    消息隊列中間件 MetaQ/RocketMQ

    推薦電子書:云原生架構白皮書 2022版-藏經(jīng)閣-阿里云開發(fā)者社區(qū) (aliyun.com) 簡介—— 消息隊列中間件 MetaQ/RocketMQ 中間件 MetaQ 是一種基于隊列模型的消息中間件,MetaQ 據(jù)說最早是受 Kafka 的影響開發(fā)的,第一版的名字?\\\"metamorphosis\\\",是奧地利作家卡夫卡的名作——《變形記》。

    2024年02月14日
    瀏覽(96)
  • 消息中間件之RocketMQ源碼分析(十)

    消息中間件之RocketMQ源碼分析(十)

    啟動命令 nohup ./bin/mqnamesrv -c ./conf/namesrv.conf dev/null 21 通過腳本配置啟動基本參數(shù),比如配置文件路徑、JVM參數(shù),調用NamesrvStartup.main()方法,解析命令行的參數(shù),將處理好的參數(shù)轉化為Java實例,傳遞給NamesrvController實例 加載命令行傳遞的配置參數(shù),調用controller.initialize()方法初

    2024年02月20日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包