主要观点:TBMQ 主要用于聚合物联网设备数据并可靠传至后端应用,应用需可靠消息传递且常因维护等原因停机,物联网设备常频繁发布数据但订阅话题少。TBMQ 将 MQTT 客户端分为应用客户端和标准物联网设备(DEVICE 客户端),应用客户端持久连接依赖 Kafka,DEVICE 客户端可根据情况配置为持久连接。文章介绍了 TBMQ 中如何用 Redis 管理 DEVICE 客户端的持久 MQTT 会话,包括为何选择 Redis(解决 PostgreSQL 垂直扩展瓶颈)、迁移到 Redis 的过程(考虑 Redis 集群约束、原子操作 via Lua 脚本、选择合适 Redis 数据结构等)、动态管理排序集大小、消息检索和清理以及从 Jedis 迁移到 Lettuce 以提升性能等。
关键信息:
- TBMQ 架构及应用需求。
- Redis 用于管理 DEVICE 客户端持久会话的优势和方法。
- 迁移过程中的关键技术细节,如 Redis 集群约束、Lua 脚本原子操作、数据结构选择等。
- 从 Jedis 迁移到 Lettuce 提升性能的过程及效果。
重要细节:
- Redis 集群通过哈希标签保证同一客户端相关数据在同一槽,避免多键操作错误。
- Lua 脚本保证对同一 MQTT 客户端的操作原子性,避免不一致。
- 选择 sorted sets 存储消息并结合字符串存储消息负载,通过哈希标签管理。
- 动态管理排序集大小以控制内存使用,在消息检索时清理过期消息。
- Jedis 同步操作限制 Redis 性能,迁移到 Lettuce 实现异步操作提升吞吐量。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。