华为云 IoT × Pulsar:构建高可靠订阅推送服务

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

机器学习

腾讯Angel PowerFL | Discord

物联网

云兴科技智慧城市 | 科拓停车 | 华为云 | 清华大学能源互联网创新研究院 | 涂鸦智能

通信

江苏移动 | 移动云

教育

网易有道 | 传智教育

推荐阅读

免费可视化集群管控 | 资料合集 | 实现原理 | BookKeeper储存架构解析 | Pulsar运维 | MQ设计精要 | Pulsar vs Kafka | 从RabbitMQ 到 Pulsar | 内存使用原理 | 从Kafka到Pulsar | 跨地域复制 | Spring + Pulsar | Doris + Pulsar | SpringBoot + Pulsar

相关推荐
yuanjj884 小时前
域格移芯平台模块FTP下载应用
单片机·物联网·网络协议
一川_1 天前
前端跨界破壁:用Web技术打造智能报工系统——扫码、称重与多协议打印实战
物联网
玩转以太网1 天前
W55MH32 单芯片以太网方案:破解分布式 IO 三大痛点
分布式·物联网
无垠的广袤1 天前
【工业树莓派 CM0 NANO 单板计算机】本地部署 EMQX
linux·python·嵌入式硬件·物联网·树莓派·emqx·工业物联网
桧***攮2 天前
C在物联网协议中的实现
物联网
沐欣工作室_lvyiyi2 天前
家用按摩椅控制系统设计(论文+源码)
单片机·物联网·毕业设计·按摩椅控制系统
乘凉~2 天前
MQTT(一):什么是MQTT?MQTT在物联网通信中的位置
物联网
亿坊电商2 天前
24H-无人共享KTV:如何实现安全的自助服务?
大数据·物联网·安全
沫儿笙3 天前
安川机器人tag焊接怎么节省保护气
人工智能·物联网·机器人