本文主要介紹 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 |
不活動主題刪除模式 |
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/