我想用apache kafka创建一个简单的基于传感器数据的应用程序。我的问题很简单,涉及到Apache Kafka的基本概念。我是apache kafka的初学者。
这是我的要求:
我通过内部具有不同数据的字节数组获取传感器数据。 例如,数组存在三个条目(温度1,温度2和电压)。这里有一个包含4个数组和值数据的示例。每个数组都有一个定义的时间戳。
数组1:[1,2,3]
数组2:[4,5,6]
数组3:[7,8,9]
数组4:[10,11,12]
现在,我想阅读这些数组,并希望为三个主题生成消息:
topic-temp1
topic-temp2
主题电压
生产顺序为:
生成消息以达到主题电压(值= 3)
读取数组2
生成消息以达到主题电压(值= 6)
读取数组3
...读取数组n ...
在那之后,我有3个主题,里面有不同的数据:
topic-temp1:1、4、7、10
topic-temp2:2,5,8,11
主题电压:3、6、9、12
现在我的问题是: 我想创建一个使用这三个主题的软件应用程序。我想在一张图中显示3个图形(temp1,temp2,电压)。 y轴是信号值,x轴是时间戳。
如何隔离在相同的时间戳上获取消耗的值?只有我可以覆盖图形。
1,2,3
4,5,6
7,8,9
10,11,12
我应该使用Kafka-Stream API吗?一个输入流主题(字节数组)和三个输出流主题?如何确保这三个值一起产生并一起消耗?
或者我应该使用简单的使用者api并通过偏移量值访问数据。因为(1,2,3)(4,5,6)...的偏移量应该相同,因为我是按此顺序生成的?
提前谢谢!
答案 0 :(得分:0)
我建议您使用一个带有传感器名称有效载荷(最好是UUID)的传感器结果主题,这样您就可以知道哪个传感器发送了数据,以及它生成的数据是一个整体信息。
否则,纯粹通过时间戳联接数据似乎并不是失败的证明。
您的消息密钥可以是UUID /名称,您可以将其扩展到数百个分区
您可以对要发送的数据进行二进制编码,但是我将使用JSON字符串进行说明
{
"sensor_id" : "some unique name",
"temperatures" [1,2],
"voltage": 3
}
如果您想要其中三个主题,则可以使用Kafka Streams或KSQL轻松地创建三个输出主题
否则,继续创建单个主题,但是添加ID /名称,以便您可以使用秒数或分钟量级的时间窗口加入该ID /名称,而无需尝试调整滞后时间,一个活动距离只有几微秒,您无法加入消息