雲原生時代頂流訊息中介軟體Apache Pulsar部署實操-上

2023-02-14 15:03:36

@

安裝

執行時Java版本推薦

Locally Standalone叢集

啟動

# 下載最新版本為2.11.0,需要Java 17
wget https://archive.apache.org/dist/pulsar/pulsar-2.11.0/apache-pulsar-2.11.0-bin.tar.gz
# 解壓
tar xvfz apache-pulsar-2.11.0-bin.tar.gz
# 進入根目錄
cd apache-pulsar-2.11.0
# 目錄結構
ls -1F

  • bin:pulsar入口點指令碼,以及許多其他命令列工具。
  • conf:組態檔,包括pulsar範例pulsar函數範例範例使用的broker.conf
  • examples:函數範例。
  • lib:使用的jar。
  • instances:函數的範例。
# 啟動
bin/pulsar standalone
# 要將服務作為後臺程序執行,可以使用下面命令
bin/pulsar -daemon start standalone

檢視紀錄檔可以看到原生的pulsar standalone 叢集啟動成功紀錄檔

Pulsar叢集啟動時,會建立以下目錄

  • data:BookKeeper和RocksDB建立的所有資料。
  • logs:所有服務紀錄檔。

公共/預設名稱空間是在啟動Pulsar叢集時建立的。此名稱空間用於開發目的。所有Pulsar主題都在名稱空間中管理。

驗證

  • 建立主題
bin/pulsar-admin topics create persistent://public/default/test-topic1
  • 寫入訊息
bin/pulsar-client produce test-topic1 --messages 'Hello ,welcome Pulsar!'

  • 讀訊息
bin/pulsar-client consume test-topic1 -s 'my-subscription' -p Earliest -n 0

部署分散式叢集

部署說明

這裡使用Pulsar二進位制包部署,不同於K8S部署叢集,為了可以更好理解Pulsar架構。Pulsar範例由多個Pulsar 叢集共同工作組成。可以跨資料中心或地理區域分佈叢集,並使用地理複製在它們之間複製叢集。搭建Pulsar叢集至少需要3個元件:ZooKeeper叢集、BookKeeper叢集、Broker叢集。

  • 3個節點ZooKeeper叢集。建議生產部署兩個獨立的ZooKeeper叢集,一個Local用於範例中的每個叢集,另一個Configuration Store用於範例級任務。如果部署單叢集範例,則不需要設定儲存的單獨叢集。但如果部署了一個多叢集範例,應該為設定任務建立一個單獨的ZooKeeper叢集。
    • Local ZooKeeper執行在叢集級別,提供特定於叢集的設定管理和協調。每個Pulsar叢集需要一個專用的ZooKeeper叢集。
    • Configuration Store在範例級上操作,併為整個系統(因此跨叢集)提供設定管理。一個獨立的機器叢集或本地ZooKeeper使用的相同的機器可以提供設定儲存仲裁。
  • 3個節點BookKeeper叢集。
  • 3個節點Pulsar節點叢集(Broker是Pulsar自身的範例)。

Pulsar的安裝包已經包含搭建分散式叢集所需的元件庫,無需單獨下載ZooKeeper和BookKeeper的安裝包。但在實際中,zookeeper並不僅僅應用在pulsar上,之前介紹很多巨量資料元件依賴zookeeper,因此我們也使用外接的zookeeper環境。需要apache-zookeeper-3.8.0以上版本,我這裡是apache-zookeeper-3.8.1。下面使用上面Standalone的下載的apache-pulsar-2.11.0-bin.tar.gz來部署分散式叢集。

初始化叢集後設資料

只需要初始化一次介面,可以使用pulsar CLI工具的initialize-cluster-metadata命令初始化該後設資料

bin/pulsar initialize-cluster-metadata \
    --cluster pulsar-cluster \
    --metadata-store zk1:2181,zk2:2181,zk3:2181 \
    --configuration-metadata-store zk1:2181,zk2:2181,zk3:2181 \
    --web-service-url http://hadoop1:8080/ \
    --web-service-url-tls https://hadoop1:8443/ \
    --broker-service-url pulsar://hadoop1:6650/ \
    --broker-service-url-tls pulsar+ssl://hadoop1:6651/  

bin/pulsar initialize-cluster-metadata \
    --cluster pulsar-cluster \
    --metadata-store hadoop1:2181 \
    --configuration-metadata-store hadoop1:2181 \
    --web-service-url http://hadoop1:8080/ \
    --web-service-url-tls https://hadoop1:8443/ \
    --broker-service-url pulsar://hadoop1:6650/ \
    --broker-service-url-tls pulsar+ssl://hadoop1:6651/ 

