Pulsar 入門實戰(3)--安裝

且行且码發表於2024-09-01

本文主要介紹 Pulsar 的安裝,相關的環境及軟體資訊如下:CentOS 7.9.2009、Pulsar 3.3.0、Java 17.0.10。

1、單機版安裝

為了本地開發和測試,可以以單機模式執行 Pulsar。單機模式將所有元件執行在單個 Java 虛擬機器(JVM)程序內。

官網(https://pulsar.apache.org/download/)下載安裝包並解壓:

tar zxvf apache-pulsar-3.3.0-bin.tar.gz

啟動 pulsar:

bin/pulsar standalone

如果機器記憶體較小,可能無法啟動,需調整 pulsar 的記憶體大小,修改 conf/pulsar_env.sh 檔案中的 PULSAR_MEM 引數:

PULSAR_MEM=${PULSAR_MEM:-"-Xms256m -Xmx512m -XX:MaxDirectMemorySize=1g"}

2、單叢集安裝

2.1、叢集規劃

主機 部署元件
10.49.196.30 Broker、Bookie、Zookeeper
10.49.196.31 Broker、Bookie、Zookeeper
10.49.196.32 Broker、Bookie、Zookeeper

2.2、Zookeeper 叢集部署

Zookeeper 可以使用單獨安裝的叢集,也可以使用 Pulsar 自帶的 Zookeeper;這裡使用 Pulsar 自帶的 Zookeeper。

A、修改 conf/zookeeper.conf 檔案:

#以下注釋掉
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=8000
#metricsProvider.exportJvmInfo=true

#以下新增
server.1=10.49.196.30:2888:3888
server.2=10.49.196.31:2888:3888
server.3=10.49.196.32:2888:3888

B、根據配置檔案中的 dataDir 引數(預設為 data/zookeeper)建立資料目錄:

mkdir -p data/zookeeper

C、建立 id 檔案

echo 1 > data/zookeeper/myid #10.40.196.30 上執行
echo 2 > data/zookeeper/myid #10.40.196.31 上執行
echo 3 > data/zookeeper/myid #10.40.196.32 上執行

D、啟停 Zookeeper

bin/pulsar-daemon start zookeeper #啟動
bin/pulsar-daemon stop zookeeper #停止

2.3、後設資料初始化

可以使用 pulsar CLI 工具的 initialize-cluster-metadata 命令來初始化後設資料。在任一臺機器上執行:

bin/pulsar initialize-cluster-metadata \
    --cluster pulsar-cluster-1 \
    --metadata-store zk:10.49.196.30:2181,10.49.196.31:2181,10.49.196.32:2181 \
    --configuration-metadata-store zk:10.49.196.30:2181,10.49.196.31:2181,10.49.196.32:2181 \
    --web-service-url http://10.49.196.30:8080,10.49.196.31:8080,10.49.196.32:8080 \
    --broker-service-url pulsar://10.49.196.30:6650,10.49.196.31:6650,10.49.196.32:6650 \

命令選項說明:

選項 說明
--cluster* 叢集名稱
--metadata-store* 後設資料儲存的連線字串,只需包含 ZooKeeper 叢集中的一臺機器即可
--configuration-metadata-store* 配置後設資料儲存的連線字串,與 --metadata-store 類似,只需包含 ZooKeeper 叢集中的一臺機器即可
--web-service-url* 叢集的 Web 服務 URL,預設埠是 8080(最好不要使用不同的埠)
--web-service-url-tls 叢集的 TLS Web 服務 URL,預設埠是 8443(最好不要使用不同的埠)
--broker-service-url* broker 服務 URL,預設埠是 6650(最好不要使用不同的埠)
--broker-service-url-tls broker TLS 服務 URL,預設埠是 6651(最好不要使用不同的埠)

注意:當配置一個新的叢集時,需要在後設資料儲存(例如 ZooKeeper)上初始化叢集的後設資料,只需初始化一次。

2.4、BookKeeper 叢集部署

修改 conf/bookkeeper.conf 檔案,配置後設資料服務地址:

metadataServiceUri=zk://10.49.196.30:2181;10.49.196.31:2181;10.49.196.32:2181/ledgers

啟動 bookie:

bin/pulsar-daemon start bookie

如果叢集記憶體不夠,可以在 conf/bkenv.sh 中調整記憶體引數:

BOOKIE_MEM=${BOOKIE_MEM:-${PULSAR_MEM:-"-Xms256m -Xmx512m -XX:MaxDirectMemorySize=1g"}}

bookie 啟動後,可以執行以下命令來驗證 bookie 是否正常工作:

bin/bookkeeper shell bookiesanity

該命令在本地建立一個臨時的 BookKeeper ledger,寫入幾個條目,讀取它們,最後刪除這個 ledger。

在啟動所有 bookie 後,可以在任一節點上使用以下命令,來驗證叢集中所有 bookie 是否正常執行:

bin/bookkeeper shell simpletest --ensemble <num-bookies> --writeQuorum <num-bookies> --ackQuorum <num-bookies> --numEntries <num-entries>

該命令在叢集上建立一個 ledger,該 ledger 位於 num-bookies 個 bookie 上,寫入 numEntries 個條目,最後刪除這個 ledger。

2.5、Pulsar brokers 部署

修改 broker 配置檔案 conf/broker.conf:

metadataStoreUrl=zk:10.49.196.30:2181,10.49.196.31:2181,10.49.196.32:2181
configurationMetadataStoreUrl=zk:10.49.196.30:2181,10.49.196.31:2181,10.49.196.32:2181
clusterName=pulsar-cluster-1

啟動 broker:

bin/pulsar-daemon start broker

2.6、使用 pulsar-client 連線 pulsar 叢集

修改配置檔案 conf/client.conf:

webServiceUrl=http://10.49.196.30:8080,10.49.196.31:8080,10.49.196.32:8080
brokerServiceUrl=pulsar://10.49.196.30:6650,10.49.196.31:6650,10.49.196.32:6650

傳送訊息:

bin/pulsar-client produce \
    persistent://public/default/test \
    -n 1 \
    -m "Hello Pulsar"

接受訊息:

bin/pulsar-client consume \
    persistent://public/default/test \
    -n 100 \
    -s "consumer-test" \
    -t "Exclusive"

3、多叢集安裝

一個 Pulsar 例項由多個 Pulsar 叢集組成,它們之間協同工作;這些叢集分佈在不同的資料中心或地理區域,使用地理複製技術在它們之間進行資料複製。多叢集安裝較複雜,這裡就不詳細介紹,可參考官網 https://pulsar.apache.org/docs/3.3.x/deploy-bare-metal-multi-cluster

4、pulsar-manager 安裝

4.1、下載並解壓安裝包

官網(https://pulsar.apache.org/download/)下載安裝包,然後解壓。

wget https://dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.4.0/apache-pulsar-manager-0.4.0-bin.tar.gz
tar -zxvf apache-pulsar-manager-0.4.0-bin.tar.gz

4.2、解壓後端應用包並複製前端資源到後端目錄

cd apache-pulsar-manager-0.4.0-bin
tar xvf pulsar-manager.tar
cd pulsar-manager
cp -r ../dist ui

4.3、啟動 pulsar-manager

./bin/pulsar-manager #不能使用 JDK17,會報錯

啟動後訪問地址為:http://host:7750/ui/index.html。

4.4、初始化使用者

CSRF_TOKEN=$(curl http://10.49.196.32:7750/pulsar-manager/csrf-token)
curl \
    -H "X-XSRF-TOKEN: $CSRF_TOKEN" \
    -H "Cookie: XSRF-TOKEN=$CSRF_TOKEN;" \
    -H 'Content-Type: application/json' \
    -X PUT http://10.49.196.32:7750/pulsar-manager/users/superuser \
    -d '{"name": "admin", "password": "apachepulsar", "description": "test", "email": "username@test.org"}'

4.5、配置環境

Service URL 和 Bookie URL 只需配置叢集中一個結點的地址,配多個會報錯。

5、Pulsar 常用配置

5.1、Broker(conf/broker.conf)

引數 說明 型別 預設值 是否動態引數
clusterName* 叢集名稱 java.lang.String null false
authenticationEnabled 是否啟用認證 boolean false false
authenticationProviders 身份驗證提供者 java.util.Set [] false
authenticationRefreshCheckSeconds 檢查身份憑證過期的時間間隔 int 60 false
anonymousUserRole 匿名使用者的角色 java.lang.String null false
authorizationEnabled 是否啟用授權 boolean false false
disableHttpDebugMethods 是否禁用 TRACE 和 TRACK 請求 boolean false false
httpMaxRequestHeaderSize 請求頭的最大大小,單位為位元組 int 8192 false
httpMaxRequestSize 請求體的最大大小 int -1 false
httpRequestsFailOnUnknownPropertiesEnabled 請求中有位置引數時是否失敗 boolean false true
httpRequestsLimitEnabled 是否啟用對請求的限制 boolean false false
httpRequestsMaxPerSecond 每秒允許的最大 HTTP 請求次數 double 100 false
brokerDeleteInactivePartitionedTopicMetadataEnabled 是否自動刪除不活動分割槽主題的後設資料資訊 boolean false true
brokerDeleteInactiveTopicsEnabled 是否自動刪除不活動主題 boolean true true
brokerDeleteInactiveTopicsFrequencySeconds 檢查不活動主題的間隔 int 60 true
brokerDeleteInactiveTopicsMaxInactiveDurationSeconds 不活動主題存活的最長時間 java.lang.Integer null true
brokerDeleteInactiveTopicsMode

不活動主題刪除模式
delete_when_no_subscriptions 刪除沒有訂閱者且沒有活躍生產者的主題
delete_when_subscriptions_caught_up 刪除所有訂閱者都沒有積壓訊息且沒有活躍生產者/消費者的主題

InactiveTopicDeleteMode delete_when_no_subscriptions true
brokerMaxConnections broker 最大連線數 int 0 false
brokerMaxConnectionsPerIp 連線 broker 時,每個 IP 的最大連線數 int 0 false
bindAddress 繫結地址 java.lang.String 0.0.0.0 false
bindAddresses 額外的繫結地址,格式化為 <listener_name>:<scheme>://<host>:<port> java.lang.String null false
brokerServicePort broker 埠,與 bindAddress 引數組成一個繫結地址:bindAddress:brokerServicePort java.util.Optional Optional[6650] false
brokerServicePortTls broker tls 埠,與 bindAddress 引數組成一個繫結地址:bindAddress:brokerServicePortTls java.util.Optional Optional.empty false
brokerShutdownTimeoutMs 優雅關閉 broker 的等待時間,超過此時間,程序將被強制終止。 long 60000 true
clientLibraryVersionCheckEnabled 是否啟用檢查最低允許的客戶端庫版本 boolean false true
configurationMetadataStoreUrl 配置後設資料地址,如果為空則使用 metadataStoreUrl java.lang.String null false
delayedDeliveryEnabled 是否啟用訊息的延遲投遞 boolean true false
delayedDeliveryMaxDelayInMillis 延遲投遞的最大允許延遲(以毫秒為單位)。如果 broker 接收到的訊息超過了此最大延遲,那麼將向生產者返回錯誤。預設值為 0,表示沒有最大投遞延遲限制。 long 0 false
delayedDeliveryMaxDelayInMillis 檢查延遲訊息是否已到投遞時間的時間間隔,預設為 1 秒 long 1000 false
enableNonPersistentTopics 是否允許 broker 載入非持久化主題 boolean true false
enablePersistentTopics 是否允許 broker 載入持久化主題 boolean true false
keepAliveIntervalSeconds 檢查 Pulsar 連線是否仍然活動的頻率 int 30 false
maxConcurrentHttpRequests web 請求最大併發連線數 int 1024 false
maxConsumersPerSubscription 一個訂閱允許的最大消費者個數 int 0 false
maxConsumersPerTopic 一個主題允許的最大消費者個數 int 0 false
maxHttpServerConnections 最大 HTTP 連線數 int 2048 false
maxMessageSize 訊息的最大大小 int 5242880 false
maxNumPartitionsPerPartitionedTopic 分割槽主題的最大分割槽數 int 0 true
maxProducersPerTopic 一個主題允許的最大生產者個數 int 0 false
maxPublishRatePerTopicInBytes 釋出訊息到一個主題的最大速率(byte/s) long 0 true
maxPublishRatePerTopicInMessages 釋出訊息到一個主題的最大速率(個/s) int 0 true
maxSameAddressConsumersPerTopic 一個主題同一 IP 的最大消費者個數 int 0 false
maxSameAddressProducersPerTopic 一個主題同一 IP 的最大生產者個數 int 0 false
maxSubscriptionsPerTopic 一個主題的最大訂閱數 int 0 false
maxTenants Pulsar 叢集可以建立的最大租戶數 int 0 false
metadataStoreUrl 後設資料儲存地址(Zookeeper 地址) java.lang.String null false
systemTopicEnabled 是否啟用系統主題 boolean true false
webServicePort Web 服務埠 java.util.Optional Optional[8080] false
webServicePortTls Web 服務 TLS 埠 java.util.Optional Optional.empty false
allowAutoTopicCreation 是否允許自動建立主題 boolean true true
allowAutoTopicCreationType 允許自動建立的主題型別 TopicType non-partitioned true

5.2、Client(conf/client.conf)

引數 說明 型別 是否必須 預設值
webServiceUrl REST API 服務地址 java.lang.String Required http://localhost:8080/
brokerServiceUrl Pulsar 二進位制協議服務地址 java.lang.String Required pulsar://localhost:6650/

5.3、Log4j(conf/log4j.yaml)

引數 說明 預設值
pulsar.log.dir 日誌目錄 logs
pulsar.log.file pulsar 日誌檔案 plusar.log

參考:
https://pulsar.apache.org/docs/3.3.x/deploy-bare-metal/
https://pulsar.apache.org/reference/#/3.3.x/config/

相關文章