1. 程式人生 > 實用技巧 >譯文|簡明指南:Apache Pulsar 的分層儲存

譯文|簡明指南:Apache Pulsar 的分層儲存

在一些流資料用例場景中,使用者希望將資料長時間儲存在流中。雖然 Apache Pulsar 對 topic backlog 的大小沒有限制,但將所有資料儲存在 Pulsar 中較長時間,儲存成本比較大。

本文介紹了 Apache Pulsar 的分層儲存特性(在 2.1 及之後的版本可用),分層儲存支援在不影響終端使用者的條件下,將較舊的資料移動到長期儲存中。

在推薦服務中,開發者不希望限制 backlog 的大小。以音樂服務為例,終端使用者每聽一首歌,就向 topic 中新增一條訊息。使用這一 topic 訓練推薦演算法,根據終端使用者聽過的音樂推薦使用者可能喜歡的音樂。然後,將計算結果推薦給使用者,再迴圈這個過程。

推薦演算法並非一成不變。音樂服務的資料科學家一直在不斷優化推薦演算法,以更好地預測使用者喜歡的音樂,從而提高使用者對推薦服務的滿意度和參與度。

但是,如果每次修改演算法時,都只執行修改時間點之後的使用者資料,不僅預測的準確度會受到影響,判斷演算法的修改效果也會需要一段較長的時間。為了解決這一問題,演算法需要儘可能多地執行使用者歷史資料。

Pulsar 允許使用者儲存任意大小的 topic backlog。當叢集將要耗盡空間時,使用者只需新增新的儲存節點,系統將會自動重新平衡資料。但是,這樣的操作執行一段時間後,運維成本十分昂貴。

Pulsar 通過提供分層儲存(Apache Pulsar 2.1 起新增的特性)減少了成本/大小的損失。分層儲存為使用者提供大小不受限制的 backlog,且無需新增儲存節點;解除安裝較舊的 topic 資料到長期儲存中,長期儲存的成本比在 Pulsar 叢集中儲存的成本低一個數量級。對於終端使用者來說,消費儲存在 Pulsar 叢集或分層儲存中的 topic 資料沒有明顯差別。位於 Pulsar 叢集和分層儲存中的 topic 生產和消費訊息的方式也完全相同。

Pulsar 通過分片架構實現了分層儲存。Pulsar topic 的訊息日誌由一系列分片組成。序列中的最後一個分片是 Pulsar 當前寫入的分片。當前序列之前的所有分片都已封裝,也就是說,這些分片中的資料不可變。由於資料不可變,因此可以輕易地將資料複製到另一個儲存系統,而不必擔心一致性的問題。複製完成後,可以立即更新訊息日誌元資料中的資料指標,並且可以刪除 Pulsar 在 Apache BookKeeper 中儲存的資料副本。

在 Pulsar 中使用分層儲存

Pulsar 目前支援通過 Amazon S3、GCS(Google Cloud Storage)、Filesystem 進行長期儲存。要使用 S3 進行分層儲存,管理員需要先在 S3 中建立一個儲存桶(bucket);然後,用儲存桶和建立儲存桶的區域配置 broker。

managedLedgerOffloadDriver=S3
s3ManagedLedgerOffloadRegion=eu-west-3
s3ManagedLedgerOffloadBucket=pulsar-topic-offload

使用者不直接在 Pulsar 中配置身份驗證。Pulsar 使用的 DefaultAWSCredentialsProviderChain 可以在多個位置查詢驗證資訊。

配置驗證資訊最簡單的方式是在 pulsar-env.sh 中設定環境變數。

關於配置身份驗證方法的更多資訊,參閱分層儲存文件:http://pulsar.apache.org/docs/en/concepts-tiered-storage/。

配置好所有 broker 後,就可以開始使用分層儲存了。可以配置分層儲存的資料解除安裝為自動執行,也可以手動觸發。

自動遷移資料到長期儲存

管理員可以為名稱空間設定大小閾值策略。配置大小閾值策略後,如果名稱空間中的任一 topic 在 Pulsar 叢集上的資料大小超過了閾值,topic 就會解除安裝分片到長期儲存中,直到 Pulsar 叢集上的資料大小在閾值之內。

例如,當 Pulsar 叢集上的資料大小超過 1 GB 時,指定名稱空間中的 topic 解除安裝分片,可以使用以下命令:

pulsar-admin namespaces set-offload-threshold --size 1G my-tenant/my-namespace

當名稱空間中的任一 topic 超過閾值時,topic 將會移動資料至長期儲存,釋放 Pulsar 叢集上的儲存空間。

手動解除安裝

除了配置自動解除安裝資料外,還可以通過 REST 介面或命令列介面在單個 topic 上手動觸發解除安裝操作。要通過命令列介面觸發,使用者必須指定在 Pulsar 叢集上為 topic 保留的最大資料量。如果 Pulsar 叢集上的 topic 資料大小超過了設定的閾值,則將此 topic 上的分片移動到長期儲存中,直到 Pulsar 叢集上的資料大小在閾值之內。移動資料時,先移動較舊的分片。

pulsar-admin topics offload --size-threshold 10M my-tenant/my-namespace/topic1

更多關於配置和使用分層儲存的資訊,參閱分層儲存文件:https://pulsar.apache.org/docs/en/cookbooks-tiered-storage/。

Apache Pulsar 2.1 及之後的版本支援分層儲存。