消息中間件的常見問題-創(chuàng)新互聯(lián)

1、什么是消息中間件?
是利用高效可靠的消息傳遞機(jī)制進(jìn)行異步的數(shù)據(jù)傳輸,并基于數(shù)據(jù)通信進(jìn)行分布式系統(tǒng)的集成。通過提供消息隊(duì)列模型和消息傳遞機(jī)制,可以在分布式環(huán)境下擴(kuò)展進(jìn)程間的通信。

創(chuàng)新互聯(lián)建站長期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為順昌企業(yè)提供專業(yè)的成都網(wǎng)站制作、做網(wǎng)站,順昌網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

2、為什么要使用消息中間件?

系統(tǒng)解耦:
使用消息隊(duì)列來作為兩個(gè)系統(tǒng)的通訊方式。兩個(gè)系統(tǒng)不需要相互依賴,實(shí)現(xiàn)解耦。
請?zhí)砑訄D片描述
異步調(diào)用:
系統(tǒng)C給消息隊(duì)列發(fā)送消息后,可以非阻塞執(zhí)行其他任務(wù)。
請?zhí)砑訄D片描述
流量削峰:
高峰期積壓一些請求在MQ里,然后高峰期過了,由消費(fèi)者自己控制消費(fèi)速度,在一定時(shí)間內(nèi)消費(fèi)完畢.
請?zhí)砑訄D片描述
3、消息中間件有哪些傳遞模式?

消息中間件一般有兩種傳遞模式:
點(diǎn)對點(diǎn)模式:
一對一,消息生產(chǎn)者將消息發(fā)送到消息隊(duì)列中,消息消費(fèi)者從隊(duì)列中接收消息。消息可以在消息隊(duì)列中進(jìn)行異步傳輸。

發(fā)布/訂閱模式:
一對多,通過一個(gè)內(nèi)容節(jié)點(diǎn)(主題topic)來發(fā)布和訂閱消息,消息發(fā)布者將消息發(fā)布到某個(gè)主題,消息訂閱者訂閱這個(gè)主題的消息。消息的發(fā)布與訂閱相互獨(dú)立。

4、如何保證消息不被重復(fù)消費(fèi)?
Kafka內(nèi)部:在每個(gè) MQ 寫入隊(duì)列時(shí),會給這條數(shù)據(jù)分配一個(gè)序號 offset,消費(fèi)者在消費(fèi)數(shù)據(jù)時(shí),會把消費(fèi)過的 offset序號 提交,下次從大于提交序號的最小數(shù)據(jù)開始消費(fèi)。

5、Kafka的rebalance機(jī)制是什么?
消費(fèi)者分區(qū)分配策略:輪詢分區(qū)、Sticky策略、Range范圍分區(qū)(默認(rèn))

什么時(shí)候會觸發(fā)?
只要數(shù)據(jù)量發(fā)生變化的時(shí)候,就會觸發(fā)rebalance機(jī)制。組員個(gè)數(shù)發(fā)生變化、訂閱topic個(gè)數(shù)發(fā)生變化、訂閱topic分區(qū)數(shù)發(fā)生變化

Kafka是pull?push?以及優(yōu)劣勢分析
Kafka遵循傳統(tǒng)設(shè)計(jì):producer將消息推送到broker,consumer從broker拉取消息.
kafka選取傳統(tǒng)pull模式,push模式下當(dāng)producer推送的速率遠(yuǎn)大于consumer消費(fèi)的速率時(shí),consumer可能崩潰且pull模式下如果broker沒有可供消息的信息,導(dǎo)致consumer不斷在循環(huán)中輪詢,直到消息到達(dá)。其次,pull模式下的consumer可以自主決定是否批量從broker拉取數(shù)據(jù)。

Kafka消息丟失的場景有哪些?
生產(chǎn)者在生產(chǎn)過程中的消息丟失。ACK=0,producer發(fā)送一次就不發(fā)送了,不管是否發(fā)送成功。
broker在故障后的消息丟失。ACK=1(默認(rèn)),吞吐量與可靠性的一個(gè)折中方案。
消費(fèi)者在消費(fèi)過程中的消息丟失。ACK=-1,生產(chǎn)和存儲不會丟失數(shù)據(jù),(消費(fèi)丟失)
ACK機(jī)制為1、0、-1
OFFset機(jī)制:kafka消費(fèi)者的三種消費(fèi)語義
at-most-once:最多一次(可能丟數(shù)據(jù)?)
at-least-once:最少一次(可能重復(fù)消費(fèi)數(shù)據(jù)+)
exact-once message:精確一次 1

kafka中zookeeper的作用是什么?
zookeeper是分布式協(xié)調(diào),不是數(shù)據(jù)庫。
kafka使用zookeeper的分布式鎖和分布式配置及統(tǒng)一命名的分布式協(xié)調(diào)解決方案
kafka的broker集群中的controller的選擇,是通過zookeeper的臨時(shí)節(jié)點(diǎn)爭搶獲得的。
kafka中broker中的狀態(tài)數(shù)據(jù)存儲在zookeeper中,zookeeper不是數(shù)據(jù)庫,存儲的屬于元數(shù)據(jù)。

