一篇学会 Pulsar 部署与线上配置

一篇学会 Pulsar 部署与线上配置

作者:梁勇 2022-02-21 08:48:00

开发

前端

云原生 Apache Pulsar越来越多的公司使用,与Apache Kafka、Apache RocketMQ并列成为消息领域三家马车,有必要对其研究一番。下面以笔者曾在生产环境使用的配置梳理,希望对大家有所帮助!

一、Pulsar安装与部署

1.下载安装包

Pulsar安装包包含了zookeeper、broker、bookie三个组件。

下载Pulsar二进制包

https://pulsar.apache.org/download/

解压压缩包

tar -zvxf apache-pulsar-2.9.1-bin.tar.gz

2.部署zookeeper

2.1 修改zookeeper配置

创建目录

mkdir -p data/zookeeper

echo 1> data/zookeeper/myid

修改zk配置,文件位于conf/zookeeper.conf

# 数据目录
dataDir=data/zookeeper
# 日志目录
dataLogDir=data/zookeeper/logs
# zk集群配置,server.1~n
server.1=127.0.0.1:2888:3888

2.2 后台启动zookeeper

bin/pulsar-daemon start zookeeper
doing start zookeeper ...
starting zookeeper, logging to /Users/admin/work/software_install/apache-pulsar-2.9.1/logs/pulsar-zookeeper-M-C02GL1NTQ05P.log
Note:Set immediateFlush to truein conf/log4j2.yaml will guarantee the logging event is flushing to disk immediately. The default behavior is switched off due to performance considerations.

通过pulsar-daemon管理pulsar组件

bin/pulsar-daemon help
Error: no enough arguments provided.
Usage: pulsar-daemon (start|stop|restart)<command><args...>
where command is one of:
broker Run a broker server
bookie Run a bookie server
zookeeper Run a zookeeper server
configuration-store Run a configuration-store server
websocket Run a websocket proxy server
functions-worker Run a functions worker server
standalone Run a standalone Pulsar service
proxy Run a Proxy Pulsar service

备注:可以通过pulsar-daemon命令对broker、bookie、zookeeper等组件启动、关闭或者重启。

2.3 检查zookeeper是否启动成功

zookeeper启动日志和查看zookeeper进程

ps axu | grep zookeeper

3.元数据初始化

3.1 初始化命令说明

bin/pulsar initialize-cluster-metadata \
--cluster pulsar-cluster-1 \
--zookeeper 127.0.0.1:2181 \
--configuration-store 127.0.0.1:2181 \
--web-service-url http://127.0.0.1:8080 \
--web-service-url-tls https://127.0.0.1:8443 \
--broker-service-url pulsar://127.0.0.1:6650 \
--broker-service-url-tls pulsar+ssl://127.0.0.1:6651

参数说明

参数说明

参数

说明

cluster

默认集群名称

zookeeper

本地集群使用的zk地址

configuration-store

多个集群全局的zk集群地址,各个集群之间同步数据,单机群地址同上面参数zookeeper即可

web-service-url

Broker的管理流地址,例如创建删除主题等

web-service-url-tls

Broker开启TLS,管理流则使用该地址

broker-service-url

Broker数据流地址,发送接受消息等

broker-service-url-tls

Broker开启TLS,数据流则使用该地址

备注:生产环境可以使用域名。

3.2 查看初始化结果

bin/pulsar zookeeper-shell

[zk: localhost:2181(CONNECTED)1] ls /
[admin, bookies, ledgers, pulsar, stream, zookeeper]

4.部署BookKeeper集群

4.1 配置修改

bindAddress=127.0.0.1
advertisedAddress=127.0.0.1
zkServers=127.0.0.1:2181

参数说明

参数

说明

bindAddress

服务监听的地址,默认 0.0.0.0

advertisedAddress

服务向外发布的主机名或者IP,默认为IntetAddress.getLocalHost().getHostName

zkServers

zk集群地址,可与broker共用

4.2 命令启动

bin/pulsar-daemon start bookie
doing start bookie ...
starting bookie, logging to /Users/admin/work/software_install/apache-pulsar-2.9.1/logs/pulsar-bookie-M-C02GL1NTQ05P.log
Note:Set immediateFlush to truein conf/log4j2.yaml will guarantee the logging event is flushing to disk immediately. The default behavior is switched off due to performance considerations.

4.3 测试bookie集群

bin/bookkeeper shell simpletest --ensemble 1 --writeQuorum 1 --ackQuorum 1 -- numEntries 1000

...
2022-02-19T23:43:03,391+0800[main] INFO org.apache.bookkeeper.tools.cli.commands.client.SimpleTestCommand-722 entries written
2022-02-19T23:43:03,983+0800[main] INFO org.apache.bookkeeper.tools.cli.commands.client.SimpleTestCommand-1000 entries written to ledger 0
2022-02-19T23:43:04,041+0800[main] INFO org.apache.bookkeeper.proto.PerChannelBookieClient- Closing the per channel bookie client for 127.0.0.1:3181
...

备注:通过simpletest命令向bookie集群写入测试数据,完成测试后会自动删除。

5.部署Broker集群

5.1 修改配置

zookeeperServers=127.0.0.1:2181
configurationStoreServers=127.0.0.1:2181
bindAddress=127.0.0.1
# 默认InetAddress.getLocalHost().getHostName()
advertisedAddress=127.0.0.1
clusterName=pulsar-cluster-1

5.2 启动broker

