Apache Pulsar 5.0 介绍与选型指南
Apache Pulsar 5.0.0(2026-10-06 发布的 5.0 LTS)的定位、计算存储分离架构、多租户与订阅模型、官方 standalone 快速上手,以及与 Kafka、RocketMQ、ActiveMQ 的选型对比。
Apache Pulsar 5.0 介绍与选型指南
目标:讲清 Apache Pulsar(下文简称 Pulsar)是什么、解决什么问题、架构如何组成、有哪些功能特性,以及在 2026 年 10 月当前最新稳定版 5.0.0 下的同类消息平台选型对比。本文为 A1 认知篇:全部内容基于官方发行目录、官方下载页与官方文档联网查证编写,关键论断随文标注来源,查询日期统一为 2026-10-18,不含任何本地安装实测。
一、信息基准
| 项目 | 内容 |
|---|---|
| 查询日期 | 2026-10-18 |
| 版本依据 | 官方下载页 Supported Versions 表:5.0(LTS)发布于 2026-10-06,当前版本 5.0.0(2026-10-06);ASF 官方发行目录 https://downloads.apache.org/pulsar/ 当前在架 pulsar-5.0.0/(目录时间戳 2026-10-05)、pulsar-4.2.5/、pulsar-4.0.14/、pulsar-3.3.9/、pulsar-3.0.17/ |
| 系列状态 | 官方下载页:5.0(LTS)活动支持至 2028-10-06、安全支持至 2029-10-06;4.0(LTS)当前版 4.0.14(2026-10-06),活动支持将于 2026-10-22 结束、安全支持至 2027-10-22 |
| 5.0 发布公告 | 官方博客《Apache Pulsar 5.0 LTS: Scalable Topics and Faster Existing Workloads》(2026-10-05,pulsar.apache.org/blog/2026/10/05/announcing-apache-pulsar-5-0) |
| 许可证 | Apache License 2.0 |
| 运行语言/依赖 | Java。5.0.x 官方文档要求服务端(含 standalone)64 位 Java 21 或更高(官方推荐 Java 25);Java 客户端库最低 Java 17 |
官方来源清单:
- 项目主页:https://pulsar.apache.org/
- 下载页(含支持版本表):https://pulsar.apache.org/download/
- ASF 发行目录:https://downloads.apache.org/pulsar/
- 5.0.x 架构概览:https://pulsar.apache.org/docs/5.0.x/concepts-architecture-overview/
- 5.0.x standalone 快速上手:https://pulsar.apache.org/docs/getting-started-standalone/
- GitHub 仓库:https://github.com/apache/pulsar
- 发行公告:https://pulsar.apache.org/release-notes/versioned/pulsar-5.0.0/
二、软件概述
本文介绍的版本为 Apache Pulsar 5.0.0(5.0 LTS 系列的首个正式版,2026-10-06 发布)。
Pulsar 是 Apache 软件基金会(ASF)顶级项目的分布式发布-订阅消息平台,官方定位为 "distributed pub-sub messaging platform"。它采用计算与存储分离的分层架构:无状态的消息代理(broker)负责协议接入与消息分发,消息持久化交给 Apache BookKeeper 集群,集群元数据则交由独立的元数据存储(Oxia、ZooKeeper 或其他受支持后端)承担。这一结构让消息容量的扩缩容与计算层的扩缩容可以独立进行。
Pulsar 的核心卖点包括:多租户(tenant/namespace 两级隔离)、多种订阅模式(独占、故障转移、共享、按键共享)、内置跨集群地理复制、可插拔分层存储,以及在同一平台上同时覆盖传统消息队列语义(队列、延迟消息)与流式语义(游标、回溯消费)。5.0 作为新的 LTS(长期支持)版本,主打特性为可扩展主题(Scalable Topics)与对既有工作负载的性能优化;官方 5.0 升级文档中同时给出了 standalone 元数据默认切换为 RocksDB 等运行时变化。
社区热度方面,GitHub apache/pulsar 仓库 stars 约 15k(shields.io 实查 2026-10-18)。
三、核心架构
以下内容引自官方 5.0.x 架构概览文档(来源:https://pulsar.apache.org/docs/5.0.x/concepts-architecture-overview/ )。
3.1 实例、集群与代理
Pulsar 最高层的组织单位是实例(instance),一个实例由一个或多个集群组成,集群之间可以互相复制(geo-replication)。每个集群内包含:
- 一个或多个 broker:无状态组件,负责处理与负载均衡生产者发来的消息、向消费者分发消息,并通过元数据存储完成协调任务;broker 同时承担主题(topic)到 broker 的动态归属分配(官方称为 load balance / topic ownership)。
- BookKeeper 集群(bookie 节点):负责消息的持久化存储。
- 元数据存储集群:承担集群内协调任务与元数据存储,官方支持 Oxia、ZooKeeper 等后端。
实例级还有配置存储(configuration store),负责跨集群的协调任务(例如地理复制的配置同步)。
3.2 BookKeeper 持久化存储
持久化消息由 Apache BookKeeper(ASF 另一顶级项目,同为 Java 实现)写入:bookie 以日志与条目的方式按条带(ensemble/写 quorum/ack quorum)复制消息,broker 与存储层因此解耦——扩容存储只需增加 bookie,不影响 broker 的计算能力。standalone 模式下,Pulsar 内嵌运行 BookKeeper,默认使用 RocksDB 作为元数据(官方 standalone 文档)。
3.3 元数据存储:Oxia 与 ZooKeeper
5.0.x 官方架构文档明确,元数据存储支持 "Oxia, ZooKeeper, or other supported backend"。Oxia 是 Pulsar 社区推出的新一代元数据与协调系统;传统部署则继续使用 ZooKeeper(standalone 默认改为 RocksDB,可用环境变量 PULSAR_STANDALONE_USE_ZOOKEEPER=1 切回内嵌 ZooKeeper)。升级时官方要求新旧实例使用相同的元数据后端并保留一致的存储路径。
3.4 主题、命名空间与订阅模型
- 主题(topic):消息的载体,分为 persistent(经由 BookKeeper 持久化)与 non-persistent 两类,还可分为分区(partitioned)主题;5.0 新增可扩展主题(scalable topics),使用
topic://前缀与 v5 客户端 API,订阅与顺序模型见官方 scalable topics 文档。 - 命名空间(namespace):主题的管理单元,隶属于租户(tenant),权限、保留策略、配额等按 namespace 配置;集群启动时默认创建
public/default命名空间。 - 订阅(subscription):四种模式——Exclusive(独占)、Failover(故障转移)、Shared(共享)、Key_Shared(按键共享),覆盖队列消费与广播消费两类语义。
四、功能特性
以下特性均可在官方文档(5.0.x 文档站)中找到对应章节,此处按能力域归纳:
4.1 多租户与安全
tenant → namespace → topic 三级结构内建于数据模型;官方文档提供认证(Authentication)与授权(Authorization)、TLS 加密传输等安全章节,支持按 namespace 配置权限。
4.2 消息语义
持久/非持久主题、分区主题、延迟消息、消息去重(producer 名与序列号)、消息保留(retention)与过期(TTL)、按时间回溯消费(cursor replay)。5.0 引入的可扩展主题将单一逻辑主题的订阅与存储水平拆分,官方博客将其列为 5.0 的头号新特性。
4.3 跨集群地理复制
同一实例内多集群之间配置 replication 即可异步复制消息;配置存储承担跨集群协调。适合异地多活与边缘回传场景。
4.4 分层存储(Tiered Storage)
官方文档支持将较旧的数据段卸载(offload)到外部对象存储(如 S3 兼容存储、HDFS 等),本地 BookKeeper 只保留热数据,从而以低成本支撑长保留周期。
4.5 Pulsar IO 与 Pulsar Functions
Pulsar IO 提供 source/sink 连接器框架,对接外部系统进出 Pulsar;Pulsar Functions 是轻量级流处理单元(Java/Python/Go),standalone 发行包内自带 examples/、instances/ 目录。二者使 Pulsar 可以在一个平台内完成「接入-存储-派生计算」链路。
4.6 多语言客户端与 Schema
官方发行目录中同时发布 pulsar-client-cpp、pulsar-client-go、pulsar-client-python、pulsar-client-node、dotpulsar(.NET)等客户端(当前版本分别为 4.2.0、0.21.0、3.13.0 等,2026-07~09 间发版),Java 客户端随主仓库发布。Schema Registry 内置于 broker,支持 AVRO/JSON/Protobuf 等模式的注册与校验。
五、快速上手(引自官方文档,未本地实测)
以下步骤引自官方 5.0.x 快速上手文档《Run a standalone Pulsar cluster locally》(来源:https://pulsar.apache.org/docs/getting-started-standalone/ ),用于说明最小可用路径;官方同时声明 standalone 仅用于本地开发与测试,且 Pulsar 集群按设计不直接暴露于公共互联网。
- 前置条件:64 位 macOS 或 Linux,Java 21 或更高(推荐 Java 25)。
- 下载并解压官方二进制包:
curl -LO "https://www.apache.org/dyn/closer.lua/pulsar/pulsar-5.0.0/apache-pulsar-5.0.0-bin.tar.gz?action=download"
tar xvfz apache-pulsar-5.0.0-bin.tar.gz
cd apache-pulsar-5.0.0
- 启动 standalone 集群(单 JVM 内运行全部组件):
bin/pulsar standalone
- 创建主题并收发消息:
bin/pulsar-admin topics create persistent://public/default/my-topic
bin/pulsar-client produce my-topic --messages 'Hello Pulsar!'
bin/pulsar-client consume my-topic -s 'my-subscription' -p Earliest -n 0
官方文档显示,消费端会输出形如 ----- got message ----- 与 content:Hello Pulsar! 的内容。后台运行可用 bin/pulsar-daemon start standalone;结束按 Ctrl-C 停止。
六、适用场景与限制
适合选择的场景:
- 需要消息队列与流式语义共存:同一平台内同时要队列(Shared/Key_Shared)与流(回溯、游标)语义。
- 多团队共用一套消息基础设施:多租户隔离、按 namespace 的配额与权限是原生能力。
- 跨数据中心/异地复制:内置 geo-replication,无需额外组建同步链路。
- 长保留周期 + 低成本存储:分层存储把冷数据卸载到对象存储。
- 希望存储与计算独立扩缩容:BookKeeper 与 broker 解耦,扩容互不牵动。
需要权衡的限制(均可在官方文档/发布页对应):
- 组件数量多于单机消息中间件:broker、BookKeeper、元数据存储三类进程,部署与排障的面更宽。
- 运行时要求较高:5.0 服务端要求 Java 21+,官方推荐 Java 25。
- 4.0 LTS 的活动支持将于 2026-10-22 结束(官方下载页),存量 4.x 集群应规划升级窗口。
- standalone 模式官方明确仅用于本地开发测试;生产部署参考官方 Deploying a Pulsar instance 指南(裸机或 Kubernetes/Helm)。
- 官方安全说明:Pulsar 集群设计上假定网络边界防护,不应直接暴露于公共互联网。
七、同类选型对比
对比对象为消息领域三个常被并列考虑的 Apache 项目。下表数据均为 2026-10-18 联网实查:stars 来自 shields.io 对各 GitHub 仓库的实时徽章数据;最近发版来自 ASF 官方发行目录(downloads.apache.org)与官方发布记录。
| 维度 | Apache Pulsar 5.0.0 | Apache Kafka 4.4.0 | Apache RocketMQ 5.5.1 | Apache ActiveMQ Classic 6.3.2 |
|---|---|---|---|---|
| 开源许可 | Apache-2.0 | Apache-2.0 | Apache-2.0 | Apache-2.0 |
| GitHub stars / 最近发版 | 约 15k / 2026-10-06 | 约 34k / 2026-10-15(发行目录在架 4.4.0) | 约 23k / 2026-08-26(发行目录在架 5.5.1) | 约 2.5k / 2026-08-29(GitHub releases 页 activemq-6.3.2 记录) |
| 版本节奏(2026 年内) | 4.0/4.2/5.0 三线并行,月度补丁;5.0 LTS 于 10 月发布 | 4.1.2 → 4.2.2 → 4.3.1 → 4.4.0,四个版本跨 5-10 月 | 5.3.4 → 5.4.0 → 5.5.0 → 5.5.1 | 6.2.10(9 月)/ 6.3.2(8 月)/ 5.19.11,多线维护 |
| 兼容矩阵要点 | 服务端 Java 21+(推荐 25),客户端 Java 17+;官方多语言客户端 C++/Go/Python/Node/.NET | KRaft 内置共识(不再依赖 ZooKeeper);Java 官方客户端与 librdkafka 多语言生态 | Java 实现的 NameServer/Broker;rocketmq-clients 提供 gRPC 协议多语言客户端 | 纯 Java broker;OpenWire/AMQP/STOMP/MQTT 多协议与 JMS 全实现;6.x 系列要求 Java 17+ |
| 架构取向 | 计算存储分离(broker + BookKeeper + 元数据存储),多租户与地理复制内建 | 统一日志(log)抽象,围绕分区(partition)与消费者组 | 名称路由 + 主从/多副本 Broker,队列与定时消息能力突出 | 经典单/主从 broker,协议兼容性最广 |
选型建议:需要多租户、跨机房复制与存算分离的大规模事件平台优先 Pulsar 5.0 LTS;生态与大数据管道集成优先 Kafka;电商交易类高并发队列与定时消息优先 RocketMQ;存量 JMS/多协议遗留系统或轻量部署优先 ActiveMQ Classic。
八、参考链接
- Apache Pulsar 官网:https://pulsar.apache.org/
- 下载页(支持版本与生命周期):https://pulsar.apache.org/download/
- ASF 发行目录(Pulsar):https://downloads.apache.org/pulsar/
- 5.0 发布博客:https://pulsar.apache.org/blog/2026/10/05/announcing-apache-pulsar-5-0
- 5.0.0 发行说明:https://pulsar.apache.org/release-notes/versioned/pulsar-5.0.0/
- 5.0.x 架构概览:https://pulsar.apache.org/docs/5.0.x/concepts-architecture-overview/
- 5.0.x standalone 快速上手:https://pulsar.apache.org/docs/getting-started-standalone/
- 5.0.x 消息概念(主题/订阅):https://pulsar.apache.org/docs/5.0.x/concepts-messaging/
- GitHub 仓库:https://github.com/apache/pulsar
- ASF 官方发行目录(Kafka):https://downloads.apache.org/kafka/
- ASF 官方发行目录(RocketMQ):https://downloads.apache.org/rocketmq/
- ASF 官方发行目录(ActiveMQ):https://downloads.apache.org/activemq/