Apache Pulsar 架構(gòu)解析(3.2版本)

Apache Pulsar 是一款開源的分布式消息系統(tǒng),它設(shè)計用于高性能、可靠的云原生環(huán)境,可支持大規(guī)模、多租戶的消息與流數(shù)據(jù)傳輸。在深入理解 Pulsar 之前,我們先從它的整體架構(gòu)說起。

1、Pulsar 是什么?

Pulsar 本質(zhì)上是一個分布式消息與流處理平臺。它與 Kafka 等系統(tǒng)類似(對比如下),但提供了更加靈活的架構(gòu)設(shè)計,例如存儲與計算分離、原生支持多集群復(fù)制、以及多租戶管理等。

對比維度 Kafka Pulsar
存儲模型 基于 Partition 分區(qū)+副本存儲 基于 Ledger→Segment→Entry 分層存儲
消費模型 消費者組模式,1 分區(qū)對應(yīng) 1 消費者 訂閱+Cursor 模式,多訂閱獨立消費
部署復(fù)雜度 去除 ZK 后部署簡單 依賴 ZK+BookKeeper,部署較復(fù)雜
多租戶支持 無原生支持 原生 Tenant+Namespace 三級隔離
吞吐量(2c4g) 20 萬級 QPS 100 萬級 QPS

2、 Pulsar 體系結(jié)構(gòu)總覽

Pulsar 的總體架構(gòu)可以粗略分為以下幾個層級:

  • Pulsar 實例(Instance):可以包含多個物理或邏輯上的 Pulsar 集群。
  • Pulsar 集群(Cluster):是一個完整的 Pulsar 單元,包含消息處理與存儲組件。
  • 跨集群復(fù)制:集群之間默認(rèn)是互不干擾的,可以通過開啟Geo-replication讓集群間的數(shù)據(jù)進(jìn)行復(fù)制同步(比如可以讓topic1 在 cluster-a、cluster-b各自有一份數(shù)據(jù))。
    Pulsar 總體架構(gòu)

本篇我們主要聚焦 Pulsar 的核心架構(gòu)組件以及它們之間如何協(xié)同工作。

3、 核心組件解析

3.1 Broker(入口及核心)

Broker 是 Pulsar 的“入口”和“調(diào)度中心”。它負(fù)責(zé):

  • 接收生產(chǎn)者(Producer)發(fā)送的消息;
  • 將消息分發(fā)給消費者(Consumer);
  • 維護(hù)客戶端連接;
  • 與 ZooKeeper 和存儲服務(wù)(BookKeeper)協(xié)調(diào)。

Broker 本身是無狀態(tài)的,它不直接存儲消息,而是負(fù)責(zé)管理流轉(zhuǎn)與緩存。只有在本地緩沖不足時它才會從存儲系統(tǒng)拉取數(shù)據(jù)。

3.2 BookKeeper(又名Bookie,持久存儲)

Pulsar 使用 Apache BookKeeper 作為消息的持久化存儲層。它的優(yōu)勢包括:

  • 將每個主題的數(shù)據(jù)寫入多個獨立的日志(稱為 ledgers);
  • 支持高可靠性數(shù)據(jù)復(fù)制;
  • 橫向擴展能力強,并且讀寫性能良好。

消息由 Broker 寫入 BookKeeper,只有成功寫入后才被認(rèn)為是可靠的持久消息(除非使用非持久消息)。

3.3 ZooKeeper(協(xié)調(diào)與元數(shù)據(jù))

Pulsar 使用 ZooKeeper 作為元數(shù)據(jù)管理與協(xié)調(diào)服務(wù),包括:

  • 集群配置和負(fù)載信息;
  • 主題所有權(quán)與分區(qū)信息;
  • Broker 與 BookKeeper 之間的協(xié)調(diào)。

整個 Pulsar 系統(tǒng)至少會有兩個 ZooKeeper 集群:

  1. 配置存儲(Configuration Store):負(fù)責(zé)跨集群配置;
  2. 本地集群 ZooKeeper:協(xié)調(diào)同一集群內(nèi)部的 Broker 與 BookKeeper。

PS: 新版本的pulasr可被 etcd 替代了

3.4 Pulsar Proxy(可選入口)

在某些場景下,客戶端不能直接訪問 Broker,例如:

  • 受到網(wǎng)絡(luò)策略限制;
  • 使用云環(huán)境、Kubernetes 等平臺。

這時可以使用 Pulsar Proxy,作為客戶端與 Broker 之間的中間入口,處理連接代理和負(fù)載,Pulsar 支持用一個統(tǒng)一的服務(wù) URL,讓客戶端只需接入這個入口即可與整個 Pulsar 實例互動。背后會將請求路由到正確的 Broker。

4、Pulsar 的工作流程

下面是一條消息從生產(chǎn)到消費的核心路徑:

  1. 生產(chǎn)者發(fā)送消息給 Broker;
  2. Broker 將消息寫入 BookKeeper 持久存儲;
  3. BookKeeper 將日志記錄到多個 Bookie(存儲節(jié)點);
  4. 消費者從 Broker 拉取消息,Broker 使用緩存或從存儲讀取數(shù)據(jù)。
    Pulsar 工作流程

    這種存儲與處理分離的架構(gòu)使得 Pulsar 在負(fù)載激增、集群擴容時表現(xiàn)穩(wěn)定且可預(yù)測。

參考鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容