What is Pulsar簡介
What is Pulsar
"Pulsar is a distributed pub-sub messaging platform with a very flexible messaging model and an intuitive client API."
Pulsar是pub-sub模式的分散式訊息平臺,擁有靈活的訊息模型和直觀的客戶端API。
Pulsar由雅虎開發並開源的下一代訊息系統,目前是Apache軟體基金會的孵化器專案。
概念
Topic
Topic是Pulsar的核心概念,表示一個“channel”,Producer可以寫入資料,Consumer從中消費資料(Kafka、RocketMQ都是這樣)。
Topic名稱的URL類似如下的結構:
{persistent|non-persistent}://tenant/namespace/topic
- persistent|non-persistent表示資料是否持久化(Pulsar支援訊息持久化和非持久化兩種模式)
- Tenant為租戶
- Namespace一般聚合一系列相關的Topic,一個租戶下可以有多個Namespace
租戶和Namespace
上圖中Property即為租戶,每個租戶下可以有多個Namespace,每個Namespace下有多個Topic鄭州看婦科哪家好:http://www.88882686.com/鄭州正規婦科醫院:http://www.88882686.com/鄭州婦科哪個好:http://www.88882686.com/鄭州同濟醫院:http://www.zzyyrl.com/鄭州人流專業醫院:http://www.zzyyrl.com/鄭州專業人流醫院:http://yiyuan.120ask.com/zzfck/
Namespace是Pulsar中的操作單元,包括Topic是配置在Namespace級別的,包括多地域複製,訊息過期策略等都是配置在Namespace上的。
訂閱模型
Pulsar提供了靈活的訊息模型,支援三種訂閱型別:
- Exclusive subscription:排他的,只能有一個Consumer,接收一個Topic所有的訊息
- Shared subscription:共享的,可以同時存在多個Consumer,每個Consumer處理Topic中一部訊息(Shared模型是不保證訊息順序的,Consumer數量可以超過分割槽的數量)
- Failover subscription:Failover模式,同一時刻只有一個有效的Consumer,其餘的Consumer作為備用節點,在Master Consumer不可用後進行替代(看起來適用於資料量小,且解決單點故障的場景)
分割槽
為了解決吞吐等問題,Pulsar和Kafka一樣,採用了分割槽(Partition)的機制。
Pulsar提供了一些策略來處理訊息到Partition的路由(MessageRouter):
- Single partitioning:Producer隨機選擇一個Partition並將所有訊息寫入到這個分割槽
- Round robin partitioning :採用Round robin的方式,輪訓所有分割槽進行訊息寫入
- Hash partitioning:這種模式每條訊息有一個Key,Producer根據訊息的Key的雜湊值進行分割槽的選擇(Key相同的訊息可以保證順序)。
- Custom partitioning:使用者自定義路由策略
不同於別的MQ系統,Pulsar允許Consumer的數量超過分割槽的數量(對於RocketMQ,超過分割槽數的Consumer會分配不到分割槽而“空跑”)。
在Shared subscription的訂閱模式下,Consumer數量可以大於分割槽的數量,每個Consumer處理每個Partition中的一部分訊息,不保證訊息的順序。
持久化
Pulsar通過BookKeeper來儲存訊息,保證訊息不會丟失(BookKeeper:A scalable, fault-tolerant, and low-latency storage service optimized for real-time workloads)。