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

科普rabbitmq,rocketmq,kafka三者的架構(gòu)比較

這篇具有很好參考價(jià)值的文章主要介紹了科普rabbitmq,rocketmq,kafka三者的架構(gòu)比較。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

對(duì)比科普rabbitmq,rocketmq,kafka三者的架構(gòu)比較,rabbitmq,rocketmq,kafka
科普rabbitmq,rocketmq,kafka三者的架構(gòu)比較,rabbitmq,rocketmq,kafka

架構(gòu)對(duì)比
科普rabbitmq,rocketmq,kafka三者的架構(gòu)比較,rabbitmq,rocketmq,kafka
科普rabbitmq,rocketmq,kafka三者的架構(gòu)比較,rabbitmq,rocketmq,kafka

科普rabbitmq,rocketmq,kafka三者的架構(gòu)比較,rabbitmq,rocketmq,kafka
從架構(gòu)可以看出三者有些類似,但是在細(xì)節(jié)上有很多不同。下面我們就從它們的各個(gè)組件,介紹它們:

RabbitMQ

是一種開源的消息隊(duì)列中間件。下面是RabbitMQ中與其相關(guān)的幾個(gè)概念:

1.生產(chǎn)者(Producer):生產(chǎn)者是消息的發(fā)送者,將消息發(fā)送到RabbitMQ的消息隊(duì)列中。

2.消費(fèi)者(Consumer):消費(fèi)者是消息的接收者,從RabbitMQ的消息隊(duì)列中獲取消息并進(jìn)行處理。

3.消息隊(duì)列(Message Queue):消息隊(duì)列是RabbitMQ的核心組件,用于存儲(chǔ)待處理的消息。生產(chǎn)者將消息發(fā)送到隊(duì)列中,消費(fèi)者從隊(duì)列中獲取消息進(jìn)行處理。

4.交換機(jī)(Exchange):交換機(jī)負(fù)責(zé)接收生產(chǎn)者發(fā)送的消息,并根據(jù)一定的規(guī)則將消息路由到一個(gè)或多個(gè)消息隊(duì)列中。常見的交換機(jī)類型包括直連交換機(jī)(direct exchange)、主題交換機(jī)(topic exchange)、扇形交換機(jī)(fanout exchange)等。

5.綁定(Binding):綁定是指將交換機(jī)和消息隊(duì)列進(jìn)行關(guān)聯(lián),定義了交換機(jī)將消息路由到哪些隊(duì)列中。綁定通常使用規(guī)則(routing key)來匹配消息和隊(duì)列。

6.路由鍵(Routing Key):路由鍵是生產(chǎn)者在將消息發(fā)送給交換機(jī)時(shí)附帶的關(guān)鍵字,用于指定消息的路由規(guī)則。

RocketMQ

是阿里巴巴開源的分布式消息中間件,下面是 RocketMQ 中與其相關(guān)的一些概念:

1.生產(chǎn)者(Producer):生產(chǎn)者負(fù)責(zé)生成并發(fā)送消息到 RocketMQ 中。

2.消費(fèi)者(Consumer):消費(fèi)者從 RocketMQ 中訂閱并消費(fèi)消息。

3.主題(Topic):主題是消息的邏輯分類,每個(gè)消息都屬于一個(gè)特定的主題。生產(chǎn)者將消息發(fā)送到指定的主題,消費(fèi)者通過訂閱主題來接收相關(guān)的消息。

4.消息隊(duì)列(Message Queue):主題被拆分成多個(gè)消息隊(duì)列,每個(gè)消息隊(duì)列按照順序存儲(chǔ)消息。消費(fèi)者從消息隊(duì)列中拉取消息進(jìn)行消費(fèi)。

5.消費(fèi)者組(Consumer Group):消費(fèi)者組是一組具有相同 Group ID 的消費(fèi)者實(shí)例。每個(gè)消息只會(huì)被消費(fèi)者組中的其中一個(gè)消費(fèi)者實(shí)例消費(fèi),實(shí)現(xiàn)負(fù)載均衡和高可用性。

6.Broker:Broker 是 RocketMQ 的核心組件,它負(fù)責(zé)接收、存儲(chǔ)和轉(zhuǎn)發(fā)消息。一個(gè) RocketMQ 系統(tǒng)通常由多個(gè) Broker 組成,每個(gè) Broker 負(fù)責(zé)管理若干個(gè)消息隊(duì)列。每個(gè)消息隊(duì)列只屬于一個(gè) Broker,但一個(gè) Broker 可以管理多個(gè)消息隊(duì)列。

