本文會首先介紹Pulsar的分級儲存。然後通過一個示例,演示在分級儲存中怎樣使用Amazon S3作為二級儲存。
介紹
Pulsar中的每個Topic由一列有序的的段(Segment)列表組成。Pulsar只會寫入其中的最後一段。 除最後一段之外,之前的所有段都已經被密封了,不能再往其中追加資料,這就是Pulsar的基於段(Segment)的儲存結構。
Pulsar的基於Segment的儲存架構,支援一個Topic的空間大小儲存滿整個儲存叢集。但是隨著要儲存的Partition的資料的逐漸增多,會讓儲存變的昂貴。解決這個問題的一種策略就是使用分級儲存(Tiered Storage)。
使用分級儲存的一個場景是使用者希望對一個比較大的Topic的資料儲存比較長的時間。比如一個Topic中包含所有客戶的點選記錄,我們可以用這個topic中的資料來訓練推薦系統。如果這個Topic的資料被一直儲存著,當訓練的演算法改變後,我們就可以重新利用這些歷史資料來訓練新的推薦系統。
Pulsar的分級儲存功能允許將較舊的積壓資料解除安裝到二級儲存中做長期儲存,從而釋放BookKeeper中的空間,進而降低儲存成本。使用分級儲存,我們可以將一個Topic中的老的資料段(Segment)自動從BookKeeper搬出到更便宜的二級儲存。對Client來說,整個過程是透明無縫的。
當Offload被手動或者自動觸發之後,Broker會一個接一個地將一級儲存中的段,搬移到二級儲存中。
Pulsar目前支援使用S3,Google-Cloud-Storage作為二級儲存。使用者可以靈活配置Topic想要保留在BookKeeper(一級儲存)中的大小,和資料在搬移到二級儲存後多久(預設4小時)從BookKeeper中刪除。
我們在這篇文章中會使用S3作為一個例子,來演示怎麼使用Pulsar的這個特性。
Operations With S3
在這個示例中使用的是Pulsar-2.1.1版本,主要包含3個步驟:
- 在Amazon S3(https://s3.console.aws.amazon...)中建立一個bucket;
- 下載Pulsar包,為Pulsar的Broker配置Offload,用Standalone模式啟動Pulsar;
- 用Pulsar的producer併產生資料,觸發Offload,並驗證。
一, 在S3中建立Bucket
- 登陸AWS console,選擇S3服務:
- 建立一個bucket,點選“Create bucket”, 填上Bucket的名字,然後點選next並一直點選確認。
- 經過上面的操作,可以看到一個新的Bucket已經被建立了。
- 確認在本機上配置好了aws的access
二, 下載Pulsar包,並配置
- 從Pulsar的官網(http://pulsar.apache.org/en/d...)下載最新的Pulsar Binary檔案(apache-pulsar-x.x.x-bin.tar.gz) ,解壓,準備修改配置檔案conf/standalone.conf。
- 修改配置檔案conf/standalone.conf中關於Offload的選項,設定第一步中建立的bucket:
managedLedgerOffloadDriver=S3
s3ManagedLedgerOffloadBucket=offload-test-aws
s3ManagedLedgerOffloadRegion=us-east-1
修改配置檔案conf/standalone.conf中每個segment的大小配置,這使得每個Segment更小,更容易產生新的segment。
- 在終端用standalone模式啟動Pulsar:
執行命令 bin/pulsar standalone
三, 在Pulsar中產生資料,觸發Offload,並驗證
- 在終端中啟動一個消費者,保證將要產生資料不會因為沒有消費者被丟棄掉:
bin/pulsar-client consume -s “my-sub-name“ my-topic-for-offload
- 開一個新的終端視窗,執行下面命令2次,產生2000條message,保證在topic中有兩個Segment,這樣第一個segment可以被搬移到S3上。
bin/pulsar-client produce my-topic-for-offload --messages "hello pulsar this is the content for each message" -n 1000
- 用命令列手動觸發Offload:
bin/pulsar-admin topics offload --size-threshold 10K public/default/my-topic-for-offload
- 使用命令等待offload成功:
bin/pulsar-admin topics offload-status public/default/my-topic-for-offload
- 驗證在第一個Segment已經被搬移到S3中:
在s3的終端可以看到ledger-31已經被儲存。
使用命令列,同樣可以看到這個Topic中有兩個Segment,第一個Segment -- ledger-31的offloaded狀態為true。
以上的步驟就是我們使用S3作為二級儲存的整個過程。
如果想要了解更多的分級儲存的內容,歡迎參考Pulsar的官網: