
Pulsar Developer Day 2025 将于 12.6(周六)下午 13:30-18:00 在 北京·丽亭华苑酒店 举办。戳👇报名!
本文整理自 Zhangjian He 在 Community Over Code Asia 2025 上的主题演讲。一起来看华为云如何使用 Pulsar 构建高可靠订阅和推送服务!
1
华为云 IoT 架构
华为云 IoT 服务采用分层的 Service on Service 架构。底层是基于 ECS 和 K8s 的云底座,在此之上是物联网基础服务层,提供设备接入、IoT 边缘等核心能力;再向上是行业平台层,服务于工业物联、数字工厂等特定领域;顶层通过与 RDS、MySQL 等云服务的组合,形成完整的行业解决方案。
为适应大模型技术的发展,平台对物联网数据进行了分类处理:结构化的物模型数据存入知识图谱,行业文档等非结构化数据进入向量数据库,时序数据则通过 MCP 方式供给大模型使用,实现了物联网数据与大模型的高效协同。该服务的显著特点是提供端到端的一站式开发能力,能够有效支撑工业物联平台、智慧交通平台等垂直行业解决方案的快速构建。

2
订阅推送服务

订阅推送服务的业务模型围绕几个核心概念展开:
-
Tenant(租户)维度设计用于支持海量租户场景,单个租户能够配置多个订阅。
-
EventRule(事件规则)定义了事件的过滤条件,例如处理开户、销户或地域变更等业务事件。
-
Action(动作)则指明了消息推送的目的地,可以是 OBS、游戏服务器或 HTTP Server 等。
这套业务模型支持基于条件的过滤和多目的地分发,典型应用场景是将用户系统事件推送给第三方应用。一个订阅单元被定义为一条 EventRule 与一个 Action 的组合,从而实现精细化的事件路由。
3
基于 Pulsar 的技术实现
基于 Pulsar 的 Function 和 Pulsar I/O 组件来构建订阅推送功能,初始方案是利用 Pulsar Function 实现规则引擎的过滤逻辑,通过 Pulsar I/O Sink 完成消息的最终推送(Action 执行)。这一方案的优势在于开箱即用,能够快速实现核心功能。在生产环境实践中,针对出现的挑战迭代形成了优化方案。

计费和规格
核心挑战:
过滤计算本身消耗实际的 CPU 和内存资源,但客户通常不愿为被过滤掉、未成功推送的数据付费。在极端情况下,单个租户配置 10 条规则可能导致消息内部放大 10 倍。
优化方案:
-
合并消费者:将 N 个规则消费者合并为 1 个,以大幅减少内部流量放大。
-
性能隔离:用两层 Worker 设计,由 Receive Worker 负责接收,Push Worker 负责推送,有效隔离了不同业务的影响。
Topic 老化机制
Topic 老化是必要的,其目的在于防止 Topic 数量达到上限导致新订阅创建失败,并避免非活跃消费组持续占用磁盘资源。
在业务侧进行了针对性适配,实现了"不存在则创建"的容错逻辑,并补充了定时任务来触发未使用 Topic 的老化。一个关键的注意事项是,只有被 ledger 处理过的 Topic 才会被纳入老化机制。
私有云场景
在硬件环境相对较差的私有云场景中,偶现低概率的 entrylog 文件损坏问题(年均 1-2 次)。解决方案经历了三个阶段演进:第一阶段尝试跳过损坏文件,但需在消息丢失与恢复速度之间权衡;第二阶段优化为优先读取其他副本的数据;最终阶段定位到 entrylog 写入时的并发问题根源(相关修复代码后续计划贡献给社区)。
定时任务处理
通过定时任务处理了几类典型问题:
-
脑裂检测:通过对比各节点 lookup 结果识别异常 topic
-
僵尸 ledger:清理已删除但残留的 ledger 元数据
-
分区不一致:修复 managed-ledger 与 admin 数据不同步
针对相关问题形成了通用的容错策略:
-
重试机制+成功率监控:当成功率低于 80% 时触发重建;
-
消费者健康检查:当生产速率持续高于消费速率且积压大于零时进行干预。
4
总结

关键设计:
-
规则引擎与推送模块物理隔离
-
采用 listener 模式+合理超时配置(推荐 ackTimeout≥2h)
-
生产失败时内存重试 1-2 次,超过阈值触发 relocate
监控指标:精简为 3 个核心指标(message in/out、积压大小)
最佳实践:开启消费者自动老化,配置 retryLetterTopic 实现死信处理

Apache Pulsar 作为一个高性能、分布式的发布-订阅消息系统,正在全球范围内获得越来越多的关注和应用。如果你对分布式系统、消息队列或流处理感兴趣,欢迎加入我们!
Github:
https://github.com/apache/pulsar

扫码加入 Pulsar 社区交流群
最佳实践
互联网
腾讯BiFang | 腾讯云 | 微信 | 腾讯 | BIGO | 360 | 滴滴 | 腾讯互娱 | 腾讯游戏 | vivo| 科大讯飞 | 新浪微博 | 金山云 | STICORP | 雅虎日本 | Nutanix Beam | 智联招聘 | 达达 | 小红书
金融/计费
腾讯计费 | 平安证券 | 拉卡拉 | Qraft | 甜橙金融
电商
Flipkart | 谊品生鲜 | Narvar | Iterable
机器学习
物联网
云兴科技智慧城市 | 科拓停车 | 华为云 | 清华大学能源互联网创新研究院 | 涂鸦智能
通信
教育
推荐阅读
免费可视化集群管控 | 资料合集 | 实现原理 | BookKeeper储存架构解析 | Pulsar运维 | MQ设计精要 | Pulsar vs Kafka | 从RabbitMQ 到 Pulsar | 内存使用原理 | 从Kafka到Pulsar | 跨地域复制 | Spring + Pulsar | Doris + Pulsar | SpringBoot + Pulsar