7.Name Server:Name Server 是 RocketMQ 的命名服務(wù)組件,用于管理整個(gè) RocketMQ 系統(tǒng)的元數(shù)據(jù)信息。生產(chǎn)者和消費(fèi)者通過 Name Server 定位到對(duì)應(yīng)的 Broker 服務(wù)器。Name Server 還負(fù)責(zé)管理主題、消費(fèi)者組、路由信息等。

運(yùn)行流程
1.生產(chǎn)者和消費(fèi)者在啟動(dòng)時(shí)會(huì)向Name Server注冊(cè)自己的信息,包括IP地址、端口號(hào)等基本信息,以便于Name Server能夠?yàn)樗鼈兲峁┓?wù)路由信息,此外broker節(jié)點(diǎn)通過心跳機(jī)制將自己的信息定時(shí)上報(bào)到Name Server中
2.當(dāng)生產(chǎn)者要發(fā)送消息時(shí),首先需要通過Name Server獲取指定Topic目前可用的Broker(可以是多個(gè)),然后根據(jù)負(fù)載均衡算法選擇其中一個(gè)Broker發(fā)送消息。消息會(huì)被刷盤機(jī)制持久化存儲(chǔ)
3.消息在經(jīng)過同步刷盤或異步刷盤機(jī)制持久化存儲(chǔ)之后,會(huì)被放入該Topic對(duì)應(yīng)的隊(duì)列中。
4.消費(fèi)者在訂閱指定的Topic和Tag之后,會(huì)從Broker服務(wù)器中拉取消息進(jìn)行消費(fèi)。消費(fèi)者首先會(huì)向Name Server獲取指定Topic目前可用的Broker,然后根據(jù)自身消費(fèi)能力獲取消息

Kafka

是由 Apache 軟件基金會(huì)開源的分布式流處理平臺(tái),其核心組件包括以下幾個(gè):

1.Broker:Kafka 的核心組件之一,負(fù)責(zé)存儲(chǔ)和處理數(shù)據(jù)。一個(gè) Kafka 系統(tǒng)通常由多個(gè) Broker 組成,每個(gè) Broker 負(fù)責(zé)管理一部分?jǐn)?shù)據(jù)副本。

2.Topic:Topic 是指數(shù)據(jù)的類別或主題,每條消息都屬于一個(gè)特定的主題。生產(chǎn)者將消息發(fā)送到指定的主題,消費(fèi)者通過訂閱主題來接收相關(guān)的消息。

3.Partition:Partition 是將一個(gè) Topic 分割成多個(gè)較小的、有序的數(shù)據(jù)單元。每個(gè) Partition 存儲(chǔ)了 Topic 對(duì)應(yīng)的部分消息數(shù)據(jù)。分區(qū)的好處是可以提高并發(fā)處理能力和擴(kuò)展性。

4.生產(chǎn)者(Producer):生產(chǎn)者負(fù)責(zé)生成并發(fā)送消息到 Kafka 的 Broker。Producer 可以選擇將消息發(fā)送到指定的 Topic 和 Partition。

5.消費(fèi)者(Consumer):消費(fèi)者從 Kafka 的 Broker 訂閱并消費(fèi)消息??梢酝ㄟ^消費(fèi)者組的方式對(duì)消息進(jìn)行分組,每個(gè)消費(fèi)者組中的消費(fèi)者共同消費(fèi)一個(gè) Topic。

6.消費(fèi)者組(Consumer Group):消費(fèi)者組是一組具有相同 Group ID 的消費(fèi)者實(shí)例。每個(gè)消息只會(huì)被消費(fèi)者組中的其中一個(gè)消費(fèi)者實(shí)例消費(fèi),實(shí)現(xiàn)負(fù)載均衡和高可用性。

7.ZooKeeper:Kafka 使用 ZooKeeper 來進(jìn)行集群管理、元數(shù)據(jù)存儲(chǔ)和領(lǐng)導(dǎo)者選舉等操作。ZooKeeper 負(fù)責(zé)協(xié)調(diào) Broker 和其他組件之間的通信。

不同:
在發(fā)送消息和拉取消息方面,Kafka、RocketMQ 和 RabbitMQ 有一些區(qū)別。

