华为云 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

相关推荐
安科瑞刘鸿鹏176 小时前
高速路灯故障难定位?用 ASL600 实现精确单灯监测与维护预警
运维·网络·物联网·安全
雪兽软件19 小时前
物联网 (IoT) 将如何改变我们的工作方式
物联网
才盛智能科技20 小时前
K链通×才盛云:自助KTV品牌从0到1孵化超简单
大数据·人工智能·物联网·自助ktv系统·才盛云
三佛科技-134163842121 天前
宠物洗澡打泡机方案,宠物泡泡机MCU方案开发设计分享
单片机·嵌入式硬件·物联网·智能家居·pcb工艺·宠物
WZGL12301 天前
“十五五”发展展望:以社区为底座构建智慧康养服务
大数据·人工智能·物联网
北京耐用通信1 天前
耐达讯自动化Profinet转Devicenet网关:精细化工行业的“协议融合利器”
人工智能·物联网·网络协议·自动化·信息与通信
新新学长搞科研1 天前
【智慧城市专题IEEE会议】第六届物联网与智慧城市国际学术会议(IoTSC 2026)
人工智能·分布式·科技·物联网·云计算·智慧城市·学术会议
牵牛老人1 天前
Qt中集成 MQTT 来实现物联网通信:从原理到实战全解析
开发语言·qt·物联网
上海合宙LuatOS1 天前
LuatOS ——Modbus RTU 通信模式
java·linux·服务器·开发语言·网络·嵌入式硬件·物联网
国产化创客1 天前
ESPHome 核心原理+全流程开发与集成
物联网·智能家居·智能硬件