目录
二、MQTT Topic → Kafka Topic 映射规范(重点)
三、为什么不能直接把 MQTT Event 作为 Kafka Topic?
附录:智能锁 15 种事件 Kafka/MQTT 映射表(生产级)

IoT 系统链路通常为:
智能锁 → MQTT Broker(AWS/阿里云) → IoT 中台 → Kafka → 后端服务
为了保证消息在 MQTT 与 Kafka 之间语义一致,需要 事件模型 与 Topic 设计 的映射。
一、整体映射规则(核心思想)
| 内容 | MQTT | Kafka |
| 协议定位 | 设备连接协议 | 后端流处理管线 |
| 消息模型 | 命令/状态通信 | 事件流 |
| 保证 | QoS0/1/2 | 持久化 + 副本 + Exactly Once |
| 推荐消息格式 | 轻量 JSON | 完整 JSON Schema |
| Topic 粒度 | 设备或功能级别 | 事件类型级别 |
总结:
MQTT 按 “设备 → 平台” 组织,Kafka 按 “事件 → 下游服务” 组织。 一个 MQTT Topic 对应多个 Kafka Topic。
二、MQTT Topic → Kafka Topic 映射规范(重点)
1. MQTT Topic 设计(设备上报)
推荐 IoT 平台标准(阿里云/AWS IoT 风格)
/device/{deviceId}/event/{eventType}
示例(智能锁):
/device/LOCK-01/event/lock.opened
/device/LOCK-01/event/device.online
/device/LOCK-01/event/lock.alarm
2. Kafka Topic 设计(事件聚合)
按事件类型维度设计:
iot.lock.opened
iot.lock.closed
iot.lock.alarm
iot.device.online
iot.device.offline
iot.ota.completed
3.映射关系表(核心产物)
| 事件类型 | MQTT Topic 示例 | Kafka Topic 示例 | 说明 |
| 开锁事件 | /device/LOCK-01/event/lock.opened | iot.lock.opened | 批量消费方便审计 |
| 关锁事件 | /device/LOCK-01/event/lock.closed | iot.lock.closed | 同类事件按类型聚合 |
| 告警 | /device/LOCK-01/event/lock.alarm | iot.lock.alarm | 告警系统独立消费 |
| 心跳 | /device/LOCK-01/event/device.online | iot.device.online | 用户在线状态 |
| OTA | /device/LOCK-01/event/device.ota.completed | iot.ota.completed | 运维侧消费 |
| 系统信息 | /device/LOCK-01/event/device.health | iot.device.health | 健康监控 |
三、为什么不能直接把 MQTT Event 作为 Kafka Topic?
因为 MQTT Topic 过于细粒度(每个设备一个),会导致:
| 问题 | 原因 |
| Kafka Topic 过多 | 数十万锁 = 数十万个 Topic,严重影响 Kafka metadata |
| 分区难管理 | Kafka 需提前规划分区 |
| 消费者难以消费全部设备 | 匹配规则复杂 |
所以 MQTT 按设备,Kafka 按事件类型。
四、Kafka Partition 设计(智能锁最佳实践)
事件中包含 deviceId,因此 Kafka 分区推荐:
partition_key = deviceId
好处:
-
同一设备的事件顺序严格一致(智能锁非常重要)
-
后端可以按设备维度做状态机/审计
-
分区负载自动均衡
示例
Kafka Producer 发送:
producer.send(
new ProducerRecord<>("iot.lock.opened", deviceId, jsonEvent)
);

最低0.47元/天 解锁文章
881

被折叠的 条评论
为什么被折叠?



