本文主要介绍 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/