歡迎光臨
每天分享高質量文章

被視為代替Kafka的訊息佇列:Apache Pulsar設計簡介

導讀:在傳統訊息系統中,存在一些問題。一方面,訊息的儲存和服務一般是緊耦合的,節點的擴容和運維不便,特別是在需要多備份來保證高可用性的場景。另一方面,訊息的消費樣式被固定,在企業內部需要維護多套系統來保證不同的訊息消費場景。另外訊息系統中,多租戶,多機房互備等企業級的特性和功能也不太豐富。

 

Apache Pulsar採用了分層的架構,解決了儲存計算的耦合,同時提供了很好的擴展性和可維護性。Pulsar也通過訂閱層的抽象,提供了統一的訊息消費模型。特別是在Pulsar的設計之初,就註重對多租戶,多機房互備等方面的需求,提供了眾多完備的企業級的特性。

 

Apache Pulsar從2015年初在Yahoo全球近十個機房內部大規模部署,穩定服務了Yahoo內部郵箱,金融,Flickr,廣告,NoSQL等眾多的應用場景,一共創建了80多個租戶,230多萬個topic。 智聯招聘在18年用Pulsar替換了線上原有的RabbitMQ,作為內部的訊息總線,服務內部的20多個應用,每天會產生6億多條訊息和3TB的資料。在減輕硬體,運維和部署成本的同時,為系統提供了更好的服務質量和擴展性。

 

Apache Pulsar,是一個使用Apache Bookkeeper提供持久化的pub/sub訊息平臺,它可以提供如下特性:

  • 跨地域複製
  • 多租戶
  • 零資料丟失
  • 零Rebalancing時間
  • 統一的佇列和流模型
  • 高可擴展性
  • 高吞吐量
  • Pulsar Proxy
  • 函式

 

Apache Pulsar的文件對這些特性都有詳細解釋,有興趣可以去看官方文件。

 

架構

 

 

Pulsar使用分層結構,將儲存機制與broker隔離開來。此體系結構為Pulsar提供以下好處:

  1. 獨立擴展broker
  2. 獨立擴展儲存(Bookies)
  3. 更容易容器化Zookeeper, Broker and Bookies
  4. ZooKeeper提供集群的配置和狀態儲存

 

亮點如下:

  1. 負載均衡器:Pulsar內置負載均衡器,可在內部將負載分配給所有broker
  2. 服務發現:Pulsar具有內置的服務發現功能,可以識別在何處以及如何連接到broker。
  3. 全域性複製器:可以在為同一個命名空間配置的N個borker之間複製資料。
  4. 全域性ZK: 全域性ZK用於實現跨地域複製

     

跨地域複製

 

跨地域複製是Pulsar提供的解決方案。全域性集群可以在名稱空間級別進行配置,以便在任意數量的集群(n-wayMesh解決方案)中進行複製。從下麵的示例中,資料中心C沒有消費者,但資料中心A或B中仍會根據訂閱模型消費訊息。

 

多租戶

 

多租戶特性通過對資料儲存的隔離,幫助為企業建立Pulsar集群。這一內置功能將大大降低組織的基礎設施建設和運營成本。

 

零Rebalancing時間

 

Pulsar的分層架構和代理的無狀態性質有助於實現零Rebalancing時間。如果一個新的broker被添加到集群中,它將立即可用;無需在集群中rebalancing資料。

從Bookies的角度來看:當一個新的Bookie添加到集群中時,由於其底層的分佈式日誌架構(讀/寫隔離),該節點立刻可以寫入資料。基於段複製配置的資料rebalance在後臺進行,不會對集群產生任何影響。

 

統一的佇列和流模型

 

Pulsar使用同一個模型支持流和佇列語意。這個特性可以通過訂閱模型實現。消費者使用訂閱模型中的任何一個訂閱主題:

  1. Exclusive – 支持流語意
  2. Failover – 支持流語意
  3. Shared – 支持佇列語意

 

函式

 

函式是能夠在Pulsar內部或外部存在的本地監聽器。從用途本身來看,函式可用於基於內容的路由,這將幫助企業應用程式路由預期的訊息。

 

Proxy

 

當broker部署在雲或Kubernetes中時,需要使用proxy將broker暴露於外部世界。Proxy本身可以提供身份驗證和授權。Proxy內置將授權令牌傳遞給broker以進行命名空間權限驗證的功能。

 

結論

 

Apache Pulsar使用基於分層體系結構的pub/sub模型,它具有跨地域複製、多租戶、零Rebalancing時間等功能。

 

原文地址:https://medium.com/@pckeyan/apache-pulsar-gentle-introduction-465ca6da0e18

已同步到看一看
赞(0)

分享創造快樂