在裸機上部署Pulsar集羣

在裸機上部署Pulsar集羣

提示

  1. 除最雄心勃勃的用例外,所有其他應用程序都應具有單集羣的Pulsar安裝。 如果您有興趣嘗試使用Pulsar或在初創公司或單個團隊中使用Pulsar,則選擇單個羣集是最簡單的。 如果您確實需要運行多集羣Pulsar實例,請參見指南here.
  2. 如果要在Pulsar部署中使用所有內置的Pulsar IO連接器,則需要下載apache-pulsar-io-connectors包並在每個broker節點或每個function-worker節點上的pulsar目錄中的connectors目錄下的安裝apache-pulsar-io-connectors,如果您爲Pulsar Functions運行了一個單獨的函數工作者集羣 。
  3. 如果您想在您的Pulsar部署中使用分級存儲特性, 您需要下載apache-pulsar-offloaders包,並在每個broker節點的pulsar目錄的offloaders目錄下安裝apache-pulsar-offloaders。 有關如何配置此功能的詳細信息,請參考[分層存儲指南書]。(http://pulsar.apache.org/docs/en/2.6.0/cookbooks-tiered-storage).

部署Pulsar集羣需要做以下工作(按順序):

準備

需求

如果您已經有一個現有的zookeeper集羣,並且希望重用它,則不需要準備運行zookeeper的機器。

要在裸機上運行Pulsar,建議使用以下配置:

  • 至少6臺Linux機器或VMs
  • 覆蓋所有Pulsa broker主機的單個DNS名稱

如果您沒有足夠的機器,或者在集羣模式下嘗試使用Pulsar(稍後擴展集羣),您可以在一個節點上部署完整的Pulsar配置,其中Zookeeper、bookie和broker運行在同一臺機器上。

如果沒有DNS服務器,可以在服務URL中使用多主機格式。

集羣中的每臺機器都需要安裝Java 8或最新版本的Java。

下面是基本設置的示意圖:

alt-text

在這個圖中,連接客戶端需要能夠使用單個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二進制軟件包,包括運行ZooKeeperBookKeeper.

要開始在裸機上部署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版本的連接器:

下載.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版本:

下載壓縮包後,在脈衝星目錄下解壓卸載程序包,並將卸載程序複製爲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-daemonCLI工具啓動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-daemonCLI工具:

$ 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集羣。確保zookeeperServersconfigurationStoreServers參數正確。 在這種情況下,由於您只有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,您可以按照如下說明操作:

  1. 編輯conf/broker.conf以啓用functions worker,方法是將functionsWorkerEnabled設置爲true

    functionsWorkerEnabled=true
    
  2. 編輯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-daemonCLI工具在後臺啓動一個broker:

$ bin/pulsar-daemon start broker

一旦你成功地啓動了你打算使用的所有brokers,你的Pulsar集羣就應該準備好了!

連接到正在運行的集羣

一旦Pulsar羣集啓動並運行,您應該能夠使用Pulsar客戶端與其進行連接。 這樣的客戶端就是pulsar-client工具,它包含在Pulsar二進制包中。 pulsar-client工具可以將消息發佈到Pulsar主題並從中使用,從而提供一種簡單的方法來確保您的集羣正常運行。

要使用pulsa-client工具,首先修改二進制包中conf/client.conf的客戶端配置文件。您需要更改webServiceUrlbrokerServiceUrl的值,將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!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章