通過 Amazon S3 為 Apache Pulsar 配置分層存儲

原作者: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

  1. 創建將會用作分層存儲的 S3 bucket。登錄到 AWS 控制臺,然后選擇 S3 服務。
使用 AWS 控制臺創建 Amazon S3 bucket
  1. 創建一個 bucket。首先,單擊“創建 bucket”;然后給新創建的 bucket 命名;再點擊“下一步”,確認創建操作。
創建一個 Amazon S3 bucket

這樣,就創建好了一個新的 Bucket。

Amazon S3 bucket 創建成功

、

  1. 確保 AWS 憑證設置正確。

    $ cat ~/.aws/credentials
    [default]
    aws_access_key_id = XXXXXXXXXXXXXXXXXXXXXX
    aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXX
    

第 2 步:配置 Pulsar

現在要將 Pulsar 配置為使用 S3 bucket 作為其冷存儲層。

  1. http://pulsar.apache.org/en/download 下載 Pulsar 文件并解壓縮。

  2. 使用 cd 命令進入二進制根目錄,編輯 conf/standalone.conf,在 conf/standalone.conf 文件末尾添加卸載配置設置:

    managedLedgerOffloadDriver=S3
    s3ManagedLedgerOffloadBucket=offload-test-aws
    s3ManagedLedgerOffloadRegion=us-east-1
    
  3. 在此配置文件中,更改 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
    
  4. 以獨立模式啟動 Pulsar:

    $ bin/pulsar standalone
    

第 3 步:驗證分片卸載

  1. 通過 consume 消息和 produce 消息來驗證配置。

    在新的終端窗口,運行 consume 命令以確保 topic 數據不會被自動刪除。

    $ bin/pulsar-client consume -s “my-sub-name“ my-topic-for-offload
    
  2. 在另一個新的終端窗口,運行 produce 命令兩次以確保其大小足夠創建兩個分片(每個分片上有 1000 條 entry)。

    $ bin/pulsar-client produce my-topic-for-offload  --messages "hello pulsar this is the content for each message" -n 1000
    
  3. 通過 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
    
  4. 通過命令行界面獲取卸載狀態。

    $ bin/pulsar-admin topics offload-status public/default/my-topic-for-offload
    
    Offload was a success
    
  5. 狀態為“卸載成功“后,可以使用 AWS 控制臺在 S3 中找到已卸載的 ledger。

存儲在 S3 中的已卸載分片文件

如果使用 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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,106評論 2 375