初始化命令的引數說明

  • 叢集的名稱
  • 本地後設資料儲存叢集的連線字串
  • 整個範例的設定儲存連線字串
  • 叢集的web服務URL
  • 支援與叢集中的代理互動的代理服務URL

初始化成功紀錄檔如下

部署BookKeeper

BookKeeper為Pulsar提供持久訊息儲存。每個pulsar broker 都需要自己的bookies叢集。BookKeeper叢集與Pulsar叢集共用一個本地ZooKeeper仲裁。

bookies主機負責在磁碟上儲存訊息資料。為了讓bookie提供最佳的效能,擁有合適的硬體設定對bookie來說是必不可少的。以下是bookies硬體容量的關鍵維度。

  • 磁碟I/O讀寫容量
  • 儲存容量

通過組態檔conf/bookeeper.conf設定BookKeeper bookies。設定每個bookie最重要的方面是確保zkServers引數被設定為Pulsar叢集的本地ZooKeeper的連線字串。vim conf/bookkeeper.conf

# 修改本地地址
advertisedAddress=hadoop1
zkServers=zk1:2181,zk2:2181,zk3:2181
# 可以以兩種方式啟動一個bookie:在前臺或作為後臺守護行程啟動。使用pulsar-daemon命令列工具在後臺啟動一個bookie:
bin/pulsar-daemon start bookie
# 你可以使用BookKeeper shell的bookiesanity命令來驗證bookie是否正常工作,.這個命令在本地bookie上建立一個新的分類賬,寫一些條目,讀回來,最後刪除分類賬。
bin/bookkeeper shell bookiesanity
# 在您啟動了所有的bookie之後,可以在任何bookie節點上使用BookKeeper shell的simpletest命令,以驗證叢集中的所有bookie都在執行。
bin/bookkeeper shell simpletest --ensemble <num-bookies> --writeQuorum <num-bookies> --ackQuorum <num-bookies> --numEntries <num-entries>

其他bookie伺服器也是同樣設定(但需修改本地地址)和啟動。

部署Broker

設定了ZooKeeper,初始化了叢集後設資料,並啟動了BookKeeper bookie,就可以部署代理了。

修改組態檔 vi conf/broker.conf

clusterName=pulsar-cluster
advertisedAddress=hadoop1
zookeeperServers=zk1:2181,zk2:2181,zk3:2181
configurationStoreServers=zk1:2181,zk2:2181,zk3:2181
# 啟動broker,bin/pulsar broker為前臺啟動
./bin/pulsar-daemon start broker

其他broker伺服器也是同樣設定(但需修改本地地址)和啟動。檢視broker的列表

./bin/pulsar-admin brokers list pulsar-cluster 

Admin使用者端和驗證

# 可以設定使用者端機器,這些使用者端機器可以作為每個叢集的管理使用者端。可以使用conf/client.conf組態檔設定admin使用者端。
serviceUrl=http://hadoop1:8080/
  • 建立租戶
bin/pulsar-admin tenants create itxs-tenant \
--allowed-clusters pulsar-cluster \
--admin-roles test-admin-role

  • 建立namespace名稱空間
bin/pulsar-admin namespaces create itxs-tenant/myns
  • 測試生產者和消費者
# 啟動一個消費者,在主題上建立一個訂閱並等待訊息:
bin/pulsar-perf consume persistent://itxs-tenant/myns/test-topic1
# 啟動一個生產者,以固定的速率釋出訊息,並每10秒報告一次統計資料:
bin/pulsar-perf produce persistent://itxs-tenant/myns/test-topic1
# 報告主題統計資訊:
bin/pulsar-admin topics stats persistent://itxs-tenant/myns/test-topic1

生產者的紀錄檔如下

消費者的紀錄檔如下

主題統計資訊的紀錄檔如下

Tiered Storage(層級儲存)

概述

Pulsar的分層儲存特性允許將舊的積壓資料從BookKeeper轉移到長期和更便宜的儲存中,同時允許使用者端存取積壓資料。

