Apache Pulsar 的稳定运行和性能表现高度依赖于其核心组件的配置。理解 Broker、BookKeeper、ZooKeeper 三大组件的配置文件(broker.conf, bookkeeper.conf, zookeeper.conf)中的关键配置项,是部署、调优和运维 Pulsar 集群的必备技能。
📘 Pulsar 配置文件详解:broker.conf、bookkeeper.conf、zookeeper.conf
一、总体架构与配置关系
+---------------------+
| Pulsar Broker |
| - 消息路由、协议处理 | ← broker.conf
+----------+----------+
|
v
+----------+----------+
| Apache BookKeeper |
| - 持久化存储消息 | ← bookkeeper.conf
+----------+----------+
|
v
+----------+----------+
| Apache ZooKeeper |
| - 元数据、协调服务 | ← zookeeper.conf
+---------------------+
✅ 配置文件通常位于 $PULSAR_HOME/conf/ 目录下。
二、Broker 配置文件:broker.conf
1. 核心作用
- 控制 Broker 的服务端口、资源限制、Topic 策略、复制行为、安全认证等。
- 是 Pulsar 对外服务的核心配置。
2. 关键配置项详解
| 配置项 | 默认值 | 说明 |
|---|
brokerServicePort | 6650 | Pulsar 二进制协议端口(Producer/Consumer 连接) |
webServicePort | 8080 | HTTP/REST 服务端口(Admin API、Pulsar Manager) |
zookeeperServers | localhost:2181 | 连接 ZooKeeper 集群地址 |
configurationStoreServers | 同上 | 配置存储(多集群时使用独立 ZK) |
clusterName | standalone | 当前集群名称(用于跨集群复制) |
brokerShutdownTimeoutMs | 60000 | Broker 关闭超时时间 |
3. Topic 与命名空间管理
| 配置项 | 说明 |
|---|
allowAutoTopicCreation | 是否允许自动创建 Topic(默认 true) |
defaultNumPartitions | 自动创建分区 Topic 的默认分区数(如 4) |
topicLevelPoliciesEnabled | 是否启用 Topic 级策略(动态更新) |
4. 存储与 Ledger 策略(与 BookKeeper 交互)
| 配置项 | 说明 |
|---|
managedLedgerDefaultEnsembleSize | 默认 Ensemble 大小(如 3) |
managedLedgerDefaultWriteQuorum | 默认 WQ(如 3) |
managedLedgerDefaultAckQuorum | 默认 AQ(如 2) |
managedLedgerMaxLedgerSizeMB | 单个 Ledger 最大大小(如 512 MB) |
managedLedgerMaxMarkDeleteLedgerAgeIntervalInMinutes | Ledger 滚动最大时间(如 360 = 6小时) |
✅ 推荐:ensemble=3, writeQuorum=3, ackQuorum=2
5. 复制与多集群
| 配置项 | 说明 |
|---|
replicationEnabled | 是否启用跨集群复制(Geo-Replication) |
replicationClusters | 允许复制的集群列表(如 cluster-a,cluster-b) |
6. 安全与认证
| 配置项 | 说明 |
|---|
authenticationEnabled | 是否启用认证 |
authenticationProviders | 认证类(如 org.apache.pulsar.broker.authentication.AuthenticationProviderJWT) |
superUserRoles | 超级用户角色(如 admin) |
brokerClientTlsEnabled | Broker 间通信是否启用 TLS |
7. 性能与流控
| 配置项 | 说明 |
|---|
maxConcurrentLookupRequests | 最大并发 Lookup 请求数(防 DDoS) |
maxPendingPublishRequestsPerConnection | 每连接最大待处理发送请求数 |
dispatchThrottlingRatePerTopicInMsg | 每秒消息分发速率限制 |
enablePersistentTopicAutoCreation | 是否自动创建持久化 Topic |
三、BookKeeper 配置文件:bookkeeper.conf
1. 核心作用
- 配置 Bookie(存储节点)的行为:日志、存储、网络、副本策略、恢复机制等。
- 直接影响 数据持久性、写入性能、恢复速度。
2. 关键配置项详解
| 配置项 | 默认值 | 说明 |
|---|
bookiePort | 3181 | Bookie 服务端口 |
zkServers | localhost:2181 | 连接 ZooKeeper |
journalDirectory | /tmp/pulsar/journal | Journal 文件存储路径(必须 SSD) |
ledgerDirectories | /tmp/pulsar/ledgers | Ledger 数据存储路径 |
indexDirectories | 同 ledgerDirectories | 索引存储(可分离) |
✅ 最佳实践:Journal 和 Ledger 存储分离,避免 I/O 争抢。
3. Journal(预写日志)配置
| 配置项 | 说明 |
|---|
journalFlushWhenQueueEmpty | 是否在队列空时强制刷盘(提高持久性) |
journalRollingThresholdMB | Journal 文件滚动大小(如 2048 = 2GB) |
journalMaxGroupWaitMSec | Journal 写入最大等待时间(如 1 ms) |
✅ Journal 是性能瓶颈,建议使用 NVMe SSD。
4. Ledger 存储与 GC
| 配置项 | 说明 |
|---|
minorCompactionThreshold | 小合并触发比例(如 0.2) |
minorCompactionInterval | 小合并间隔(分钟) |
majorCompactionThreshold | 大合并阈值(如 0.5) |
majorCompactionInterval | 大合并间隔(小时) |
⚠️ BookKeeper 不支持在线压缩,compaction 仅合并 Entry Log 索引。
5. 故障恢复与副本
| 配置项 | 说明 |
|---|
autorecoveryEnabled | 是否启用自动副本修复(推荐 true) |
auditorEnabled | 是否启用审计服务(推荐 true) |
auditorPeriodicBookieCheckInterval | 审计检查间隔(秒) |
6. 性能调优
| 配置项 | 说明 |
|---|
numJournalCallbackThreads | Journal 回调线程数(建议 CPU 核数) |
numAddWorkerThreads | 写入工作线程数 |
nettyMaxFrameSizeBytes | Netty 最大帧大小(如 5242880 = 5MB) |
四、ZooKeeper 配置文件:zookeeper.conf
1. 核心作用
- 配置 ZooKeeper 服务本身(在 Pulsar 中通常用于元数据存储和协调)。
- 在生产环境中,ZooKeeper 通常是独立部署的集群。
2. 关键配置项详解
| 配置项 | 默认值 | 说明 |
|---|
dataDir | /tmp/zookeeper | 内存快照和事务日志目录 |
dataLogDir | 同 dataDir | 事务日志目录(建议分离到 SSD) |
clientPort | 2181 | 客户端连接端口 |
tickTime | 2000 | ZooKeeper 心跳间隔(毫秒) |
initLimit | 10 | Follower 初始连接超时(tickTime 倍数) |
syncLimit | 5 | Follower 同步超时 |
maxClientCnxns | 60 | 每个客户端最大连接数(可调大) |
autopurge.snapRetainCount | 3 | 保留快照数量 |
autopurge.purgeInterval | 0 | 自动清理间隔(小时,设为 1 启用) |
✅ 生产建议:
dataLogDir 使用独立 SSDautopurge.purgeInterval=1 启用自动清理maxClientCnxns=1000 防止连接数不足
3. 集群配置(zoo.cfg 或 conf/zookeeper.conf)
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
2888:Follower 连接 Leader3888:Leader 选举
五、配置文件最佳实践
| 实践 | 建议 |
|---|
| ✅ 生产环境禁用 auto-create | allowAutoTopicCreation=false,预注册 Topic |
| ✅ 分离 Journal 和 Ledger 存储 | 避免 I/O 争抢 |
| ✅ ZooKeeper 使用独立磁盘 | 提升协调性能 |
| ✅ 启用 Autorecovery 和 Auditor | 提升可用性 |
| ✅ 合理设置 Ledger 滚动策略 | 防止过大 Ledger 影响 GC |
| ✅ 监控关键指标 | backlog、under-replicated、disk usage |
| ✅ 配置文件版本化 | 存入 Git,配合 CI/CD |
| ✅ 使用环境变量覆盖 | 在容器中使用 PULSAR_PREFIX_ 前缀 |
示例(Kubernetes):
env:
- name: PULSAR_PREFIX_zookeeperServers
value: "zk1:2181,zk2:2181,zk3:2181"
六、配置验证与调试
pulsar-admin brokers config
bookkeeper shell bookiesanity
echo stat \| nc localhost 2181
✅ 总结
| 组件 | 配置文件 | 核心关注点 |
|---|
| Broker | broker.conf | 服务端口、Topic 策略、复制、安全、流控 |
| BookKeeper | bookkeeper.conf | Journal/存储路径、WQ/AQ、Autorecovery、性能调优 |
| ZooKeeper | zookeeper.conf | dataDir/dataLogDir 分离、自动清理、连接数 |
📌 一句话总结:
broker.conf 决定“服务行为”,bookkeeper.conf 决定“存储可靠性”,zookeeper.conf 决定“协调稳定性” —— 三者协同,构建高可用 Pulsar 集群。