Apache Pulsar 是一款開源的分布式消息與流處理平臺,憑借其獨(dú)特的分層架構(gòu)、低延遲、高吞吐量和多租戶特性,已成為現(xiàn)代數(shù)據(jù)架構(gòu)中的核心組件之一。它原生支持發(fā)布/訂閱消息傳遞模型、隊列模型以及流處理模型,集消息隊列、實時流處理和存儲服務(wù)于一體,為大規(guī)模數(shù)據(jù)處理提供了強(qiáng)有力的支撐。
一、Pulsar 核心特性與架構(gòu)介紹
- 分層架構(gòu):這是 Pulsar 最核心的設(shè)計亮點(diǎn)。它將服務(wù)層(Broker) 與存儲層(BookKeeper) 完全解耦。
- Broker 集群:無狀態(tài),負(fù)責(zé)消息的生產(chǎn)、消費(fèi)、路由和服務(wù)發(fā)現(xiàn)。這種無狀態(tài)設(shè)計使其可以輕松進(jìn)行水平擴(kuò)展和故障恢復(fù)。
- Apache BookKeeper 集群:提供持久化、高可用、強(qiáng)一致的存儲服務(wù)。它將數(shù)據(jù)以日志段的形式存儲在多臺存儲節(jié)點(diǎn)上,保證了數(shù)據(jù)的可靠性和可擴(kuò)展性。
- 統(tǒng)一的消息模型:Pulsar 巧妙地通過“訂閱”模式統(tǒng)一了流(Streaming)和隊列(Queue)兩種語義。生產(chǎn)者發(fā)布消息到主題(Topic),消費(fèi)者可以創(chuàng)建不同類型的訂閱(如獨(dú)占、故障轉(zhuǎn)移、共享、Key_Shared)來以不同模式消費(fèi)數(shù)據(jù),靈活應(yīng)對多樣化的業(yè)務(wù)場景。
- 多租戶與命名空間:原生支持多租戶,通過租戶(Tenant)和命名空間(Namespace)進(jìn)行資源隔離、配額管理和訪問控制,非常適合云原生和SaaS化部署。
- 地理復(fù)制:提供跨地域的集群間數(shù)據(jù)同步功能,支持異步、同步等多種復(fù)制模式,是實現(xiàn)數(shù)據(jù)災(zāi)備和全球低延遲訪問的關(guān)鍵。
- 函數(shù)計算(Pulsar Functions)與IO連接器:內(nèi)置輕量級流處理框架Pulsar Functions,支持使用Java、Python、Go等語言編寫處理邏輯。擁有豐富的Pulsar IO連接器生態(tài),可以輕松與Kafka、MySQL、Elasticsearch、HDFS等外部系統(tǒng)進(jìn)行數(shù)據(jù)集成。
二、Pulsar 部署指南
部署一個生產(chǎn)可用的Pulsar集群通常包含以下步驟:
1. 環(huán)境準(zhǔn)備
- 硬件:建議至少3個節(jié)點(diǎn)(物理機(jī)或虛擬機(jī)),分別部署ZooKeeper、BookKeeper和Broker。生產(chǎn)環(huán)境建議各組件獨(dú)立部署,且每個集群至少3節(jié)點(diǎn)以保證高可用。
- 軟件:JDK 8或11,并確保節(jié)點(diǎn)間網(wǎng)絡(luò)通暢,時鐘同步。
2. 部署ZooKeeper集群(元數(shù)據(jù)存儲)
Pulsar依賴ZooKeeper來存儲集群元數(shù)據(jù)、配置和協(xié)調(diào)信息。需要部署兩個ZooKeeper集群:
- 本地ZooKeeper(通常3節(jié)點(diǎn)):管理單個Pulsar集群的元數(shù)據(jù)。
- 配置存儲ZooKeeper(通常3節(jié)點(diǎn)):用于跨集群的配置管理,如地理復(fù)制。
3. 初始化集群元數(shù)據(jù)
使用Pulsar自帶的初始化工具,將元數(shù)據(jù)寫入ZooKeeper。
4. 部署B(yǎng)ookKeeper集群(存儲層)
在所有BookKeeper節(jié)點(diǎn)上安裝BookKeeper,并配置好存儲目錄(Journal目錄和Ledger目錄應(yīng)使用不同的高性能磁盤,如SSD),然后啟動服務(wù)。
5. 部署B(yǎng)roker集群(服務(wù)層)
在所有Broker節(jié)點(diǎn)上安裝Pulsar Broker,配置其連接到的ZooKeeper和BookKeeper集群地址,然后啟動服務(wù)。
6. 部署可選組件
- Pulsar Proxy:為客戶端提供網(wǎng)關(guān)服務(wù),避免客戶端直接連接所有Broker。
- Pulsar Manager:提供Web UI管理界面,方便監(jiān)控和管理集群。
7. 驗證與配置
使用 pulsar-admin 命令行工具或客戶端API創(chuàng)建租戶、命名空間、主題,并進(jìn)行生產(chǎn)消費(fèi)測試,驗證集群運(yùn)行正常。同時配置配額、權(quán)限策略等。
三、作為數(shù)據(jù)處理與存儲服務(wù)
Pulsar不僅僅是一個消息隊列,它構(gòu)建了一個完整的數(shù)據(jù)處理與存儲管道。
1. 數(shù)據(jù)攝取與緩沖
Pulsar是高性能的數(shù)據(jù)總線,可以作為前端應(yīng)用、IoT設(shè)備、日志流等海量數(shù)據(jù)的統(tǒng)一接入層。其持久化存儲和低延遲特性確保了數(shù)據(jù)不丟失且能被實時消費(fèi)。
2. 實時流處理
- Pulsar Functions:對于簡單的ETL、過濾、聚合任務(wù),可以直接在Pulsar集群內(nèi)部署Functions,實現(xiàn)“原地”流處理,無需引入額外的計算框架(如Flink/Spark),簡化架構(gòu)。
- 與Flink/Spark集成:對于復(fù)雜的流處理任務(wù),Pulsar可以作為Flink或Spark Streaming的可靠數(shù)據(jù)源和數(shù)據(jù)匯,通過專用的連接器實現(xiàn)高性能對接。
3. 分層存儲與長期數(shù)據(jù)保留
這是Pulsar作為“存儲服務(wù)”的核心能力。當(dāng)Topic中的數(shù)據(jù)積壓超過一定閾值或時間后,Broker會自動將舊的“日志段”從BookKeeper卸載到更廉價的分層存儲(如AWS S3、Google Cloud Storage、HDFS)中。
- 對客戶端透明:消費(fèi)者需要讀取歷史數(shù)據(jù)時,Pulsar會自動從分層存儲中取回,整個過程對應(yīng)用無感知。
- 成本效益:實現(xiàn)了熱數(shù)據(jù)(BookKeeper SSD)和冷數(shù)據(jù)(對象存儲)的自動分層,在保證性能的同時大幅降低了海量數(shù)據(jù)長期保留的成本。這使得Pulsar可以充當(dāng)一個無限回溯的流存儲系統(tǒng),支撐“流批一體”的數(shù)據(jù)湖倉架構(gòu)。
4. 數(shù)據(jù)服務(wù)與共享
基于多租戶和地理復(fù)制,一份數(shù)據(jù)可以被多個團(tuán)隊、多個地域的不同應(yīng)用(如實時分析、模型訓(xùn)練、數(shù)據(jù)倉庫導(dǎo)入)通過不同的訂閱模式同時消費(fèi),實現(xiàn)數(shù)據(jù)的復(fù)用和價值最大化。
###
Apache Pulsar 以其云原生、存算分離的先進(jìn)架構(gòu),將高性能消息傳輸、彈性流處理和高效分層存儲無縫融合。從部署上看,雖然組件較多,但清晰的層次帶來了極佳的運(yùn)維靈活性和擴(kuò)展性。在數(shù)據(jù)處理與存儲場景中,Pulsar扮演了從實時數(shù)據(jù)接入、處理到長期歸檔的“一站式”平臺角色,是構(gòu)建現(xiàn)代實時數(shù)據(jù)管道和數(shù)據(jù)湖流存儲層的理想選擇。