以流的方式永久保留原始資料,分割區容量不再限制,充分利用雲端儲存或現在廉價儲存(例如HDFS),資料統一,使用者端無需關心資料究竟存在哪裡。

  • 第一級:通過BookKeeper 預寫紀錄檔
  • 第二級: Pulsar broker,可用於追尾讀。提交訊息後,可以直接將訊息發給所有與此 topic 相關的訂閱者,而不必使用磁碟。
  • 第三級: BookKeeper 節點上的 ledger 儲存磁碟。將訊息寫入 BookKeeper 節點上的紀錄檔時,同時也寫入到定期 flush 的 ledger 儲存磁碟的記憶體緩衝區。BookKeeper 節點使用此磁碟提供讀操作。
    • 在 Pulsar 中,從記憶體緩衝區讀訊息很少見。追尾 consumer 通常直接從 Pulsar 的快取中讀訊息。追趕 consumer 通常請求很早之前的訊息,因此這些訊息一般不儲存在記憶體緩衝區。Ledger 儲存磁碟服務於追趕讀。Ledger 儲存磁碟採用的儲存訊息的格式不僅保證在同一 topic 上儘可能按順序讀取,還優化了在同一磁碟上儲存多個不同 topic 的能力。由於 ledger 儲存磁碟與紀錄檔磁碟相互隔離,讀操作不會影響紀錄檔磁碟中按順序寫入的效能。
    • 如果為 Pulsar 設定了「分層儲存」,則最後一級快取為長期儲存。分層儲存允許使用者對 topic backlog 中的較舊部分採用更節約成本的儲存形式。分層儲存利用了訊息的不可變性,但粒度更大,因為在長期儲存中單獨儲存每條訊息會很浪費空間。Pulsar topic 紀錄檔由分片組成,每個分片預設對應一個包含 50000 條訊息的序列。活躍分片只有一個,活躍分片之前的分片將關閉。當分片關閉時,無法繼續新增新訊息。假定分片中的單條訊息不可變,並且單條訊息的偏移量不可變,則此分片不可變。因此可以複製不可變物件到想要的任何位置。
    • 要在 Pulsar 中使用分層儲存,使用者必須使用基於時間或基於大小的策略來設定 topic 名稱空間以解除安裝分片。當名稱空間中的 topic 達到策略中定義的閾值時,Pulsar broker 將 topic 紀錄檔中最舊的分片複製到長期儲存中,直到該 topic 低於策略閾值。經過一段時間後,Pulsar 從 BookKeeper 中刪除原來的分片,以釋放磁碟空間。
  • 第四級:Pulsar 支援將 Amazon S3 和 S3 相容的物件儲存用於長期儲存,也支援 Azure 儲存,並且從 Pulsar 2.2.0 起支援谷歌雲端儲存。

支援分級儲存

  • 分級儲存使用Apache jclouds支援Amazon S3、GCS(谷歌雲端儲存)、Azure和阿里雲OSS進行長期儲存。
  • 分級儲存使用Apache Hadoop支援檔案系統進行長期儲存

何時使用

當你有一個主題,並且你想要在很長一段時間內保持一個很長的待辦事項列表時,應該使用分層儲存。例如,如果有一個包含用於訓練推薦系統的使用者操作的主題,希望長時間保留該資料,以便在更改推薦演演算法時可以根據完整的使用者歷史重新執行它。

工作原理

Pulsar中的主題由紀錄檔支援,稱為託管分類賬。這個紀錄檔由一個有序的段列表組成。脈衝星只寫入紀錄檔的最後一段。所有之前的片段都是密封的。段內的資料是不可變的。這被稱為面向段的體系結構。

  • 分層儲存解除安裝機制利用了面向段的架構。當請求解除安裝時,紀錄檔段被逐個複製到分級儲存中。寫入分級儲存的紀錄檔的所有段(除了當前段)都可以解除安裝。
  • 寫入BookKeeper的資料預設複製到3臺物理機上。然而,一旦一個段被密封在BookKeeper中,它就變得不可變,可以複製到長期儲存中。長期儲存有潛力實現顯著的成本節約。
  • 在將分類帳解除安裝到長期儲存之前,您需要為雲端儲存服務設定桶、憑據和其他屬性。此外,Pulsar使用多部分物件上傳分段資料,代理可能會在上傳資料時崩潰。建議為bucket新增一個生命週期規則,使其在一天或兩天後過期未完成的多部分上傳,以避免為未完成的上傳收取費用。此外,可以手動(通過REST API或CLI)或自動(通過CLI)觸發解除安裝操作。
  • 在將分類賬解除安裝到長期儲存後,仍然可以使用Pulsar SQL查詢解除安裝的分類賬中的資料。

瞭解層級儲存的基礎知識後本篇先到此,下一篇將實戰介紹層級儲存、Pulsar IO、Pulsar Functions、Pulsar SQL、Transactions的操作和範例演示。

本人部落格網站IT小神 www.itxiaoshen.com