在裸機上部署Pulsar集羣
提示
- 除最雄心勃勃的用例外,所有其他應用程序都應具有單集羣的Pulsar安裝。 如果您有興趣嘗試使用Pulsar或在初創公司或單個團隊中使用Pulsar,則選擇單個羣集是最簡單的。 如果您確實需要運行多集羣Pulsar實例,請參見指南here.
- 如果要在Pulsar部署中使用所有內置的Pulsar IO連接器,則需要下載
apache-pulsar-io-connectors
包並在每個broker節點或每個function-worker節點上的pulsar目錄中的connectors
目錄下的安裝apache-pulsar-io-connectors
,如果您爲Pulsar Functions運行了一個單獨的函數工作者集羣 。- 如果您想在您的Pulsar部署中使用分級存儲特性, 您需要下載
apache-pulsar-offloaders
包,並在每個broker節點的pulsar目錄的offloaders
目錄下安裝apache-pulsar-offloaders
。 有關如何配置此功能的詳細信息,請參考[分層存儲指南書]。(http://pulsar.apache.org/docs/en/2.6.0/cookbooks-tiered-storage).
部署Pulsar集羣需要做以下工作(按順序):
- 部署一個ZooKeeper集羣(可選)
- 初始化集羣元數據
- 部署一個BookKeeper集羣
- 部署一個或多個Pulsar brokers
準備
需求
如果您已經有一個現有的zookeeper集羣,並且希望重用它,則不需要準備運行zookeeper的機器。
要在裸機上運行Pulsar,建議使用以下配置:
- 至少6臺Linux機器或VMs
- 3臺用於運行ZooKeeper
- 3臺個用於運行Pulsar broker和一個BookKeeper bookie
- 覆蓋所有Pulsa broker主機的單個DNS名稱
如果您沒有足夠的機器,或者在集羣模式下嘗試使用Pulsar(稍後擴展集羣),您可以在一個節點上部署完整的Pulsar配置,其中Zookeeper、bookie和broker運行在同一臺機器上。
如果沒有DNS服務器,可以在服務URL中使用多主機格式。
集羣中的每臺機器都需要安裝Java 8或最新版本的Java。
下面是基本設置的示意圖:
在這個圖中,連接客戶端需要能夠使用單個URL與Pulsar集羣通信。在本例中,pulsar-cluster.acme.com
對所有消息處理brokers進行了抽象。Pulsar消息brokers在BookKeeper的bookies的機器上運行;brokers和bookies也要依賴ZooKeeper。
硬件方面的考慮
部署Pulsar羣集時,在進行容量規劃時請記住以下基本的更好選擇。
ZooKeeper
對於運行ZooKeeper的計算機,建議使用功能較弱的計算機或VM。 Pulsar僅將ZooKeeper用於與協調有關的定期任務和與配置有關的任務,而對於基本操作則不使用ZooKeeper。例如,如果您在 Amazon Web Services (AWS)上運行Pulsar,則t2.small實例可能就足夠了。
Bookies 和 Brokers
對於運行bookie和Pulsar broker的機器,需要功能更強大的機器。 以AWS部署爲例, i3.4xlarge實例可能是合適的。 在這些機器上,您可以使用以下命令:
- 快速CPU和10GbpsNIC(適用於Pulsar brokers)
- 小型和快速的固態驅動器 (SSDs)或硬盤驅動器 (HDDs) ,帶有RAID控制器和電池供電的寫緩存(適用於BookKeeper bookies)
安裝Pulsar二進制軟件包
您需要在集羣中的每臺機器上安裝Pulsar二進制軟件包,包括運行ZooKeeper 和 BookKeeper.
要開始在裸機上部署Pulsar集羣,您需要通過以下方式之一下載二進制tarball版本:
$ wget https://archive.apache.org/dist/pulsar/pulsar-2.6.0/apache-pulsar-2.6.0-bin.tar.gz
下載完壓縮包後,將其解壓縮並用cd進入結果目錄:
$ tar xvzf apache-pulsar-2.6.0-bin.tar.gz
$ cd apache-pulsar-2.6.0
提取的目錄包含以下子目錄:
目錄 | 包含 |
---|---|
bin |
command-line tools of Pulsar, such as pulsar and pulsar-admin |
conf |
Configuration files for Pulsar, including for broker configuration, ZooKeeper configuration, and more |
data |
The data storage directory that ZooKeeper and BookKeeper use |
lib |
The JAR files that Pulsar uses |
logs |
Logs that the installation creates |
安裝內置連接器(可選)
URL: https://pulsar.apache.org/docs/en/next/standalone/#install-builtin-connectors-optional
自從Pulsar發佈
2.1.0-incubating
以來,Pulsar提供了一個單獨的二進制發行版,其中包含所有builtin
連接器。 如果要啓用那些builtin
連接器,可以按照以下說明進行操作; 否則,您可以暫時跳過此部分。
要開始使用內置連接器,您需要通過以下一種方式在每個broker節點上下載tarball版本的連接器:
-
通過單擊下面的鏈接並從Apache鏡像下載版本:
-
從Pulsar 下載頁面
-
從Pulsar 發佈頁面
-
使用 wget:
$wget https://archive.apache.org/dist/pulsar/pulsar-2.6.0/connectors/{connector}-2.6.0.nar
下載.nar
文件後,將文件複製到pulsar目錄中的connectors
目錄。 例如,如果您下載連接器文件pulsar-io-aerospike-2.6.0.nar
:
$ mkdir connectors
$ mv pulsar-io-aerospike-2.6.0.nar connectors
$ ls connectors
pulsar-io-aerospike-2.6.0.nar
...
安裝分層存儲卸載器(可選)
URL: https://pulsar.apache.org/docs/en/next/standalone/#install-tiered-storage-offloaders-optional
從Pulsar發佈
2.2.0
以來,Pulsar發佈了一個單獨的二進制發行版,其中包含分層的存儲卸載程序。 如果要啓用分層存儲功能,可以按照以下說明進行操作; 否則,您可以暫時跳過此部分。
要開始使用分層存儲卸載器,您需要在每個代理節點上以下列方式之一下載卸載器tarball版本:
-
單擊下面的鏈接並從Apache鏡像下載該版本:
-
從Pulsar 下載頁面
-
從Pulsar 發佈頁面
-
使用 wget:
$ wget https://archive.apache.org/dist/pulsar/pulsar-2.6.0/apache-pulsar-offloaders-2.6.0-bin.tar.gz
下載壓縮包後,在脈衝星目錄下解壓卸載程序包,並將卸載程序複製爲offloaders
:
$ tar xvfz apache-pulsar-offloaders-2.6.0-bin.tar.gz
// 您可以在pulsar目錄中找到一個名爲`apache-pulsar-offloaders-2.6.0`的目錄
// 然後複製卸載器
$ mv apache-pulsar-offloaders-2.6.0/offloaders offloaders
$ ls offloaders
tiered-storage-jcloud-2.6.0.nar
有關如何配置分層存儲功能的更多細節,可以參考分層存儲參考書
部署一個ZooKeeper集羣
如果您已經有一個現存的zookeeper集羣,並且想要使用它,您可以跳過此部分。
ZooKeeper爲Pulsar管理各種基本的協調和配置相關任務。要部署Pulsar集羣,您需要首先部署ZooKeeper(在所有其他組件之前)。推薦配置3節點的ZooKeeper集羣。Pulsar不大量使用ZooKeeper,所以更多的輕量級機器或vm應該足以運行ZooKeeper。
首先,將所有ZooKeeper服務器添加到conf/zookeeper.conf
中指定的配置中(在Pulsar中 您在上面創建的目錄)。 以下是一個例子:
server.1=zk1.us-west.example.com:2888:3888
server.2=zk2.us-west.example.com:2888:3888
server.3=zk3.us-west.example.com:2888:3888
如果只有一臺機器要部署Pulsar,那麼只需要在配置文件中添加一個服務器條目。
在每臺主機上,您需要在myid文件中指定節點的ID,該文件默認位於每臺服務器的data/zookeeper
文件夾中(您可以通過`dataDir參數更改文件位置).
請參閱ZooKeeper文檔中的多服務器設置指南,以獲取有關`myid'和更多信息的詳細信息。.
例如,在諸如zk1.us-west.example.com
之類的ZooKeeper服務器上,您可以如下設置myid值:
$ mkdir -p data/zookeeper
$ echo 1 > data/zookeeper/myid
在zk2.us-west.example.com
上,命令是echo 2 > data/zookeeper/myid
,依此類推。.
將每臺服務器添加到zookeeper.conf
配置並具有相應的myid
條目後,您可以在所有主機上(在後臺,使用nohup)使用 pulsar-daemon
CLI工具啓動ZooKeeper:
$ bin/pulsar-daemon start zookeeper
如果您計劃在同一個節點上部署Zookeeper,則需要使用不同的統計端口來啓動Zookeeper。
使用pulsar-daemon
CLI工具啓動zookeeper,如下所示:
$ PULSAR_EXTRA_OPTS="-Dstats_server_port=8001" bin/pulsar-daemon start zookeeper
初始化集羣元數據
爲集羣部署ZooKeeper之後,您需要爲實例中的每個集羣向ZooKeeper寫入一些元數據。您只需要寫入該數據一次。
您可以使用pulsar
CLI工具的initialize-cluster-metadata
命令初始化該元數據。此命令可以在ZooKeeper集羣中的任何機器上運行。下面是一個例子:
$ bin/pulsar initialize-cluster-metadata \
--cluster pulsar-cluster-1 \
--zookeeper zk1.us-west.example.com:2181 \
--configuration-store zk1.us-west.example.com:2181 \
--web-service-url http://pulsar.us-west.example.com:8080 \
--web-service-url-tls https://pulsar.us-west.example.com:8443 \
--broker-service-url pulsar://pulsar.us-west.example.com:6650 \
--broker-service-url-tls pulsar+ssl://pulsar.us-west.example.com:6651
正如你從上面的例子中看到的,你需要指定以下內容:
標誌 | 描述 |
---|---|
--cluster |
集羣的名稱 |
--zookeeper |
集羣的"本地"ZooKeeper連接字符串。這個連接字符串只需要包含ZooKeeper集羣中的一臺機器。 |
--configuration-store |
整個實例的配置存儲連接字符串。與--zookeeper 標誌一樣,這個連接字符串只需要在zookeeper集羣中包含一臺機器。 |
--web-service-url |
集羣的Web服務URL,以及一個端口。 該URL應該是標準的DNS名稱。 默認端口爲8080(最好不要使用其他端口)。 |
--web-service-url-tls |
如果使用TLS,則還需要爲羣集指定TLS Web服務URL。 默認端口爲8443(最好不要使用其他端口)。 |
--broker-service-url |
broker 服務URL,可與集羣中的broker 進行交互。 該URL不應使用與Web服務URL相同的DNS名稱,而應使用pulsar 模式。 默認端口爲6650(最好不要使用其他端口)。 |
--broker-service-url-tls |
如果使用TLS,則還需要爲集羣指定TLS Web服務URL以及TLS 集羣中brokers的服務URL。 默認端口爲6651(最好不要使用其他端口)。 |
如果沒有DNS服務器,則可以通過以下設置在服務URL中使用多主機格式:
--web-service-url http://host1:8080,host2:8080,host3:8080 \ --web-service-url-tls https://host1:8443,host2:8443,host3:8443 \ --broker-service-url pulsar://host1:6650,host2:6650,host3:6650 \ --broker-service-url-tls pulsar+ssl://host1:6651,host2:6651,host3:6651
部署BookKeeper集羣
BookKeeper處理Pulsar中的所有持久數據存儲。 您需要部署BookKeeper Bookies集羣才能使用Pulsar。 您可以選擇運行** 3臺機器組成的BookKeeper集羣**。
您可以使用conf/bookkeeper.conf
配置文件來配置BookKeeper bookies 。爲此目的配置bookies的最重要步驟是確保將zkServers
設置爲 ZooKeeper集羣的連接字符串。 以下是一個示例:
zkServers=zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181
一旦您適當地修改了zkServers
參數,您就可以根據需要進行任何其他配置更改。您可以在這裏找到可用的BookKeeper配置參數的完整清單. 但是,查詢BookKeeper文檔以獲得更深入的指導可能是更好的選擇。
說明
自Pulsar 2.1.0發佈以來,Pulsar引入了有狀態函數。如果要啓用該特性,需要在
conf/bookkeeper.conf
文件中執行以下設置來在BookKeeper上啓用表服務。。extraServerComponents=org.apache.bookkeeper.stream.server.StreamStorageLifecycleComponent
在conf/bookkeeper.conf
中應用所需的配置後,就可以在每個BookKeeper主機上啓動一個bookie。 您可以在後臺使用nohup或在前臺啓動每個Bookie。
要在後臺啓動Bookie,請使用pulsar-daemon
CLI工具:
$ bin/pulsar-daemon start bookie
要在前臺啓動bookie:
$ bin/bookkeeper bookie
您可以通過在BookKeeper shell上運行bookiesanity
命令來驗證Bookie是否正常工作:
$ bin/bookkeeper shell bookiesanity
此命令在本地bookie上創建一個臨時BookKeeper分類帳,寫入一些條目,將其讀回,最後刪除該分類帳。
啓動所有Bookies之後,您可以在任何Bookie節點上對BookKeeper shell使用simpletest
命令,以驗證集羣中的所有bookies是否正在運行。
$ bin/bookkeeper shell simpletest --ensemble <num-bookies> --writeQuorum <num-bookies> --ackQuorum <num-bookies> --numEntries <num-entries>
該命令在集羣上創建一個num-bookies
大小的分類帳,寫入一些條目,最後刪除分類帳。
部署Pulsar brokers
Pulsar brokers 是您需要在Pulsar集羣中部署的最後一件事。 brokers處理Pulsar消息並提供Pulsar的管理界面。 一個不錯的選擇是運行3個代理,每臺已經運行BookKeeper Bookie的計算機上運行一個。
配置Brokers
broker配置中最重要的元素是確保每個broker都知道已部署的ZooKeeper集羣。確保zookeeperServers
和 configurationStoreServers
參數正確。 在這種情況下,由於您只有1個集羣並且沒有配置存儲設置,因此configurationStoreServers
指向相同的zookeeperServers
。
zookeeperServers=zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181
configurationStoreServers=zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181
您還需要指定集羣名稱(匹配您在初始化集羣的元數據時提供的名稱):
clusterName=pulsar-cluster-1
此外,當您初始化集羣的元數據時,您需要匹配broker和web服務端口(特別是當您使用與默認端口不同的端口時):
brokerServicePort=6650
brokerServicePortTls=6651
webServicePort=8080
webServicePortTls=8443
如果在單節點集羣中部署Pulsar,則應將
conf/broker.conf
中的複製設置更新爲1
。.# 創建分類帳時要使用的bookies數量 managedLedgerDefaultEnsembleSize=1 # 每個消息要存儲的副本數 managedLedgerDefaultWriteQuorum=1 # 保證副本數(寫完成之前等待的確認) managedLedgerDefaultAckQuorum=1
啓用Pulsar函數(可選)
如果您想啓用Pulsar Functions,您可以按照如下說明操作:
-
編輯
conf/broker.conf
以啓用functions worker,方法是將functionsWorkerEnabled
設置爲true
。functionsWorkerEnabled=true
-
編輯
conf/functions_worker.yml
並將pulsarFunctionsCluster
設置爲您在初始化集羣的元數據時提供的集羣名稱。.pulsarFunctionsCluster: pulsar-cluster-1
如果您想了解更多關於部署functions worker的選項,請查看部署和管理functions worker.
啓動Brokers
然後,您可以在conf/broker.conf
文件中提供您想要的任何其他配置更改。一旦確定了配置,就可以啓動Pulsar集羣的brokers。與ZooKeeper和BookKeeper一樣,您可以使用nohup在前臺或後臺啓動brokers。
您可以使用pulsar broker
命令在前臺啓動一個broker:
$ bin/pulsar broker
您可以使用pulsar-daemon
CLI工具在後臺啓動一個broker:
$ bin/pulsar-daemon start broker
一旦你成功地啓動了你打算使用的所有brokers,你的Pulsar集羣就應該準備好了!
連接到正在運行的集羣
一旦Pulsar羣集啓動並運行,您應該能夠使用Pulsar客戶端與其進行連接。 這樣的客戶端就是pulsar-client
工具,它包含在Pulsar二進制包中。 pulsar-client
工具可以將消息發佈到Pulsar主題並從中使用,從而提供一種簡單的方法來確保您的集羣正常運行。
要使用pulsa-client
工具,首先修改二進制包中conf/client.conf
的客戶端配置文件。您需要更改webServiceUrl
和 brokerServiceUrl
的值,將localhost
(這是默認值)替換爲分配給您的broker/bookie
主機的DNS名稱。下面是一個例子:
webServiceUrl=http://us-west.example.com:8080
brokerServiceurl=pulsar://us-west.example.com:6650
如果沒有DNS服務器,則可以在服務URL中指定多主機,如下所示:
webServiceUrl=http://host1:8080,host2:8080,host3:8080 brokerServiceurl=pulsar://host1:6650,host2:6650,host3:6650
一旦完成,您可以發佈消息到Pulsar主題:
$ bin/pulsar-client produce \
persistent://public/default/test \
-n 1 \
-m "Hello Pulsar"
如果指定的集羣名稱不是
pulsar-cluster-1
,則可能需要在主題中使用不同的集羣名稱。
該命令向Pulsar主題發佈一條消息。此外,您可以在不同的終端訂閱Pulsar主題,然後發佈消息,如下:
$ bin/pulsar-client consume \
persistent://public/default/test \
-n 100 \
-s "consumer-test" \
-t "Exclusive"
一旦您成功地將上述消息發佈到主題,您應該會在標準輸出中看到:
----- got message -----
Hello Pulsar
運行Functions
如果您已經啓用Pulsar 函數,那麼現在可以嘗試一下。
創建一個ExclamationFunction exclamation
。
bin/pulsar-admin functions create \
--jar examples/api-examples.jar \
--classname org.apache.pulsar.functions.api.examples.ExclamationFunction \
--inputs persistent://public/default/exclamation-input \
--output persistent://public/default/exclamation-output \
--tenant public \
--namespace default \
--name exclamation
通過triggering檢查該函數是否按預期運行。
bin/pulsar-admin functions trigger --name exclamation --trigger-value "hello world"
您應該看到以下輸出:
hello world!