首页 > 解决方案 > 连接来自多个传感器的数据的最佳拓扑

问题描述

我有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}

标签: apache-kafkastreamingapache-kafka-streams

解决方案


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

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

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

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


推荐阅读