概述
Apache RocketMQ是一個低延時、高性能暮顺、可靠的分布式消息流平臺秀存,它具有兆級容量和靈活擴展性的特點。它包括四個部分:name servers, brokers, producers and consumers或链。每個部分都能水平擴展以避免單點故障澳盐。
Name Server 集群
Name Servers 提供輕量級的服務(wù)發(fā)現(xiàn)和路由功能令宿。每個Name Server記錄全部的路由信息粒没,提供相應(yīng)的讀寫服務(wù)簇爆,支持快速存儲擴展。
Broker 集群
Broker 集群通過TOPIC和QUEUE機制實現(xiàn)消息存儲功能入蛆。Broker支持Push和Pull兩種模式,容錯機制(2到3個備份)安寺,和短時間內(nèi)應(yīng)對成百上千億消息的強大的削峰填谷功能。另外,Broker還支持災(zāi)難恢復(fù)软能,豐富的統(tǒng)計指標等等一系列在傳統(tǒng)消息系統(tǒng)中缺乏的可選機制。
Producer 集群
Producer支持分布式部署查排。分布式的Producers通過多路負載均衡模式向Broker集群發(fā)送消息。發(fā)送程序支持快速失敗和低延時岖瑰。
Consumer 集群
Consumer同樣支持分布式部署蹋订,而且支持Push和Pull兩種模式刻伊。它還支持集群消費和消息廣播。同時提供實時消息訂閱以滿足更多消費需求捶箱。
push: Broker向Consumer推送消息,有可能將消費者壓垮
pull: Consumer主動向Broker拉取消息
Name Server
Name Server是一個功能完備的服務(wù)器荠锭,它只要有兩個功能:
- Broker 管理晨川。Name Server接收Broker集群注冊键思,并且提供心跳機制檢測Broker是否存活甫贯。
- 路由管理。每個Name Server都有完整的Broker路由信息和隊列信息赔桌,供客戶端查詢
眾所周知渴逻,RocketMQ的客戶端(Producer/Consumer)在Name Server上查詢隊列路由信息,但是客戶端怎么發(fā)現(xiàn)Name Server地址呢惨奕?
以下有四種方式:
- 編程方式,像
producer.setNamesrvAddr("ip:port")
- java 參數(shù)雹洗,用
rocketmq.namesrv.addr
- 環(huán)境變量卧波,用
NAMESRV_ADDR
- HTTP 接口
更多詳情請點擊這里.
Broker Server
Broker 負責(zé)消息的存儲、分發(fā)螃成、查詢以及高可用保證(防丟)等等查坪。
Broker有以下幾個重要模塊:
- 遠程模塊,broker的入口氮凝,處理客戶端請求
- 客戶端管理,管理客戶端和維持Consumer Topic訂閱
- 存儲服務(wù)覆醇,提供簡單的API落地消息以及從磁盤查詢數(shù)據(jù)
- 高可用服務(wù)(HA)永脓,在Broker Server之前同步數(shù)據(jù)
- 索引服務(wù)鞋仍,通過特殊key給消息建立索引,提供快速的消息查詢。