- 消息队列
- 后端
- 流处理
【免费下载链接】pulsar
Apache Pulsar - distributed pub-sub messaging system
Apache Pulsar 官方提供了一套基于 DC/OS(数据中心操作系统)的部署方案:以 Marathon Application Group 的形式,将 BookKeeper 存储层、Pulsar Broker 服务层以及 Prometheus/Grafana 监控层一键编排到 Mesos 集群中。本文以 Apache Pulsar 2.3.0 官方部署文档为骨架,完整还原前置条件、命令行部署、GUI 验证、监控接入、生产消费端到端测试与卸载流程,并结合仓库源码补充端口、镜像与底层组件原理,帮助你在 DC/OS 1.9+ 集群上快速落地一套可运行的 Pulsar 集群。
提示:本文核心操作与命令继承自 deploy-dcos.md,文中涉及的文件路径均以当前仓库根目录为基准。
DC/OS 与 Apache Pulsar 的部署形态
DC/OS(DataCenter Operating System)是一款基于 Apache Mesos 的分布式操作系统,由 Mesosphere 创建并维护,用于在数据中心规模上部署和管理应用程序与系统。Apache Pulsar 以 Marathon Application Group(Marathon 应用组)的形式发布——应用组可以把多个相关应用当作一个可管理的集合统一运行,这正是 Pulsar 集群多组件(BookKeeper、Broker、监控)协同部署的理想载体。
关于镜像选择,官方文档给出了一条重要建议:如果希望在 Pulsar 部署中启用全部内置的 Pulsar IO 连接器,应使用apachepulsar/pulsar-all镜像代替默认的apachepulsar/pulsar镜像。从当前仓库的 pulsar-all Dockerfile 可以看到实现方式:它基于apachepulsar/pulsar:latest,并把/connectors(全部内置连接器)与/offloaders(分层存储卸载器)两个目录合入镜像:
FROM busybox as pulsar-all ARG PULSAR_IO_DIR ARG PULSAR_OFFLOADER_TARBALL ADD ${PULSAR_IO_DIR} /connectors ADD ${PULSAR_OFFLOADER_TARBALL} / RUN mv /apache-pulsar-offloaders-*/offloaders /offloaders FROM apachepulsar/pulsar:latest COPY --from=pulsar-all /connectors /pulsar/connectors COPY --from=pulsar-all /offloaders /pulsar/offloaders两种镜像的定位在 docker/README.md 中有明确说明:apachepulsar/pulsar包含运行一个完整 Pulsar 集群所需的全部组件,apachepulsar/pulsar-all则在此基础上附加大量连接器与卸载器。具体连接器清单可参考 io-overview.md。
前置条件
在 DC/OS 上运行 Pulsar,需要准备以下环境:
- DC/OS 版本 1.9 或更高;
- 一个至少包含 3 个 agent 节点的 DC/OS 集群;
- 已安装 DC/OS CLI 工具;
- 获取
PulsarGroups.json配置文件——该文件是本次部署的核心编排文件,位于 Apache Pulsar 官方仓库的deployment/dcos/目录下(随版本分支维护)。
获取该文件的方法:
$ curl -O https://raw.githubusercontent.com/apache/pulsar/master/deployment/dcos/PulsarGroups.json说明:当前仓库副本的 deployment 目录下仅包含 kubernetes 与 terraform-ansible 两种部署方式,
PulsarGroups.json需从 Apache Pulsar 官方仓库对应版本分支获取后使用。
DC/OS 托管的 Mesos 集群中,每个节点至少需要满足:
| 资源 | 最低要求 |
|---|---|
| CPU | 4 核 |
| 内存 | 4 GB |
| 总持久磁盘 | 60 GB |
如果你所在集群的资源规格不同,也可以直接修改PulsarGroups.json中的资源配置,使其匹配 DC/OS 集群的实际容量。该文件内为每个 Marathon 应用(bookie、broker、prometheus、grafana 等)声明了cpus、mem、disk等资源约束,部署前按需调整即可。
使用 DC/OS 命令行部署 Pulsar
完成准备后,通过 DC/OS CLI 执行一条命令即可完成部署:
$ dcos marathon group add PulsarGroups.json该命令会以 Docker 容器实例的方式部署三个应用组,它们共同构成一个完整的 Pulsar 集群:
- BookKeeper 组:3 个 bookie(每个 agent 节点各 1 个,另含 1 个 bookie recovery 自动恢复实例);
- Pulsar Broker 组:3 个 broker(每个节点各 1 个,另含 1 个 admin 实例);
- 监控组:1 个 Prometheus 实例和 1 个 Grafana 实例。
这里有一个 DC/OS 特有的便利:DC/OS 自身已经运行了一套 ZooKeeper 集群(地址为master.mesos:2181),因此Pulsar 部署无需再单独安装或启动 ZooKeeper。Pulsar 的 broker 与 bookie 会直接复用这套内置 ZooKeeper 来存储元数据、完成服务发现。
命令执行完毕后,在浏览器中访问 DC/OS GUI(本例为 http://m1.dcos),点击Services标签页,即可看到多个应用正在部署中。关于 DC/OS GUI 各版本的具体用法,请参考你所部署版本的官方 GUI 文档(本文以 1.9 版本示例为准)。
BookKeeper 组:验证 bookie 集群状态
在 GUI 的父级pulsar组中点击bookkeeper组,即可查看 BookKeeper 集群的部署状态。此时 3 个 bookie 应显示为绿色,表示已成功部署并正常运行。
点击任意一个 bookie 实例,可以查看更详细的信息,例如该 bookie 的运行日志:
此外,还可以通过 Exhibitor 直接查看 ZooKeeper 中 BookKeeper 的注册信息:访问 http://m1.dcos/exhibitor,本例中 3 个 bookie 均注册在available目录下。
从 Pulsar 架构上看,bookie 是 Apache BookKeeper 的存储服务器,负责以 append-only ledger 的形式持久化消息(参见术语表 reference-terminology.md 中 Bookie 与 Ledger 的定义)。Pulsar 的消息可靠性正是建立在 bookie 的多副本持久化与自动恢复(bookie recovery)机制之上,这也是为什么部署中要为每个 agent 节点额外安排一个 recovery 实例,用于在 bookie 宕机后自动重建副本。
Pulsar Broker 组:验证 broker 集群状态
与 BookKeeper 组类似,点击brokers组查看 Pulsar broker 的运行状态:
同样可以点击每个 broker 实例查看详细信息与运行日志:
broker 集群信息同样可以通过 Web UI 在 ZooKeeper 中查看。本例中可以看到loadbalance和managed-ledgers目录已被创建——前者记录 broker 的负载均衡状态,后者记录由 broker 管理的 ledger 元数据:
从源码视角看,broker 是 Pulsar 集群中无状态的服务组件,负责客户端接入与消息分发。其默认服务端口在 conf/broker.conf 中定义:
brokerServicePort=6650 webServicePort=8080其中 6650 是 broker 与客户端之间二进制协议(dispatcher,异步 TCP 服务)的通信端口,8080 是提供管理接口与 topic lookup 的 HTTP(REST)服务端口。DC/OS 部署教程中的客户端连接地址正是基于 6650 端口构造的pulsar://URL。
监控组:Prometheus 与 Grafana
monitory组由 Prometheus 和 Grafana 两个应用构成,为整个 Pulsar 集群提供指标采集与可视化能力:
Prometheus
点击prom实例可以获取 Prometheus 的访问端点,本例为192.168.65.121:9090。访问该端点可看到 Prometheus 仪表盘,其中 http://192.168.65.121:9090/targets 页面会列出当前被采集的所有 bookies 和 brokers:
Grafana
点击grafana实例获取 Grafana 的访问端点,本例为192.168.65.121:3000。访问该端点即可进入 Grafana 仪表盘:
关于 Prometheus 与 Grafana 与 Pulsar 的完整集成方式(指标抓取配置、常用监控面板等),可进一步参考同版本部署文档 deploy-monitoring.md。
在 DC/OS 上运行消费者与生产者:端到端验证
集群部署完成后,通过一个简单的 Java 消费者与生产者示例,可以直观验证 Pulsar 在 DC/OS 上的消息收发链路。
下载并准备 Pulsar Java 教程
首先克隆官方文档配套的 Pulsar Java 教程仓库(pulsar-java-tutorial),该仓库包含一个简单的 Pulsar consumer 与 producer 示例:
$ git clone https://github.com/streamlio/pulsar-java-tutorial接下来需要修改两处代码:
修改 SERVICE_URL:将
ConsumerTutorial.java和ProducerTutorial.java中的SERVICE_URL从pulsar://localhost:6650改为pulsar://a1.dcos:6650。pulsar://a1.dcos:6650指向 broker 服务端点;a1.dcos是运行 broker 的 DC/OS 客户端 agent 主机名,各 broker 实例的端点详情可以从 DC/OS GUI 中获取,也可以直接用该 client agent 的 IP 地址替换。调整消息数量:将
ProducerTutorial.java的 main 方法中消息数量从 10 改为 10000000(一千万),以便产生更多消息来观察吞吐与监控曲线。
然后编译项目:
$ mvn clean package运行消费者与生产者
分别执行以下命令启动 consumer 和 producer:
$ mvn exec:java -Dexec.mainClass="tutorial.ConsumerTutorial"$ mvn exec:java -Dexec.mainClass="tutorial.ProducerTutorial"此时可以通过 DC/OS GUI 看到 producer 持续生产消息、consumer 持续消费消息的过程:
从源码层面看,consumer 与 producer 是 Pulsar 客户端 SDK 的核心入口(对应 pulsar-client 模块中的Consumer/Producer接口与ConsumerImpl/ProducerImpl实现)。示例中客户端通过pulsar://协议 URL 完成 topic lookup 与服务发现——broker 会动态告知客户端具体由哪个 broker 为对应 topic 提供服务,这正是 Pulsar 多 broker 集群下客户端无需感知拓扑即可收发消息的关键机制(参见术语表 reference-terminology.md 中 Topic Lookup 与 Service Discovery 的定义)。
查看 Grafana 指标输出
在 producer 与 consumer 运行期间,可以打开 Grafana 仪表盘查看实时的运行指标,包括吞吐、延迟、积压等关键监控数据:
卸载 Pulsar
你可以随时通过以下两种方式之一关闭并卸载 DC/OS 上的pulsar应用:
通过 DC/OS GUI:在 Pulsar 组的最右侧选择Delete。
通过命令行:
$ dcos marathon group remove /pulsar
该命令会递归删除pulsar应用组下的全部子应用(bookies、brokers、Prometheus、Grafana 及其容器实例),完成集群的整体清理。
总结与延伸阅读
通过本文你可以看到,Apache Pulsar 在 DC/OS 上的部署高度自动化:一条dcos marathon group add命令即完成存储层、服务层、监控层三组应用的编排;内置 ZooKeeper 的复用省去了元数据服务的独立部署;GUI 与 Exhibitor 提供了直观的状态验证手段;而 Prometheus + Grafana 则让集群运行指标一目了然。
如果你想继续深入:
- 部署时若需启用全部内置连接器,参考 pulsar-all Dockerfile 与 docker/README.md 了解镜像构成,或参阅 io-overview.md 查看连接器清单;
- 了解 broker/bookie 等核心概念,参阅术语表 reference-terminology.md;
- 掌握 Prometheus 与 Grafana 的指标接入细节,参阅 deploy-monitoring.md;
- 查看 broker 默认端口与服务配置,参阅 conf/broker.conf。
版本提示:本文操作步骤与命令以 Apache Pulsar 2.3.0 版本文档为准;若使用其他版本,请以对应版本的官方部署文档与
PulsarGroups.json文件为准。
- 消息队列
- 后端
- 流处理
【免费下载链接】pulsar
Apache Pulsar - distributed pub-sub messaging system
相关推荐
Apache Pulsar 在 DC/OS 上部署实战:基于 Marathon 应用组的完整指南
Apache Pulsar 在 DC/OS 上部署实战:基于 Marathon 应用组的完整指南 Apache Pulsar 官方将整套集群封装为 DC/OS
消息队列后端流处理在 DC/OS 上部署 Apache Pulsar:Marathon 应用组部署、验证与卸载实战
在 DC/OS 上部署 Apache Pulsar:Marathon 应用组部署、验证与卸载实战 本文以 Apache Pulsar 官方文档中 DC/OS 部
消息队列后端流处理Apache Pulsar 基于 Docker 部署多组件集群实战指南
Apache Pulsar 基于 Docker 部署多组件集群实战指南 导读 本文面向希望在 Docker 环境中快速搭建 Apache Pulsar 集群的开
消息队列后端流处理
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考