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

Pulsar 入门实战(3)--安装_apache

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、配置环境

Pulsar 入门实战(3)--安装_apache_02

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

不活动主题删除模式
delete_when_no_subscriptions 删除没有订阅者且没有活跃生产者的主题
delete_when_subscriptions_caught_up 删除所有订阅者都没有积压消息且没有活跃生产者/消费者的主题

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


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/