公眾號文章匯總
868
2022-05-29
Pulsar的前世今生
Apache Pulsar是一個發(fā)布-訂閱消息系統(tǒng),使用計算與存儲分離的云原生架構。Pulsar 2018年9月成為ASF頂級項目,近兩年,隨著社區(qū)不斷發(fā)展和諸多企業(yè)的應用和貢獻,Pulsar作為一個云原生的分布式消息流平臺,越來越頻繁地出現在人們的視野中,大有替代Kafka江湖地位的趨勢。
Pulsar和Kafka的對比
Pulsar和Kafka架構上最大的不同是,Kafka由Broker進行消息的收發(fā)和持久化,數據存儲在本地文件系統(tǒng),由Broker統(tǒng)一管理。這也意味著數據和消息處理是耦合的。
Kafka官網描述道:Kafka重度依賴文件系統(tǒng),用于存儲或緩存消息。當Broker接收到消息時,會將消息追加寫到本地磁盤上。這一架構決定了Partition和Broker的對應關系是相對固定的,只有在partition reassign時才會發(fā)生數據遷移。Partition的Leader在數據副本分布節(jié)點上產生,用于處理生產消費請求。
而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的優(yōu)勢特性
靈活擴展
相信很多使用Kafka的客戶都有類似的經歷:
磁盤空間不足,只能調整數據TTL,或擴容機器后向新的Broker中遷移Partition
Topic或Partition間數據分配不均勻,節(jié)點之間或磁盤之間使用不均衡,有的磁盤已經滿了,而有的磁盤還有很多空間
Broker機器故障,需要將數據遷移到其他節(jié)點后下電維修
Pulsar的存算分離架構天然地避免了這些問題。Pulsar Broker本身是無狀態(tài)的,當某個Broker故障時,另一個Broker可以立即接管對應的Topic而不需要遷移數據。BookKeeper分布式日志保證了存儲節(jié)點間的數據均衡,不會因某一個Partitoin或Topic數據過多而導致IO集中在某一節(jié)點上。
當集群需要擴容時,Broker可以立即感知到新加入集群的Bookie,并將新寫入的數據存儲到新添加的Bookie中。
多租戶
Kafka社區(qū)在KIP-37正在討論加入NameSpace以實現多租戶特性,而Pulsar已實現這一功能。在企業(yè)中,消息隊列服務通常會被多個團隊使用,在使用Kafka時,有時需要為每個團隊維護一個Kafka集群。Pulsar可以配置多個租戶,每個租戶可以有多個NameSpace,管理員可以對NameSpace進行訪問控制、配額管理。
更靈活的訂閱模式
Kafka對消息的劃分分為兩層:對于屬于同一個Group的KafkaConsumer,其獲取到的消息是互斥的,即某一條消息只能被Group中的一個Consumer處理;對于不同的Group,某一條消息將同時被兩個Group處理,消息是共享的。
而Pulsar提供了更靈活的訂閱模式:
獨占式:
在任意時間,Topic中的數據只能被Group中的一個Consumer消費,不允許其他Consumer獲取消息
主備式:
多個Consumer同時消費同一個Topic時,只有一個Consumer被選為主Consumer,其他Consumer則成為備Consumer。當主Consumer故障時,發(fā)生主備倒換,備Consumer中的一個將升主,并繼續(xù)消息的消費。
共享式:
與Kafka類似,使用共享模式,消息將循環(huán)分發(fā)給不同的Consumer,當某個Consumer故障時,消息將被重新分配給其他Consumer。
分層存儲
Pulsar另一個很有吸引里的特性是,流式數據可以轉冷并存儲在更廉價的存儲介質上。通常為了保證性能,流式處理系統(tǒng)配備高性能的SSD。對于Kafka來說,所有需要保留的消息都必須駐留在昂貴的SSD上。有些時候,數據寫入一段時間后已不在會被使用,但仍需保留一段時間存檔。Pulsar支持將這種冷數據轉儲到離線存儲系統(tǒng)中,BookKeeper只需要保留一部分熱數據,可以節(jié)省很多存儲成本。該特性無疑是很有價值的,Kafka社區(qū)同樣在進行設計(KIP-405),但目前還沒有實現。
Pulsar的性能指標
Kafka和Pulsar社區(qū)都針對性能進行了對比測試。綜合來看,由于Pulsar數據落盤時,會進行同步fsync,持久性要比Kafka更高,Pulsar社區(qū)對此作出修改后進行對比測試,部分測試結果如下:
*引自Pulsar社區(qū)性能測試報告
在100 Partition時,默認配置下pulsar的吞吐量距離Kafka差距明顯,但當本地持久化等級設置為與Kafka相同時,吞吐量與Kafka基本持平。
*引自Pulsar社區(qū)性能測試報告
當Partition數增加到2000個時,Pulsar默認本地持久度的吞吐量基本與Kafka持平。
更多細節(jié)請移步SreamNative的benckmarking測試報告:benchmarking pulsar kafka a more accurate perspective on pulsar performance.pdf
MRS上的Pulsar
MRS已發(fā)布Pulsar的POC版本,客戶可以一鍵式部署Pulsar服務,包括Broker和Bookie角色。支持在Web UI上修改Pulsar配置、啟停、監(jiān)控。
此外MRS還默認集成了KoP。KoP是Pulsar社區(qū)開源的一個插件,運行在Pulsar上,用以兼容Kafka協議。使用時,Kafka客戶端可以修改連接地址后直接切換到Pulsar集群上,而不需要修改業(yè)務對Kafka客戶端的依賴。
在MRS Pulsar的商用版本正在規(guī)劃中,我們將探索Pulsar在云上使用的更多可能,進一步發(fā)揮Pulsar存算分離的優(yōu)勢,降低成本,提升資源利用率,為客戶創(chuàng)造更多價值,敬請期待。
Kafka MapReduce服務 分布式 大數據
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。