bin/pulsar-daemon start broker
doing start broker ...
starting broker, logging to /Users/admin/work/software_install/apache-pulsar-2.9.1/logs/pulsar-broker-M-C02GL1NTQ05P.log
Note:Set immediateFlush to truein conf/log4j2.yaml will guarantee the logging event is flushing to disk immediately. The default behavior is switched off due to performance considerations.

5.3 验证集群

查看集群节点

bin/pulsar-admin brokers list cluster-1
"172.17.13.184:8080"

发送测试消息

bin/pulsar-client produce persistent://public/default/test -n 1-m "Hello Pulsar"
...
2022-02-20T13:31:18,469+0800[main] INFO org.apache.pulsar.client.cli.PulsarClientTool-1 messages successfully produced
...

消费测试消息

bin/pulsar-client consume persistent://public/default/test -n 100-s "consumer-test"-t "Exclusive"
...
----- got message -----
key:[null], properties:[], content:Hello Pulsar
...

小结:至此测试集群搭建完成,下文将介绍生产环境配置的调整项。

二、生产环境配置

1.机器配置

下面为生产环境搭建Pulsar集群,由3个zookeeper节点、3个broker节点和5个bookie节点构成。

组件配置

组件  配置
zookeeper 4C8G100G *3
broker 16C64G500G *3
bookie 16C64G500G *5

备注:每个组件集群部署时可以同城跨可用区部署,提高高可用。broker不存储消息100G即可,bookie存储消息通常需要较大磁盘,比如3T,具体根据消息量计算。

2.内存优化

配置项

内存大小或者比例,总大小

系统OS缓存

1~2G

Jvm内存和堆外内存

1/2(除去系统缓存后剩余缓存的一半),其中Jvm heap占1/3,堆外内存Direct Memory占2/3

PageCache内存大小

1/2(除去系统缓存后剩余缓存的一半)

2.1 broker内存调整

以内存64G大小,在文件conf/pulsar_env.sh修改如下内容:

PULSAR_MEM=${PULSAR_MEM:-"-Xms10g -Xmx10g -XX:MaxDirectMemorySize=20g"}

2.2 bookie内存调整

以内存64G大小,在文件conf/bkenv.sh修改如下内容:

BOOKIE_MEM=${BOOKIE_MEM:-${PULSAR_MEM:-"-Xms10g -Xmx10g -XX:MaxDirectMemorySize=20g"}}

3.Broker调整项

配置项

说明

zookeeperServers=x.x.x.x:2181,x.x.x.x:2181,x.x.x.x:2181

本地zookeeper集群地址

configurationStoreServers=x.x.x.x:2181,x.x.x.x:2181,x.x.x.x:2181

配置存储Zookeeper集群地址

bindAddress=x.x.x.x

服务监听的地址,可以为本机IP,默认为0.0.0.0

advertisedAddress=x.x.x.x

服务向外发布的主机名或者IP,默认为IntetAddress.getLocalHost().getHostName

clusterName=cluster-xxx

集群名称

brokerDeleteInactiveTopicsEnabled=false

关闭自动删除不活动的主题

defaultNumberOfNamespaceBundles=12

Bundle的数量应为broker数量的整数倍,默认为4

defaultRetentionSizeInMB=1T

消费确认过的消息超过该⼤⼩后会触发删除策略

defaultRetentionTimeInMinutes=1w

消费确认过的消息超过指定时间后触发删除策略

backlogQuotaDefaultLimitGB=-1

保持默认,未被消费确认的消息⼤存储⼤⼩

默认为-1表示没有限制,可以通过set-message-ttl设置过期时间,防⽌磁盘爆满

backlogQuotaDefaultRetentionPolicy=producer_request_hold

保持默认,未被消费确认的消息超过存储⼤⼩的策略

managedLedgerDefaultEnsembleSize=3

创建Ledger时指定Ensemble的⼤⼩

managedLedgerDefaultWriteQuorum=3

创建Ledger时指定Quorum的⼤⼩

managedLedgerDefaultAckQuorum=2

创建Ledger时指定ack Quorum的⼤⼩

dispatcherMaxReadBatchSize=500

⼀次从bookkeeper读取的数量,默认为100条

loadBalancerAutoBundleSplitEnabled=false

关闭auto bundle split功能,提⾼客户端稳定性

loadBalancerAutoUnloadSplitBundlesEnabled=false

关闭auto bundle split功能,提⾼客户端稳定性

loadBalancerSheddingEnabled=false

禁⽌Pulsar⾃动均衡

loadBalancerEnabled=false

禁⽌Pulsar⾃动均衡

备注:参数根据实际情况调整,在线上开启负载均衡时,发现有重复消息,此处先将其关闭。

4.Bookie调整项

配置项说明

配置项

说明

zkServers=x.x.x.x:2181,x.x.x.x:2181,x.x.x.x:2181

本地zookeeper集群地址

journalDirectory=/data/bookkeeper/journal01,/data/bookkeeper/journal02

BookKeeper存储其预写⽇志的⽬录,多个⽬录逗号进⾏分割,防⽌线程阻塞

ledgerDirectories=/data/bookkeeper/ledgers01,/data/bookkeeper/ledgers02

指定存储BookKeeper输出ledger的⽬录。多个ledger⽬录,需要使⽤逗号分割

备注:journalDirectory和ledgerDirectories在条件允许的情况可以配置到不同的磁盘。

本文转载自微信公众号「瓜农老梁」,可以通过以下二维码关注。转载本文请联系瓜农老梁公众号。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/253525.html<

(0)
管理的头像管理
上一篇2025-04-29 22:51
下一篇 2025-04-29 22:52

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注