提示
apache-pulsar-io-connectors
包并在每个broker节点或每个function-worker节点上的pulsar目录中的connectors
目录下的安装apache-pulsar-io-connectors
,如果您为Pulsar Functions运行了一个单独的函数工作者集群 。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,建议使用以下配置:
如果您没有足够的机器,或者在集群模式下尝试使用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的计算机,建议使用功能较弱的计算机或VM。 Pulsar仅将ZooKeeper用于与协调有关的定期任务和与配置有关的任务,而对于基本操作则不使用ZooKeeper。例如,如果您在 Amazon Web Services (AWS)上运行Pulsar,则t2.small实例可能就足够了。
对于运行bookie和Pulsar broker的机器,需要功能更强大的机器。 以AWS部署为例, i3.4xlarge实例可能是合适的。 在这些机器上,您可以使用以下命令:
您需要在集群中的每台机器上安装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版本的连接器:
下载.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为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处理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消息并提供Pulsar的管理界面。 一个不错的选择是运行3个代理,每台已经运行BookKeeper Bookie的计算机上运行一个。
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 Functions,您可以按照如下说明操作:
conf/broker.conf
以启用functions worker,方法是将functionsWorkerEnabled
设置为true
。
functionsWorkerEnabled=true
conf/functions_worker.yml
并将pulsarFunctionsCluster
设置为您在初始化集群的元数据时提供的集群名称。.
pulsarFunctionsCluster: pulsar-cluster-1
如果您想了解更多关于部署functions worker的选项,请查看部署和管理functions worker.
然后,您可以在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
如果您已经启用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!