訂閱模型
Pulsar提供了靈活的消息模型赞咙,支持三種訂閱類(lèi)型:
- Exclusive subscription:排他褐奥,只能有一個(gè)Consumer冤寿,接收一個(gè)Topic所有的消息
- Shared subscription:共享钙姊,可以同時(shí)存在多個(gè)Consumer,每個(gè)Consumer處理Topic中一部消息(Shared模型是不保證消息順序的发钝,Consumer數(shù)量可以超過(guò)分區(qū)的數(shù)量)
-
Failover subscription:災(zāi)備模式顿涣,同一時(shí)刻只有一個(gè)有效的Consumer,其余的Consumer作為備用節(jié)點(diǎn)酝豪,在Master Consumer不可用后進(jìn)行替代(看起來(lái)適用于數(shù)據(jù)量小涛碑,且解決單點(diǎn)故障的場(chǎng)景)
image.png
分區(qū)
為了解決吞吐等問(wèn)題,Pulsar和Kafka一樣孵淘,采用了分區(qū)(Partition)的機(jī)制蒲障。
Pulsar提供了一些策略來(lái)處理消息到Partition的路由(MessageRouter):
- Single partitioning:Producer隨機(jī)選擇一個(gè)Partition并將所有消息寫(xiě)入到這個(gè)分區(qū)
- Round robin partitioning :采用Round robin的方式,輪訓(xùn)所有分區(qū)進(jìn)行消息寫(xiě)入
- Hash partitioning:這種模式每條消息有一個(gè)Key瘫证,Producer根據(jù)消息的Key的哈希值進(jìn)行分區(qū)的選擇(Key相同的消息可以保證順序)揉阎。
默認(rèn)
- Custom partitioning:用戶(hù)自定義路由策略
持久化
Pulsar通過(guò)BookKeeper來(lái)存儲(chǔ)消息,保證消息不會(huì)丟失
Pulsar采用“存儲(chǔ)和服務(wù)分離”的兩層架構(gòu)(這是Pulsar區(qū)別于其他MQ系統(tǒng)最重要的一點(diǎn)背捌,也是所謂的“下一代消息系統(tǒng)”的核心):
Broker:提供發(fā)布和訂閱的服務(wù)(Pulsar的組件)
Bookie:提供存儲(chǔ)能力(BookKeeper的存儲(chǔ)組件)
通過(guò)兩層架構(gòu)使broker變成無(wú)狀態(tài)毙籽,可以水平擴(kuò)容。高可靠和一致性通過(guò)bookkeeper保證毡庆。
數(shù)據(jù)復(fù)制
- 采用ZooKeeper存儲(chǔ)元數(shù)據(jù)坑赡,集群配置,作為協(xié)調(diào)器
-- local zk負(fù)責(zé)Pulsar Cluster內(nèi)部的配置等
-- global zk則用于Pulsar Cluster之間的數(shù)據(jù)復(fù)制等 - 采用Bookie作為存儲(chǔ)設(shè)備
- Broker負(fù)責(zé)負(fù)載均衡和消息的讀取么抗、寫(xiě)入等
- Global replicators負(fù)責(zé)集群間的數(shù)據(jù)復(fù)制
GEO-REPLICATION(地理復(fù)制)
多個(gè)Broker節(jié)點(diǎn)組成一個(gè)Pulsar Cluster垮衷;多個(gè)Pulsar Cluster組成一個(gè)Pulsar Instance。
Pulsar通過(guò)GEO-REPLICATION支持一個(gè)Instance內(nèi)在不同的地域發(fā)送和消費(fèi)消息乖坠。
在這個(gè)圖中搀突,每當(dāng) P1、P2 和 P3 的生產(chǎn)者分別向Cluster-A熊泵、Cluster-B和Cluster-C 中的T1 topic發(fā)送消息時(shí)仰迁,這些消息很快在不同的集群中復(fù)制,C1顽分,C2可以在自己的集群內(nèi)消費(fèi)到所有的數(shù)據(jù)徐许。