深度解析如何在 Pulsar 中實現隔離

本文作者爲 StreamNative 工程師李鵬輝、劉昱。

關於 Apache Pulsar

Apache Pulsar 是 Apache 軟件基金會頂級項目,是下一代雲原生分佈式消息流平臺,集消息、存儲、輕量化函數式計算爲一體,採用計算與存儲分離架構設計,支持多租戶、持久化存儲、多機房跨區域數據複製,具有強一致性、高吞吐、低延時及高可擴展性等流數據存儲特性。
GitHub 地址:http://github.com/apache/pulsar/

Apache Pulsar 的一大優點是 Pulsar 的多層分片架構和分層資源管理爲隔離(isolation)提供了堅實基礎,用戶可以以所需方式隔離資源,避免資源競爭,保證系統穩定性。

本系列博客將深入討論 Pulsar isolation[1]。本文爲本系列文章的第一篇,主要介紹如何在 Pulsar 中通過以下方式實現隔離:

• 單獨 Pulsar 集羣 • 共享 BookKeeper 集羣 • 單一 Pulsar 集羣

單獨 Pulsar 集羣

在這種環境中,你需要爲隔離單元創建各自的 Pulsar 集羣。

工作原理

圖 1 展示瞭如何通過部署單獨的 Pulsar 集羣實現隔離。

工作原理要點:

• 每個 Pulsar 集羣 [2] 通過 DNS entry point 接入服務,並確保客戶端可以通過 DNS entry point 訪問集羣。客戶端可以使用一個或多個 Pulsar URL,該 URL 是 Pulsar 集羣的連接地址。

• 每個 Pulsar 集羣有一個或多個 broker[3] 和 bookie[4]。

• 每個 Pulsar 集羣有一個元數據存儲區。

• 元數據存儲區可以分爲 Pulsar 元數據存儲區 [5] 和 BookKeeper 元數據存儲區 [6]。本文不區分上述兩種元數據存儲區,元數據存儲區同時包含二者。

• 多個 Pulsar 集羣共享一個配置存儲 [7]。

•Pulsar 分層的資源管理爲隔離提供了堅實基礎。如需隔離命名空間,則需要爲命名空間指定集羣 [8]。集羣必須屬於租戶允許的集羣列表 [9]。屬於該命名空間的 topic 也會分配至該集羣。關於如何爲命名空間設置集羣,參閱 爲命名空間設置集羣 [10]。關於如何管理 Pulsar 集羣,參閱管理 Pulsar 集羣 [11]。

遷移命名空間

如需在不同集羣之間遷移命名空間,你需要啓用跨地域複製功能,並在數據全部複製到目標集羣后關閉跨地域複製功能。關於如何爲命名空間設置跨地域複製,參閱爲命名空間設置跨地域複製 [12]。

擴縮容節點

擴縮容 broker 或 bookie 的操作需在相應集羣中進行。

共享 BookKeeper 集羣

在這種方式中,你需要部署一個由多個 broker 集羣共享的 BookKeeper 集羣。

工作原理

圖 2 展示瞭如何通過部署共享 BookKeeper 集羣實現隔離。

‍工作原理要點:

• 每個 Pulsar 集羣 [13] 通過 DNS entry point 接入服務,並確保客戶端可以通過 DNS entry point 訪問集羣。客戶端可以使用一個或多個 Pulsar 集羣的連接地址。

• 每個 Pulsar 集羣有一個或多個 broker[14]。

• 每個 Pulsar 集羣有一個元數據存儲區。

• 多個 Pulsar 集羣共享一個 BookKeeper 集羣。

•Pulsar 分層的資源管理爲隔離提供了堅實基礎。如需隔離命名空間,則需要爲命名空間指定集羣 [15]。集羣必須屬於租戶允許的集羣列表 [16]。屬於該命名空間的 topic 也會分配至該集羣。關於如何爲命名空間設置集羣,參閱 爲命名空間設置集羣 [17]。關於如何管理 Pulsar 集羣,參閱管理 Pulsar 集羣 [18]。

• 通過不同 bookie affinity group 實現存儲隔離,如圖 3。

    • 所有 bookie 隔離組共享 BookKeeper 集羣和元數據存儲區。

    • 每個 bookie 隔離組有一個或多個 bookie。

    • 用戶可以爲命名空間指定一個或多個 primary group 或 secondary group[19]。先在 primary group 的 bookie 上創建命名空間中的 topic,再在 secondary group 的 bookie 上創建命名空間中的 topic。關於如何設置 bookie affinity group,參閱設置 bookie affinity group[20]。

遷移命名空間

將命名空間上的消息服務遷移到其他 broker 集羣上,需要爲命名空間更改集羣 [21]。將命名空間遷移到其他 bookie affinity group 中,需要更改 bookie affinity group。關於如何設置 bookie affinity group,參閱設置 bookie affinity group[22]。由於所有 broker 集羣共享同一 BookKeeper 集羣,因此無需複製數據到新的 BookKeeper 集羣上。

擴縮容節點

Broker

擴縮容 broker 時,需要注意以下幾點:

• 擴容 broker 時, 需使用 primary group 或 secondary group[23] 爲新增 broker 指定 broker 隔離組。

• 縮容 broker 時,需確保 broker 隔離組有足夠數量的 broker。

Bookie

擴縮容 bookie 時,需要注意以下幾點:

• 擴容 bookie 時,需爲新增 bookie 指定 bookie affinity group。

• 縮容 bookie 時,需確保 bookie affinity group 有足夠數量的 bookie。關於如何設置 bookie affinity group,參閱設置 bookie affinity group[24]。

單一 Pulsar 集羣

使用這種方式實現隔離,只需管理單一 Pulsar 集羣,無需部署多個 broker 集羣和多個 bookie 集羣。

