如何将一个输入流划分为多个主题并确保同时使用

时间:2018-11-14 11:50:27

标签: apache-kafka kafka-consumer-api apache-kafka-streams kafka-producer-api

我想用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

  • 主题电压

生产顺序为:

  • 读取数组1
  • 将消息发送到topic-temp1(值= 1)
  • 将消息发送到topic-temp2(值= 2)
  • 生成消息以达到主题电压(值= 3)

  • 读取数组2

  • 将消息生成到topic-temp1(值= 4)
  • 将消息发送到topic-temp2(值= 5)
  • 生成消息以达到主题电压(值= 6)

  • 读取数组3

  • 将消息发送到topic-temp1(值= 7)
  • 将消息发送到topic-temp2(值= 8)
  • 生成消息以达到主题电压(值= 9)

...读取数组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)...的偏移量应该相同,因为我是按此顺序生成的?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

我建议您使用一个带有传感器名称有效载荷(最好是UUID)的传感器结果主题,这样您就可以知道哪个传感器发送了数据,以及它生成的数据是一个整体信息。

否则,纯粹通过时间戳联接数据似乎并不是失败的证明。

您的消息密钥可以是UUID /名称,您可以将其扩展到数百个分区

您可以对要发送的数据进行二进制编码,但是我将使用JSON字符串进行说明

{
 "sensor_id" : "some unique name", 
 "temperatures" [1,2],
 "voltage": 3
}

如果您想要其中三个主题,则可以使用Kafka Streams或KSQL轻松地创建三个输出主题

否则,继续创建单个主题,但是添加ID /名称,以便您可以使用秒数或分钟量级的时间窗口加入该ID /名称,而无需尝试调整滞后时间,一个活动距离只有几微秒,您无法加入消息