kafka中高性能如何保障?
性能的大瓶頸是IO,broker持久化數(shù)據(jù)時(shí)使用磁盤順序讀寫,再進(jìn)一步優(yōu)化就是0拷貝的使用(從磁盤日志到消費(fèi)者客戶端的數(shù)據(jù)傳遞),分布式系統(tǒng)做tradeoff,速度與可用性/可靠性.

6、RabbitMq的架構(gòu)設(shè)計(jì)?
是單機(jī)的mq組件。是AMQP的實(shí)現(xiàn)。
Broker:提供一種傳輸服務(wù),角色就是維護(hù)生產(chǎn)者到消費(fèi)者的路線,保證數(shù)據(jù)能安裝指定的方式進(jìn)行傳輸。
Exchange:消息交換機(jī),指定消息按什么規(guī)則,路由到那個(gè)隊(duì)列。
Queue:消息載體,每個(gè)消息都會被偷到一個(gè)或多個(gè)隊(duì)列
Bindind:綁定,吧exchange和queue按照路由規(guī)則綁定起來
RoutingKey:路由關(guān)鍵字,exchange根據(jù)關(guān)鍵字消息投遞
vhost:虛擬主機(jī),一個(gè)broker里有多個(gè)vhost,用于不同用戶權(quán)限分離
Producer:消息生產(chǎn)者,投遞消息的程序
Consomer:消息消費(fèi)者,接受消息的程序
Channel:消息通道,在客戶端的每個(gè)連接里,可建立多個(gè)channel
核心:在mq領(lǐng)域中,producer將msg發(fā)送queue,consumer消費(fèi)queue完成pc接口
kafka由producer決定msg發(fā)送到那個(gè)queue
rabbitmq由exchange決定msg怎樣發(fā)送到目標(biāo)queue,這就是bingding及對應(yīng)的策略。

7、RabbitMq的事務(wù)消息原理?
有事務(wù)、確認(rèn)。確認(rèn)是對一件事的確認(rèn),事務(wù)是對批量的確認(rèn)。增刪改查中,事務(wù)是對于增刪改的保證。
發(fā)送方事務(wù):開啟事務(wù),發(fā)送多條數(shù)據(jù),事務(wù)提交|回滾是原子性的,要么都提交,要么都回滾.
消費(fèi)方事務(wù):消費(fèi)方是讀取行為,ACK是要手動提交,最終確定以事務(wù)的提交|回滾決定。

8、RabbitMq的如何保證消息發(fā)送和消息接收?
消息發(fā)送確認(rèn):ConfirmCallback方法,消息發(fā)送到broker后回調(diào),確認(rèn)消息是否到達(dá)broker服務(wù)器(確認(rèn)是否到達(dá)exchange)
returnCallBack方法,失敗返回,路由不到隊(duì)列時(shí)回調(diào)(可以不用,交換機(jī)和隊(duì)列在代碼里綁定)
消息確認(rèn)模式:自動確認(rèn)、根據(jù)情況確認(rèn)、手動確認(rèn)
消息接收確認(rèn):消息確認(rèn)機(jī)制(ACK)默認(rèn)自動確認(rèn),發(fā)送給消費(fèi)者后立即確認(rèn),但存在丟失消息的可能,若消費(fèi)端拋異常,回滾只保證數(shù)據(jù)的一致性,消息還是丟失。即沒有成功處理就丟失。
消息確認(rèn)模式:確認(rèn)當(dāng)前信息、否定當(dāng)前信息、拒絕當(dāng)前信息

9、RabbitMq的死信隊(duì)列、延時(shí)隊(duì)列是如何實(shí)現(xiàn)的?
DLX:死信交換機(jī)。
死信隊(duì)列:當(dāng)隊(duì)列中消息被拒絕、過期會變成死信,死信可以被重新發(fā)布到另一個(gè)交換機(jī),這個(gè)交換機(jī)就是死信隊(duì)列。

原因:信息被拒接、過期、超時(shí)、超過子隊(duì)列的大長度
死信隊(duì)列中,可以為普通交換器綁定多個(gè)消息隊(duì)列,假設(shè)綁定過期時(shí)間為5分鐘、10分鐘和30分鐘,3個(gè)消息隊(duì)列,每個(gè)隊(duì)列設(shè)置DLX,并關(guān)聯(lián)一個(gè)死信隊(duì)列。過期后的消息轉(zhuǎn)存死信隊(duì)列,投遞指定消費(fèi)者消費(fèi)。

設(shè)置過期消息的兩種方式:
①x-message-ttl,所有消息相同過期時(shí)間;
②expiration屬性,每條消息過期時(shí)間不同,以過期時(shí)間小的為準(zhǔn)。

消息到達(dá)過期時(shí)間沒有被消費(fèi),消息就變成死信消息。

延遲隊(duì)列:存儲延遲消息。消息發(fā)布后,指定時(shí)間之后再投遞消費(fèi)者。如訂單30s內(nèi)付款,超時(shí)后偷掉消費(fèi)者處理超時(shí)訂單。

rabbitMQ沒有直接支持延遲隊(duì)列,可以通過死信隊(duì)列實(shí)現(xiàn)。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

標(biāo)題名稱:消息中間件的常見問題-創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://bm7419.com/article36/cedcpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、微信小程序、面包屑導(dǎo)航企業(yè)建站、定制開發(fā)、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化