工作原理

圖 4 展示瞭如何通過部署單一 Pulsar 集羣實現隔離。

工作原理要點:

• 每個 Pulsar 集羣 [25] 通過 DNS entry point 接入服務,並確保客戶端可以通過 DNS entry point 訪問集羣。客戶端可以使用 Pulsar 集羣的連接地址。

• 通過不同 broker 隔離組實現 broker 隔離(Pulsar 將 topic 分配給特定 broker 隔離中的 broker)。關於如何設置 broker 隔離組,參閱設置 broker 隔離組 [26]。

• 通過不同 bookie affinity group 實現存儲隔離。關於如何設置 bookie affinity group,參閱設置 bookie affinity group[27]。

遷移命名空間

遷移命名空間到其他 broker 隔離組,需要更改命名空間隔離策略。關於如何設置設置命名空間隔離策略,參閱設置命名空間隔離策略 [28]。

遷移命名空間到其他 bookie affinity group(不將原始數據移動至目標 bookie affinity group),需要更改 bookie affinity group。關於如何設置 bookie affinity group,參閱設置 bookie affinity group[29]。

擴縮容模式

Broker

擴縮容 broker 時,需要注意以下幾點:

• 擴容 broker 時, 需使用 primary group 或 secondary group[30] 爲新增 broker 指定 broker 隔離組。

• 縮容 broker 時,需確保 broker 隔離組有足夠數量的 broker。

Bookie

擴縮容 bookie 時,需要注意以下幾點:

• 擴容 bookie 時,需爲新增 bookie 指定 bookie affinity group。

• 縮容 bookie 時,需確保 bookie affinity group 有足夠數量的 bookie。關於如何設置 bookie affinity group,參閱設置 bookie affinity group[31]。

Reference

在生產環境中,用戶可以根據需求同時使用本文提到的三種 Pulsar 隔離方法,也可以選擇其他方法。一般而言,選擇隔離方法時可以參考以下注意事項:某些關鍵業務(如計費、廣告等)使用多個小型 Pulsar 集羣,不與其他集羣共享存儲或本地 ZooKeeper。使用多個小型 Pulsar 集羣可以爲重要工作負載提供最高級別的隔離。大型企業(擁有多個團隊)可以部署一個大型 Pulsar 集羣,對不同的隔離組使用不同的命名空間,根據容量或工作負載確定隔離組。例如,有大量扇出的場景與端到端延遲最低場景中使用的硬件不盡相同。

引用鏈接

[1] Pulsar isolation: https://pulsar.apache.org/docs/en/next/administration-isolation/
[2] Pulsar 集羣: https://pulsar.apache.org/docs/en/next/concepts-architecture-overview/#clusters
[3] broker: https://pulsar.apache.org/docs/en/next/concepts-architecture-overview/#brokers
[4] bookie: https://bookkeeper.apache.org/docs/latest/getting-started/concepts/#basic-terms
[5] Pulsar 元數據存儲區: https://pulsar.apache.org/docs/en/next/concepts-architecture-overview/#metadata-store
[6] BookKeeper 元數據存儲區: https://bookkeeper.apache.org/docs/latest/getting-started/concepts/#metadata-storage
[7] 配置存儲: http://pulsar.apache.org/docs/en/next/concepts-architecture-overview/#configuration-store
[8] 爲命名空間指定集羣: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-create-em--9
[9] 租戶允許的集羣列表: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#namespaces
[10] 爲命名空間設置集羣: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-set-clusters-em-
[11] 管理 Pulsar 集羣: https://pulsar.apache.org/docs/en/next/admin-api-clusters/
[12] 爲命名空間設置跨地域複製: https://pulsar.apache.org/docs/en/next/administration-geo/
[13] Pulsar 集羣: https://pulsar.apache.org/docs/en/next/concepts-architecture-overview/#clusters
[14] broker: https://pulsar.apache.org/docs/en/next/concepts-architecture-overview/#brokers
[15] 爲命名空間指定集羣: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-create-em--9
[16] 租戶允許的集羣列表: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#namespaces
[17] 爲命名空間設置集羣: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-set-clusters-em-
[18] 管理 Pulsar 集羣: https://pulsar.apache.org/docs/en/next/admin-api-clusters/
[19] primary group 或 secondary group: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-set-bookie-affinity-group-em-
[20] 設置 bookie affinity group: https://pulsar.apache.org/docs/en/next/administration-isolation/#bookie-isolation
[21] 爲命名空間更改集羣: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-set-clusters-em-
[22] 設置 bookie affinity group: https://pulsar.apache.org/docs/en/next/administration-isolation/#bookie-isolation
[23] primary group 或 secondary group: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-set-em-
[24] 設置 bookie affinity group: https://pulsar.apache.org/docs/en/next/administration-isolation/#bookie-isolation
[25] Pulsar 集羣: https://pulsar.apache.org/docs/en/next/concepts-architecture-overview/#clusters
[26] 設置 broker 隔離組: https://pulsar.apache.org/docs/en/next/administration-isolation/#broker-isolation
[27] 設置 bookie affinity group: https://pulsar.apache.org/docs/en/next/administration-isolation/#bookie-isolation
[28] 設置命名空間隔離策略: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-set-em-
[29] 設置 bookie affinity group: https://pulsar.apache.org/docs/en/next/administration-isolation/#bookie-isolation
[30] primary group 或 secondary group: http://pulsar.apache.org/tools/pulsar-admin/2.8.0-SNAPSHOT/#-em-set-em-
[31] 設置 bookie affinity group: https://pulsar.apache.org/docs/en/next/administration-isolation/#bookie-isolation

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/BBUqDP2oY-gtcOKNy3Xplw