Thingsboard 消息队列 kafka topic 设计

欢迎Star该github🐵,长期更新IoT服务器设计的相关文章(后续该文章的优化修改只会该git)
本文解释为什么Thingsboard微服务分布式下-设备控制的数据流-架构与可用性分析(有架构图) 的图中,topic有"tb_rule_engine.main.3","tb_core.notification.tb-core-1"这两种的格式

.3是指partition是3

因为TB(Thingsboard)对很多消息队列(queue)进行了支持,所以对queue做了抽象,抽象层的topic就是"tb_rule_engine.main.3"
有的queue没有分区(partition)的概念,对于这些queue,topic就是"tb_rule_engine.main.3"(相当于一个一级菜单),该topic只会被一个node消费
Kafka有partition,最终子类实现时,topic是tb_rule_engine_main,而partition就是3(相当于一个二级菜单),该partition只会被一个node消费

.main是什么?

‘tb_rule_engine.main’ 是一般消息
‘tb_rule_engine.hp’ 是 high priority 高优先级消息.(如下图源码,highPriorityMsgs里有消息,就不会处理normalPriorityMsgs的消息,从而实现消息处理的优先级)
‘tb_rule_engine.sq’ 是sequence有顺序的消息(会牺牲性能)
image

.notification是什么?

notification的消息只会发给制定的一个node(.tb-core-1),相当于消费组里只有一个消费者
image

留言讨论区

### ThingsBoard 同一层实现方式与架构设计 ThingsBoard 的架构设计遵循微服务原则,但在某些方面并不完全符合传统意义上的无状态微服务。以下是对 ThingsBoard 同一层实现方式和架构设计的详细分析。 #### 1. **ThingsBoard 的微服务架构概述** ThingsBoard 的核心组件包括 `tb-core`、`tb-rule-engine` 和 `tb-transport` 等[^2]。这些组件在同层中通过 Kafka 消息队列进行通信[^3]。具体来说: - **Kafka 的作用**:作为消息中间件,Kafka 负责在不同微服务之间传递消息,确保数据的一致性和可靠性。 - **Actor System 的应用**:`tb-core` 使用 Actor System 来管理租户和设备的生命周期,每个实体(如设备或租户)对应一个 Actor,负责处理与该实体相关的所有操作[^2]。 #### 2. **同一层的服务间通信机制** 在 ThingsBoard 中,同一层的服务节点通常以集群的形式存在。以下是其实现方式: - **无状态性与状态管理**:虽然理想中的微服务是无状态的,但 ThingsBoard 的某些服务(如 `tb-core`)需要维护状态信息,例如设备会话和连接状态。为了解决这一问题,ThingsBoard 将状态信息存储在分布式数据库(如 Cassandra 或 PostgreSQL)中,并通过缓存机制(如 Redis)提高性能。 - **负载均衡与分区**:平台节点可以加入集群,其中每个节点负责传入消息的某些分区。这种分区机制确保了即使服务不是完全无状态的,也可以通过分区的方式实现负载均衡。 #### 3. **数据传递过程** 对于同一层的服务间数据传递,ThingsBoard 主要依赖 Kafka 和 Actor System: - **Kafka 的角色**:当一个服务接收到请求时,它会将相关消息发布到 Kafka 主题中。其他服务订阅该主题并消费消息,从而实现服务间的通信[^3]。 - **Actor System 的协作**:在 `tb-core` 中,每个 Actor 负责处理特定实体的消息。当一个 Actor 收到消息时,它可以将任务委派给其他 Actor 或者将结果写入数据库。 #### 4. **代码示例:Kafka 集成** 以下是一个简单的 Kafka 生产者和消费者代码示例,展示如何在微服务间传递数据: ```python from kafka import KafkaProducer, KafkaConsumer # Kafka Producer 示例 producer = KafkaProducer(bootstrap_servers='localhost:9092') producer.send('topic_name', b'Hello, ThingsBoard!') # Kafka Consumer 示例 consumer = KafkaConsumer('topic_name', bootstrap_servers='localhost:9092') for message in consumer: print(f"Received message: {message.value.decode('utf-8')}") ``` #### 5. **前端或 Postman 控制 MQTT 设备的流程** 当通过 RPC API 控制 MQTT 设备时,ThingsBoard分布式流程如下: 1. 前端或 Postman 发送 HTTP 请求到 `tb-core`。 2. `tb-core` 将请求转换为 Kafka 消息并发布到相关主题。 3. `tb-transport` 订阅该主题,接收消息并通过 MQTT 协议发送到目标设备。 4. 设备响应后,`tb-transport` 将结果写回 Kafka,最终由 `tb-core` 返回给前端[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值