Apache kafka 连接多个传感器数据的最佳拓扑

Apache kafka 连接多个传感器数据的最佳拓扑,apache-kafka,streaming,apache-kafka-streams,Apache Kafka,Streaming,Apache Kafka Streams,我有n个传感器,每t分钟生成一次测量,其主题如下: Topic_1: {timestamp: 1, measurement: 1}, {timestamp: 2, measurement: 4}, ... Topic_2: {timestamp: 1, measurement: 5}, {timestamp: 2, measurement: 3}, ... Topic_n: {timestamp: 1, measurement: 3}, {timestamp: 2, measurement

我有n个传感器,每t分钟生成一次测量,其主题如下:

Topic_1: {timestamp: 1, measurement: 1}, {timestamp: 2, measurement: 4}, ...

Topic_2: {timestamp: 1, measurement: 5}, {timestamp: 2, measurement: 3}, ...
 
Topic_n: {timestamp: 1, measurement: 3}, {timestamp: 2, measurement: 5}, ...
传感器的数量是动态的,但为了简单起见,让我们假设我有3个传感器,因此,每t分钟有3个主题获取数据

下面显示的用相同时间戳连接所有测量的最佳拓扑是什么

{timestamp: 1, measurement: 1} 
{timestamp: 1, measurement: 5}  --------> {timestamp: 1, measurements: [1,5,3]}
{timestamp: 1, measurement: 3}

你有几个选择。可以使用“联接”并定义联接者来创建列表。但是,在连接之后,它必须是一个窗口流。如果您的测量值总是在宽限期内出现,那么这应该不是问题

编辑:(如果主题的数量可以变化,那么它将不适用于联接,而是需要使用模式订阅,然后聚合)

更复杂一点的是,如果您的时间戳没有重复项,您可以使用groupByKey将其聚合到列表中。这将形成一个包含所需结果的表。如果您需要它成为一个流,您可以使用toStream并过滤掉更新,而无需列出长度n


可能还有其他一些方法可以做到这一点,但首先想到的是这些。

考虑到输入主题的数量可能会有所不同,我认为加入将不起作用。相反,您需要使用模式订阅在单个流中订阅所有主题,并相应地对数据进行窗口聚合。我没有想到,我会更新答案的