分佈式消息流平台:不要只想着Kafka,還有Pulsar

語言: CN / TW / HK
摘要:Pulsar作為一個雲原生的分佈式消息流平台,越來越頻繁地出現在人們的視野中,大有替代Kafka江湖地位的趨勢。

本文分享自華為雲社區《MRS Pulsar:下一代分佈式消息流平台全新發布!》,作者: Lothar。

Pulsar的前世今生

Apache Pulsar是一個發佈-訂閲消息系統,使用計算與存儲分離的雲原生架構。Pulsar 2018年9月成為ASF頂級項目,近兩年,隨着社區不斷髮展和諸多企業的應用和貢獻,Pulsar作為一個雲原生的分佈式消息流平台,越來越頻繁地出現在人們的視野中,大有替代Kafka江湖地位的趨勢。

Pulsar和Kafka的對比

Pulsar和Kafka架構上最大的不同是,Kafka由Broker進行消息的收發和持久化,數據存儲在本地文件系統,由Broker統一管理。這也意味着數據和消息處理是耦合的。

Kafka官網描述道:Kafka重度依賴文件系統,用於存儲或緩存消息。當Broker接收到消息時,會將消息追加寫到本地磁盤上。這一架構決定了Partition和Broker的對應關係是相對固定的,只有在partition reassign時才會發生數據遷移。Partition的Leader在數據副本分佈節點上產生,用於處理生產消費請求。

而Pulsar採用了計算存儲分離架構,這也是Pulsar被稱作雲原生平台的主要原因。Pulsar依賴Apache BookKeeper管理持久化數據,Apache BookKeeper是可擴展、可容錯、低延遲的日誌存儲服務,能夠保證在強持久性下的低延遲讀寫。

*引自Pulsar官網介紹:https://pulsar.apache.org/docs/en/concepts-architecture-overview/

Broker接收請求後,數據實際分佈式存儲在BookKeeper服務中。在數據的物理存儲模型中某個Topic或Partition的數據並不固定存儲在某個Bookie實例上。

Pulsar將分佈式日誌劃分為多個Segment,每個Segment對應BookKeeper中的一個Ledger。與Kafka將某一Partition的數據日誌保存在某一固定目錄下不同,Pulsar通過劃分Segment的方式,可以將同一topic或partition分佈到不同的Bookie上。

Pulsar的優勢特性

靈活擴展

相信很多使用Kafka的客户都有類似的經歷:

  • 磁盤空間不足,只能調整數據TTL,或擴容機器後向新的Broker中遷移Partition
  • Topic或Partition間數據分配不均勻,節點之間或磁盤之間使用不均衡,有的磁盤已經滿了,而有的磁盤還有很多空間
  • Broker機器故障,需要將數據遷移到其他節點後下電維修

Pulsar的存算分離架構天然地避免了這些問題。Pulsar Broker本身是無狀態的,當某個Broker故障時,另一個Broker可以立即接管對應的Topic而不需要遷移數據。BookKeeper分佈式日誌保證了存儲節點間的數據均衡,不會因某一個Partitoin或Topic數據過多而導致IO集中在某一節點上。

當集羣需要擴容時,Broker可以立即感知到新加入集羣的Bookie,並將新寫入的數據存儲到新添加的Bookie中。

多租户

Kafka社區在KIP-37正在討論加入NameSpace以實現多租户特性,而Pulsar已實現這一功能。在企業中,消息隊列服務通常會被多個團隊使用,在使用Kafka時,有時需要為每個團隊維護一個Kafka集羣。Pulsar可以配置多個租户,每個租户可以有多個NameSpace,管理員可以對NameSpace進行訪問控制、配額管理。

更靈活的訂閲模式

Kafka對消息的劃分分為兩層:對於屬於同一個Group的KafkaConsumer,其獲取到的消息是互斥的,即某一條消息只能被Group中的一個Consumer處理;對於不同的Group,某一條消息將同時被兩個Group處理,消息是共享的。

而Pulsar提供了更靈活的訂閲模式:

  • 獨佔式:

在任意時間,Topic中的數據只能被Group中的一個Consumer消費,不允許其他Consumer獲取消息

  • 主備式:

多個Consumer同時消費同一個Topic時,只有一個Consumer被選為主Consumer,其他Consumer則成為備Consumer。當主Consumer故障時,發生主備倒換,備Consumer中的一個將升主,並繼續消息的消費。

  • 共享式:

與Kafka類似,使用共享模式,消息將循環分發給不同的Consumer,當某個Consumer故障時,消息將被重新分配給其他Consumer。

分層存儲

Pulsar另一個很有吸引裏的特性是,流式數據可以轉冷並存儲在更廉價的存儲介質上。通常為了保證性能,流式處理系統配備高性能的SSD。對於Kafka來説,所有需要保留的消息都必須駐留在昂貴的SSD上。有些時候,數據寫入一段時間後已不在會被使用,但仍需保留一段時間存檔。Pulsar支持將這種冷數據轉儲到離線存儲系統中,BookKeeper只需要保留一部分熱數據,可以節省很多存儲成本。該特性無疑是很有價值的,Kafka社區同樣在進行設計(KIP-405),但目前還沒有實現。

Pulsar的性能指標

Kafka和Pulsar社區都針對性能進行了對比測試。綜合來看,由於Pulsar數據落盤時,會進行同步fsync,持久性要比Kafka更高,Pulsar社區對此作出修改後進行對比測試,部分測試結果如下:

*引自Pulsar社區性能測試報告

在100 Partition時,默認配置下pulsar的吞吐量距離Kafka差距明顯,但當本地持久化等級設置為與Kafka相同時,吞吐量與Kafka基本持平。

*引自Pulsar社區性能測試報告

當Partition數增加到2000個時,Pulsar默認本地持久度的吞吐量基本與Kafka持平。

更多細節請移步SreamNative的benckmarking測試報告:benchmarking pulsar kafka a more accurate perspective on pulsar performance.pdf

MRS上的Pulsar

MRS已發佈Pulsar的POC版本,客户可以一鍵式部署Pulsar服務,包括Broker和Bookie角色。支持在Web UI上修改Pulsar配置、啟停、監控。

此外MRS還默認集成了KoP。KoP是Pulsar社區開源的一個插件,運行在Pulsar上,用以兼容Kafka協議。使用時,Kafka客户端可以修改連接地址後直接切換到Pulsar集羣上,而不需要修改業務對Kafka客户端的依賴。

在MRS Pulsar的商用版本正在規劃中,我們將探索Pulsar在雲上使用的更多可能,進一步發揮Pulsar存算分離的優勢,降低成本,提升資源利用率,為客户創造更多價值,敬請期待。

 

點擊關注,第一時間瞭解華為雲新鮮技術~