1.RabbitMQ:
發(fā)送消息:RabbitMQ 中的生產(chǎn)者(Producer)將消息發(fā)送到指定的 Exchange。生產(chǎn)者發(fā)送消息時(shí)可以指定消息的 Routing Key,Exchange 根據(jù) Routing Key 將消息路由到相應(yīng)的隊(duì)列。
拉取消息:RabbitMQ 中的消費(fèi)者(Consumer)通過訂閱隊(duì)列來拉取消息。消費(fèi)者可以按照默認(rèn)順序或自定義順序消費(fèi)隊(duì)列中的消息。消費(fèi)者可以選擇輪詢方式拉取消息,也可以使用 Basic.Consume RPC 方法主動(dòng)拉取消息。

2.RocketMQ:
發(fā)送消息:RocketMQ 的生產(chǎn)者(Producer)將消息發(fā)送到指定的 Topic,并不能直接選擇要發(fā)送到的隊(duì)列,而是由 Broker 負(fù)責(zé)將消息分發(fā)到相應(yīng)的隊(duì)列中。發(fā)送消息時(shí)可以選擇同步或異步方式。
拉取消息:RocketMQ 的消費(fèi)者(Consumer)通過訂閱 Topic 和指定消費(fèi)者組(Consumer Group)來拉取消息。RocketMQ 提供了兩種消費(fèi)模式:集群模式(負(fù)載均衡消費(fèi))和廣播模式(每個(gè)消費(fèi)者都會(huì)收到全部消息)。消費(fèi)者可以按照默認(rèn)順序拉取消息或指定順序拉取消息。

3.Kafka:
發(fā)送消息:Kafka 中的生產(chǎn)者(Producer)將消息發(fā)送到指定的 Topic,并選擇要發(fā)送到的 Partition。生產(chǎn)者可以異步發(fā)送消息,不必等待消息被寫入磁盤。
拉取消息:Kafka 中的消費(fèi)者(Consumer)通過訂閱 Topic 來拉取消息。消費(fèi)者可以自主控制從哪個(gè) Offset(偏移量)開始拉取消息,并可以按照自己的速度消費(fèi)消息。Kafka 提供了高性能的批量拉取機(jī)制,可以一次性拉取多條消息。

前二者可以實(shí)現(xiàn)延遲隊(duì)列,死信隊(duì)列,而kafka不行。

經(jīng)典面試題:

1.如何保證消息的可靠性?

本質(zhì)上都是解決 生成者 ----> mq -----> 消費(fèi)者 消息在鏈路中不會(huì)被丟失
rabbitmq:
1.生產(chǎn)者確認(rèn)機(jī)制:實(shí)現(xiàn)兩個(gè)方法ReturnCallback,ConfirmCallback 。ReturnCallback是保證消息從交換機(jī)到隊(duì)列。每次發(fā)送消息時(shí)都需要實(shí)現(xiàn)ConfirmCallback,該方式需要生成一個(gè)唯一ID,避免ack沖突,ConfirmCallback:保證了消息從生產(chǎn)者到交換機(jī)再到隊(duì)列中,如果沒有到隊(duì)列中會(huì)返回nack。
2.隊(duì)列中消息持久化:RabbitMQ會(huì)將消息持久化到磁盤,以確保消息在服務(wù)器重啟或發(fā)生故障時(shí)能夠得到恢復(fù)。前提是在發(fā)送消息時(shí),將消息標(biāo)記為持久化,即設(shè)置 MessageProperties.PERSISTENT_TEXT_PLAIN 屬性。
3.消費(fèi)者確認(rèn)機(jī)制:默認(rèn)確認(rèn)機(jī)制是自動(dòng)的,消費(fèi)后自動(dòng)ack,ack會(huì)刪除隊(duì)列指定的消息
4.失敗重試機(jī)制:發(fā)送重試,消費(fèi)重試

