最近在整理thingsboard课程,基于最新thingsboard版本3.9.1/4.0,欢迎大家收藏、关注我,提问,在评论区留言,我争取把最新、最准、最好的课程,呈现在各位亦师亦友的csdn广大读者面前。
本章节讲述:外部规则节点kafka。
本节点:推送消息到kafka。
传入消息类型可以是任何类型。
在规则链中增加一个kafka节点,相当于在平台上启动一个kafka client(做为生产者producer),此处client会主动连接kafka cluster。
本章节运行/测试环境:thingsboard3.9.1 CE / Kafka-2.13-3.9.0 / zookeeper-3.9.3-bin
Kafka架构图如下:
在规则链中增加一个kafka节点,如下:
说明:
主题模式Topic pattern*:可以是静态字符串,也可以是使用消息元数据属性解析的模式。例如 ${deviceType}。
引导服务Bootstrap servers*:kafka代理服务器。如果多个就逗号隔开。
失败重试Automatically retry times if fails: 10
本地缓存时间Time to buffer locally (ms):500
Number of acknowledgments*:
Key serializer*:
Value serializer*:
其他属性Other properties(可选):连接kafka所需要的其他参数,以kv方式填写。
模板变量支持如下:
Kafka发送的 Key 和 Value 字段,支持动态模板填充,比如:
${msg} → 消息的body内容
${metadata} → 消息的元数据(通常是JSON字符串)
${msgType} → 消息类型,如 POST_TELEMETRY_REQUEST、
ATTRIBUTES_UPDATED 等
${entityId} → 实体ID(设备、资产等)
${entityName} → 实体名称
对于上述变量,可以自由组合,比如:
设备${entityName}上报数据: ${msg}。
应用场景测试:
offset explorer客户端软件打开,添加kafka和zookeeper,连接,如下,
准备Jmeter,测试 Test Deivce T1,如下:
规则链配置,如下:
当Jmeter发送消息成功之后,在系统中可以看到最新遥测数据,如下:
在规则链中跟踪kafka节点的事件消息,如下:
1:
{
"Seqno": 6,
"BusVoltage": 378,
"humidity": 27,
"temperature": 64
}
2:
{
"deviceName": "Test Device A1",
"deviceType": "default",
"ts": "1745929293214"
}
3:
{
"Seqno": 6,
"BusVoltage": 378,
"humidity": 27,
"temperature": 64
}
4:(在OUT消息的元数据中增加了以下蓝色字体三个字段)
{
"deviceName": "Test Device A1",
"deviceType": "default",
"offset": "0",
"partition": "0",
"topic": "my-topic",
"ts": "1745929293214"
}
在Offset Explorer界面上可以看到,kafka收到了消息,如下:
说明:
使用kafka-console-consumer.bat查看或订阅kafka某个topic。
# 如果没有任何返回或没有响应,则该topic中没有数据内容;
# 如果有回应数据,则回应内容就是该topic中的数据内容;
比如:
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic my-topic --from-beginning
执行命令如下: