在裸机上部署Pulsar集群 顶
在裸机上部署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!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Dart导入自定义库,系统内置库,第三方库
- 国密SSL协议之C语言编程
- 深度学习之卷积神经网络(CNN)详解与代码实现(二)
- Spring源码学习笔记(4)——注解扫描
- spring笔记一
- 深度学习之卷积神经网络(CNN)的应用-验证码的生成与识别
- struts2的验证
- 强化学习详解与代码实现
- Spring源码学习笔记(5)——@Conditonal注解
- 你好,CloudBase CLI 1.0
- Spring源码学习笔记(6)——REST服务的拦截
- Spring源码学习笔记(7)——使用@Import导入组件
- 深度强化学习(DQN-Deep Q Network)之应用-Flappy Bird
- Could not load driverClass ${jdbc.driver}
- Js通过值获取索引下标