前言
消息隊(duì)列說明:RocketMQ、kafka、RabbitMQ概述及關(guān)鍵概念
消息隊(duì)列-Message Queue
概述
消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合,異步消息,流量控制等問題。實(shí)現(xiàn)高性能、高可用、可伸縮和最終一致性架構(gòu),是大型分布式系統(tǒng)不可缺少的中間件
作用
- 異構(gòu)系統(tǒng)消息傳遞:上游系統(tǒng)C#>消息隊(duì)列>下游系統(tǒng)Java
- 基于“訂閱發(fā)布”的一對多的數(shù)據(jù)分發(fā):中國氣象局==>消息隊(duì)列==>網(wǎng)易、微博、微信
- 削峰、限流、日志處理、流程跟蹤:OA提供==>消息隊(duì)列(限流)>公文系統(tǒng)>郵件服務(wù)商
幾種消息隊(duì)列中間件對比
- ActiveMQ:出現(xiàn)最早,支持的功能多而不精
- Kafka:吞吐量大==>大數(shù)據(jù)
- RocketMQ:單個(gè)消息處理及時(shí)性高,響應(yīng)快==>業(yè)務(wù)系統(tǒng)
- RabbitMQ:延遲最低、基于erlang開發(fā),并發(fā)能力極強(qiáng)
RocketMQ
概述
阿里開源的消息中間件產(chǎn)品,純Java開發(fā),具有高吞吐量、高可用性、適合大規(guī)模分布式系統(tǒng)應(yīng)用的特點(diǎn),性能強(qiáng)勁(零拷貝技術(shù)),支持海量堆積,在阿里內(nèi)部進(jìn)行大規(guī)模使用,適合在互聯(lián)網(wǎng)與高并發(fā)系統(tǒng)中應(yīng)用
關(guān)鍵概念
主題:Topic
- RocketMQ的頂層存儲(chǔ),所有消息資源的定義都在主題內(nèi)部完成,但主題是一個(gè)邏輯概念,并不是實(shí)際的消息容器
- 主題內(nèi)部由多個(gè)隊(duì)列組成,消息的存儲(chǔ)和水平擴(kuò)展能力最終是由隊(duì)列實(shí)現(xiàn)的,并且針對主題的所有約束和屬性設(shè)置,最終也是通過主題內(nèi)部的隊(duì)列實(shí)現(xiàn)
消息隊(duì)列:MessageQueue
- 隊(duì)列是消息存儲(chǔ)和傳輸?shù)娜萜鳎窍⒌淖钚〈鎯?chǔ)單元
- 所有主題都是由多個(gè)隊(duì)列組成,以此實(shí)現(xiàn)隊(duì)列數(shù)量的水平拆分和隊(duì)列內(nèi)部的流式存儲(chǔ)
消息:Message
- 最小數(shù)據(jù)傳輸單元
- 生產(chǎn)者將業(yè)務(wù)數(shù)據(jù)的負(fù)載和拓展屬性包裝成消息發(fā)送到服務(wù)端
- 服務(wù)端按照相關(guān)語義將消息投遞到消費(fèi)端進(jìn)行消費(fèi)
生產(chǎn)者:Producer
- 用來構(gòu)建并傳輸消息到服務(wù)端的運(yùn)行實(shí)體
- 被集成在業(yè)務(wù)系統(tǒng)中,將業(yè)務(wù)消息按照要求封裝成消息并發(fā)送到RocketMQ服務(wù)端
- 生產(chǎn)者和主題的關(guān)系為多對多
消費(fèi)者:Consumer
- 用來接收并處理消息的運(yùn)行實(shí)體
- 被集成在業(yè)務(wù)系統(tǒng)中,從RocketMQ服務(wù)端獲取消息,并將消息轉(zhuǎn)化為業(yè)務(wù)可理解的信息,供業(yè)務(wù)邏輯處理
消費(fèi)者分組:Consumer Group
- RocketMQ系統(tǒng)中承載多個(gè)消費(fèi)行為的消費(fèi)者的負(fù)載均衡分組
- 在RocketMQ中,通過消費(fèi)者分組內(nèi)初始化多個(gè)消費(fèi)者實(shí)現(xiàn)消費(fèi)性能的水平擴(kuò)展以及高可用容災(zāi)
kafka
概述
- 分布式、分區(qū)、多副本、多訂閱者,基于zookeeper協(xié)調(diào)的消息隊(duì)列系統(tǒng)
消息隊(duì)列模式
- 點(diǎn)對點(diǎn)
- 生產(chǎn)者發(fā)送一條消息到queue,只有一個(gè)消費(fèi)者能收到
- 一條消息只能被一個(gè)消費(fèi)一次,消費(fèi)者消費(fèi)了某條數(shù)據(jù)后,該數(shù)據(jù)從消息隊(duì)列中刪除
- 發(fā)布-訂閱模式
- 生產(chǎn)者生產(chǎn)數(shù)據(jù)到一個(gè)topic中,消費(fèi)者可以訂閱一個(gè)或多個(gè)topic,消費(fèi)者可以消費(fèi)該topic中的所有數(shù)據(jù)。同一條數(shù)據(jù)可以被多個(gè)消費(fèi)者消費(fèi),數(shù)據(jù)被消費(fèi)后不會(huì)立馬刪除
- 發(fā)布者發(fā)送到topic的消息,只有訂閱了topic的訂閱者才會(huì)收到消息
關(guān)鍵概念
節(jié)點(diǎn)-broker
Kafka集群包含一個(gè)或多個(gè)服務(wù)器,服務(wù)器節(jié)點(diǎn)稱為broker
主題-Topic
每條發(fā)布到Kafka集群的消息都有一個(gè)類別,這個(gè)類別稱為Topic。類似于數(shù)據(jù)庫的表名
分片-partition
topic中的數(shù)據(jù)分割為一個(gè)或多個(gè)partition,每個(gè)topic至少有一個(gè)partition
生產(chǎn)者-Producer
生產(chǎn)者即數(shù)據(jù)的發(fā)布者,該角色將消息發(fā)布到Kafka的topic中,broker接收到生產(chǎn)者發(fā)送的消息后,broker將該消息追加到當(dāng)前用于追加數(shù)據(jù)的segment
RabbitMQ
概述
高級消息隊(duì)列協(xié)議:Advanced Message Queuing Protocol
開源的消息代理和隊(duì)列服務(wù)器,用來通過普通協(xié)議在完全不同的應(yīng)用之間共享數(shù)據(jù);用Erlang語言編寫,基于AMQP協(xié)議
與SpringAMQP完美的整合,API豐富文章來源:http://www.zghlxwxcb.cn/news/detail-497678.html
集群模式豐富,表達(dá)式配置,HA模式,鏡像隊(duì)列模型文章來源地址http://www.zghlxwxcb.cn/news/detail-497678.html
關(guān)鍵概念
服務(wù)應(yīng)用:Server
- 又稱Broker,接受客戶端的連接,實(shí)現(xiàn)AMQP實(shí)體服務(wù)
連接:Connection
- 應(yīng)用程序與Broker的網(wǎng)絡(luò)連接
網(wǎng)絡(luò)信道:Channel
- 幾乎所有的操作都在Channel中進(jìn)行,Channel是進(jìn)行消息讀寫的通道??蛻舳丝山⒍鄠€(gè)Channel,每個(gè)Channel代表一個(gè)會(huì)話任務(wù)
消息:Message
- 服務(wù)器和應(yīng)用程序之間傳送的數(shù)據(jù),由Properties和Body組成。Properties可以對消息進(jìn)行修飾,比如消息的優(yōu)先級、延遲等高級特性;Body就是消息體內(nèi)容
虛擬地址:Virtual host
- 用于進(jìn)行邏輯隔離,最上層的消息路由。一個(gè)Virtual host里面可以有若干個(gè)Exchange和Queue,同一個(gè)Virtual Host里面不能有相同名稱的Exchange或Queue
交換機(jī):Exchange
- 接收消息,根據(jù)路由鍵轉(zhuǎn)發(fā)消息到綁定的隊(duì)列
綁定:Binding
- Exchange和Queue之間的虛擬連接,binding中可以包含routing key
路由規(guī)則:Routing key
- 一個(gè)路由規(guī)則,虛擬機(jī)可用它來確定如何路由一個(gè)特定消息
到了這里,關(guān)于【面試需了解之消息隊(duì)列】RocketMQ、kafka、RabbitMQ概述的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!