原作者:Ivan Kelly
翻譯:StreamNative-Sijia
Apache Pulsar 的分層存儲特性使 Pulsar 可以將 topic 上較舊的消息轉移到長期存儲系統中,從而釋放 Apache BookKeeper 的空間,并利用可擴展的低成本存儲(如:云存儲)。
分層存儲對于想要長時間保留數據的 topic 益處良多。例如,一個用于訓練推薦系統的存有用戶操作的 topic,可能需要長時間存儲數據,以便在創建新的推薦模型時,可以運行完整的用戶數據。
Apache Pulsar 如何存儲數據
Apache Pulsar 使用分片的架構存儲 topic。Pulsar 中的 topic 會持久化到存儲在 Apache BookKeeper 中的日志(即托管 ledger )中。托管 ledger 由有序的分片列表組成。由于日志的僅追加屬性,Pulsar 的寫入只能作為日志的最后一個分片。所有以前的分片都被封裝,且分片內的數據不可變。
分層存儲卸載機制利用這種分片的架構。當分片被卸載到外部存儲系統時,日志中的分片被一對一復制到該存儲系統。除了正在寫入的分片外,其他分片都可以被卸載。
Apache Pulsar 目前支持多個云存儲系統用于分層存儲。本文將通過一個簡單的示例來介紹如何配置獨立的 Pulsar 集群以使用 Amazon S3 來存儲已卸載的分片。配置過程主要包括以下幾個步驟:
- 在 Amazon S3 中創建并配置 bucket。
- 將 Pulsar 配置為使用 S3 bucket 作為存儲層。
- 啟動 Pulsar 并驗證卸載。
本文末尾附有講解視頻。
配置步驟
第 1 步:設置 S3 bucket
- 創建將會用作分層存儲的 S3 bucket。登錄到 AWS 控制臺,然后選擇 S3 服務。
- 創建一個 bucket。首先,單擊“創建 bucket”;然后給新創建的 bucket 命名;再點擊“下一步”,確認創建操作。
這樣,就創建好了一個新的 Bucket。
、
-
確保 AWS 憑證設置正確。
$ cat ~/.aws/credentials [default] aws_access_key_id = XXXXXXXXXXXXXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXX
第 2 步:配置 Pulsar
現在要將 Pulsar 配置為使用 S3 bucket 作為其冷存儲層。
從 http://pulsar.apache.org/en/download 下載 Pulsar 文件并解壓縮。
-
使用 cd 命令進入二進制根目錄,編輯 conf/standalone.conf,在 conf/standalone.conf 文件末尾添加卸載配置設置:
managedLedgerOffloadDriver=S3 s3ManagedLedgerOffloadBucket=offload-test-aws s3ManagedLedgerOffloadRegion=us-east-1
-
在此配置文件中,更改 ledger 大小和切換時間(rollover time),簡化主題創建分片的操作:
# Max number of entries to append to a ledger before triggering a rollover # A ledger rollover is triggered on these conditions # * Either the max rollover time has been reached # * or max entries have been written to the ledger and at least min-time has passed managedLedgerMaxEnteriesPerLedger=1000 # Minimum time between ledger rollover for a topic managedLedgerMinLedgerRolloverTimeMinutes=0
-
以獨立模式啟動 Pulsar:
$ bin/pulsar standalone
第 3 步:驗證分片卸載
-
通過 consume 消息和 produce 消息來驗證配置。
在新的終端窗口,運行 consume 命令以確保 topic 數據不會被自動刪除。
$ bin/pulsar-client consume -s “my-sub-name“ my-topic-for-offload
-
在另一個新的終端窗口,運行 produce 命令兩次以確保其大小足夠創建兩個分片(每個分片上有 1000 條 entry)。
$ bin/pulsar-client produce my-topic-for-offload --messages "hello pulsar this is the content for each message" -n 1000
-
通過 Pulsar admin 命令行界面手動觸發卸載。
$ bin/pulsar-admin topics offload --size-threshold 10K public/default/my-topic-for-offload Offload triggered for persistent://public/default/my-topic-for-offload for messages before 32:0:-1
-
通過命令行界面獲取卸載狀態。
$ bin/pulsar-admin topics offload-status public/default/my-topic-for-offload Offload was a success
狀態為“卸載成功“后,可以使用 AWS 控制臺在 S3 中找到已卸載的 ledger。
如果使用 Pulsar admin 命令獲取 topic 內部統計信息,就會發現 ledger-31 處于“offloaded: true”狀態。
$ bin/pulsar-admin topics stats-internal public/default/my-topic-for-offload
[
"entriesAddedCounter" : 3200,
"numberOfEntries" : 1200,
"totalSize" : 111344,
"currentLedgerEntries" : 200,
"currentLedgerSize" : 18600,
"lastLedgerCreatedTimestamp" : "2018-10-11T07:06:14.891+08:00",
"waitingCursorsCount" : 0,
"pendingAddEntriesCount" : 0,
"lastConfirmedEntry" : "32:199",
"state" : "LedgerOpened",
"ledgers" : [ {
"ledgerId" : 31,
"entries" : 1000,
"size" : 92744,
"offloaded" : true
}, {
"ledgerId" : 32,
"entries" : 0,
"size" : 0,
"offloaded" : false
} ],
"cursors" : false
視頻示范
本視頻逐步介紹了如何配置完整的 Pulsar 集群以使用 Amazon S3 中的分層存儲:https://www.youtube.com/embed/F0nxrjXLSxk