rocketmq
1.發(fā)消息時(shí),重要的消息可以使用同步發(fā)送,內(nèi)部已經(jīng)實(shí)現(xiàn)了ack機(jī)制,該發(fā)送會(huì)有返回值可以獲取消息的發(fā)送狀態(tài),增加重試機(jī)制
2.消息到達(dá)了rockemq之后它內(nèi)部已經(jīng)實(shí)現(xiàn)了持久化機(jī)制,RocketMQ 將消息以日志形式持久化到磁盤中(使用同步刷盤機(jī)制
3.消費(fèi)者通過手動(dòng)確認(rèn)機(jī)制(ACK)
4.失敗重試機(jī)制:消費(fèi)失敗默認(rèn)會(huì)回到隊(duì)列中重新投遞

2.如何解決消息重復(fù)消費(fèi)的問題

rabbitmq
1.消費(fèi)端手動(dòng)ACK確認(rèn)機(jī)制
在消費(fèi)端使用RabbitMQ提供的手動(dòng)ACK確認(rèn)機(jī)制,在消費(fèi)者成功處理消息后,手動(dòng)將消息從隊(duì)列中刪除。這樣可以確保消息只會(huì)被處理一次,避免了重復(fù)消費(fèi)的問題。
2.消費(fèi)端去重保證機(jī)制
可以在消費(fèi)端處理每條消息之前,通過分布式鎖或者數(shù)據(jù)庫(kù)唯一索引等方式,判斷當(dāng)前消息是否已經(jīng)被處理過。如果已經(jīng)處理過,則忽略該消息;否則正常處理,并將消息標(biāo)記為已處理。

rocketmq:因?yàn)閮?nèi)部的重試機(jī)制,很難避免重復(fù)消費(fèi)。一般需要消費(fèi)端去重保證機(jī)制(同上)

3.如何解決消息堆積

一般
限流:限制消息的生產(chǎn)速度
增加消費(fèi)速度:增加消費(fèi)者(rocketmq中:<=隊(duì)列數(shù)量),增加線程數(shù)消費(fèi)
增加隊(duì)列容量
rabbit:惰性隊(duì)列 增加隊(duì)列容量
從RabbitMQ的3.6.0版本開始,就增加了Lazy Queues的概念,也就是惰性隊(duì)列。惰性隊(duì)列的特征如下:
接收到消息后直接存入磁盤而非內(nèi)存
消費(fèi)者要消費(fèi)消息時(shí)才會(huì)從磁盤中讀取并加載到內(nèi)存
支持?jǐn)?shù)百萬條的消息存儲(chǔ)
惰性隊(duì)列是一種用于減少內(nèi)存占用的優(yōu)化策略,它的設(shè)計(jì)目的是在隊(duì)列中存在大量未消費(fèi)的消息時(shí),只有當(dāng)消息被消費(fèi)者拉取時(shí)才將它們加載到內(nèi)存中。這樣可以降低內(nèi)存使用,并提高系統(tǒng)的性能和吞吐量。文章來源地址http://www.zghlxwxcb.cn/news/detail-718577.html

