首先抄一段解釋說明怀伦。。山林。
消息隊列中間件是分布式系統(tǒng)中重要的組件房待,主要解決應用耦合,異步消息驼抹,流量削鋒等問題桑孩,實現(xiàn)高性能,高可用框冀,可伸縮和最終一致性架構(gòu)
消息隊列的基本概念
- 生產(chǎn)者流椒,發(fā)送消息到消息隊列即生產(chǎn)消息的上游
- 消費者,接收消息的下游
- 消息隊列明也,生產(chǎn)者產(chǎn)生消息發(fā)送給消息隊列宣虾,消費者從消息隊列取出關注的消息進行消費
- topic,即主題温数,可以供消費者訂閱绣硝,這樣消費者就只取自己關注的消息或者消息隊列只將消費者關注的主題相關的消息發(fā)送給該消費者
- broker,MQ集群包含多臺服務器撑刺,其中一臺就稱為broker
消息傳輸模型
req/rep(請求答復模式):主要用于遠程調(diào)用及任務分配等域那。
pub/sub(訂閱模式):主要用于數(shù)據(jù)分發(fā)。
push/pull(管道模式):主要用于多任務并行。
- 要保證數(shù)據(jù)處理的順序性
- 傳輸過程中需要注意的是如何進行負載均衡的分配
- 為防止消息隊列的數(shù)據(jù)堆積需要設置消息的高水位
- 考慮到由于消息堆積或者節(jié)點失效可能導致數(shù)據(jù)丟失次员,所以需要進行消息的持久化
- 如果需要消息支持事務的話败许,要支持處理失敗的消息回滾
下面以kafka為例加深對消息隊列的理解
Kafka設計解析(一)- Kafka背景及架構(gòu)介紹
讀完上面的文章提出幾個問題:
- 消息隊列即FIFO,一個隊列好保證順序淑蔚,假如多個隊列接收一個producer的消息是怎么保證消息的順序性的呢市殷?
在發(fā)送一條消息時,可以指定這條消息的key刹衫,Producer根據(jù)這個key和Partition機制來判斷應該將這條消息發(fā)送到哪個Parition醋寝。Paritition機制可以通過指定Producer的paritition. class這一參數(shù)來指定,該class必須實現(xiàn)kafka.producer.Partitioner接口带迟。本例中如果key可以被解析為整數(shù)則將對應的整數(shù)與Partition總數(shù)取余音羞,該消息會被發(fā)送到該數(shù)對應的Partition。(每個Parition都會有個序號,序號從0開始)
- 這里講了producer到broker進行負載均衡的方式仓犬,都有哪些Paritition機制
- consumer以group為單位去pull消息嗅绰,在group范圍內(nèi)進行負載均衡,這里的負載均衡是怎么做的呢搀继,也是哈希取余嗎