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

本文主要介绍 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": "[email protected]"}'

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

不活动主题删除模式
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/