到了這里,關(guān)于科普rabbitmq,rocketmq,kafka三者的架構(gòu)比較的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • RabbitMQ、Kafka、RocketMQ:特點(diǎn)和適用場(chǎng)景對(duì)比

    在現(xiàn)代分布式系統(tǒng)中,消息隊(duì)列是一種常見的架構(gòu)模式,用于實(shí)現(xiàn)異步通信和解耦應(yīng)用組件。RabbitMQ、Kafka和RocketMQ是當(dāng)前流行的開源消息隊(duì)列系統(tǒng),它們各自有著獨(dú)特的特點(diǎn)和適用場(chǎng)景。本文將對(duì)這三種消息隊(duì)列系統(tǒng)進(jìn)行詳細(xì)介紹,并對(duì)它們的特點(diǎn)和適用場(chǎng)景進(jìn)行對(duì)比分析。

    2024年02月11日
    瀏覽(48)
  • Kafka、RabbitMQ、RocketMQ中間件的對(duì)比

    Kafka、RabbitMQ、RocketMQ中間件的對(duì)比

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

    2024年02月05日
    瀏覽(26)
  • 【技術(shù)選型】ActiveMQ、RocketMQ、RabbitMQ、Kafka對(duì)比

    MQ(Message Queue),即消息隊(duì)列。早已成為企業(yè)IT系統(tǒng)內(nèi)部通信的核心手段。它具有低耦合、可靠投遞、廣播、流量控制、最終一致性等一系列功能,成為異步RPC的主要手段之一。當(dāng)今市面上有很多主流的MQ,如老牌的ActiveMQ、RabbitMQ,炙手可熱的Kafka,阿里巴巴自主開發(fā)RocketMQ等。

    2024年02月13日
    瀏覽(20)
  • 了解ActiveMQ、RabbitMQ、RocketMQ和Kafka的特點(diǎn)

    ActiveMQ是一種基于JMS(Java消息服務(wù))規(guī)范的消息中間件,由Apache基金會(huì)開發(fā)和維護(hù) 核心組件和特點(diǎn): Broker(代理):ActiveMQ的核心組件是Broker,它負(fù)責(zé)接收、存儲(chǔ)和路由消息,可以配置為單個(gè)實(shí)例或者集群,提供高可用性和可擴(kuò)展性。 Producer(生產(chǎn)者)和Consumer(消費(fèi)者):

    2024年02月07日
    瀏覽(52)
  • Kafka、RabbitMQ、Pulsar、RocketMQ基本原理和選型

    Kafka、RabbitMQ、Pulsar、RocketMQ基本原理和選型

    消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合,異步消息,削峰填谷等問題。實(shí)現(xiàn)高性能、高可用、可伸縮和最終一致性架構(gòu)。 使用消息隊(duì)列能夠獲得如下好處,能夠在應(yīng)用與應(yīng)用之間降低依賴和實(shí)時(shí)性要求。 解耦:多個(gè)服務(wù)監(jiān)聽、處理同一條消息,避免

    2024年04月23日
    瀏覽(18)
  • Kafka、RocketMQ、RabbitMQ如何保證消息的順序消費(fèi)?

    一、1個(gè)Topic(主題)只創(chuàng)建1個(gè)Partition (分區(qū)),這樣生產(chǎn)者的所有數(shù)據(jù)都發(fā)送到了一個(gè)Partition (分區(qū)),保證了消息的消費(fèi)順序; 二、生產(chǎn)者在發(fā)送消息的時(shí)候指定要發(fā)送到哪個(gè) Partition,這樣同一個(gè) Partition 的數(shù)據(jù)會(huì)被同一個(gè)消費(fèi)者消費(fèi),從而保證了消息的消費(fèi)順序。 實(shí)現(xiàn)思路

    2024年02月09日
    瀏覽(24)
  • 【面試需了解之消息隊(duì)列】RocketMQ、kafka、RabbitMQ概述

    消息隊(duì)列說明:RocketMQ、kafka、RabbitMQ概述及關(guān)鍵概念 概述 消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合,異步消息,流量控制等問題。實(shí)現(xiàn)高性能、高可用、可伸縮和最終一致性架構(gòu),是大型分布式系統(tǒng)不可缺少的中間件 作用 異構(gòu)系統(tǒng)消息傳遞:上游系統(tǒng)

    2024年02月10日
    瀏覽(62)
  • Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么優(yōu)缺點(diǎn)?

    特性 ActiveMQ RabbitMQ RocketMQ Kafka 開發(fā)語(yǔ)言 java erlang java scala 單機(jī)吞吐量 萬級(jí),比 RocketMQ、Kafka 低一個(gè)數(shù)量級(jí) 同 ActiveMQ 10 萬級(jí),支撐高吞吐 10 萬級(jí),高吞吐,一般配合大數(shù)據(jù)類的系統(tǒng)來進(jìn)行實(shí)時(shí)數(shù)據(jù)計(jì)算、日志采集等場(chǎng)景 topic 數(shù)量對(duì)吞吐量的影響 topic 可以達(dá)到幾百/幾千的級(jí)

    2024年01月19日
    瀏覽(20)
  • Kafka、ActiveMQ、RabbitMQ和RocketMQ都有哪些區(qū)別?

    Kafka、ActiveMQ、RabbitMQ和RocketMQ都有哪些區(qū)別?

    Kafka、ActiveMQ、RabbitMQ和RocketMQ都是常見的消息中間件,它們都提供了高性能、高可用、可擴(kuò)展的消息傳遞機(jī)制,但它們之間也有以下一些區(qū)別: 1、消息傳遞模型:Kafka主要支持發(fā)布-訂閱模型,ActiveMQ、RabbitMQ和RocketMQ則同時(shí)支持點(diǎn)對(duì)點(diǎn)和發(fā)布-訂閱兩種模型。 2、性能和吞吐量:

    2024年04月11日
    瀏覽(30)
  • RabbitMQ 和 Kafka的區(qū)別比較

    RabbitMQ 和 Kafka的區(qū)別比較

    關(guān)于Rabbitmq和kafka的特點(diǎn)比較,可以說這是一道老生常談的面試題了,今天耀哥也來回答一下。廢話少說,我們直接來看RabbitMQ和Kafka各自的特點(diǎn)及區(qū)別到底有哪些。 1.RabbitMQ的特點(diǎn) RabbitMQ是AMQP(高級(jí)消息隊(duì)列協(xié)議)的典型實(shí)現(xiàn),這是一款可靠的、可擴(kuò)展的、可管理的、高可用的消

    2024年02月11日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包