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

时间:2020-09-18 12:40:11

标签: 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: 5}, ...

这个传感器的数量是动态的,但是为了简单起见,我们假设我有3个传感器,因此,每3分钟每3个主题获取数据。

以如下所示的时间戳连接所有测量的最佳拓扑是什么?

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

2 个答案:

答案 0 :(得分:1)

您有一些选择。您可以使用join并定义一个joiner来创建列表。但是,连接后必须是窗口流。如果您的测量始终在宽限期内进行,那么这应该没问题。

稍微复杂一点,如果您的时间戳没有重复,您可以使用groupByKey然后将其汇总到列表中。这将形成具有所需结果的表格。如果需要将其作为流,则可以使用toStream并过滤掉没有长度n列表的更新。

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

答案 1 :(得分:0)

TANSTAFL:没有免费的午餐

在各种情况下都需要进行权衡。

我建议首先编写一个愚蠢的简单服务,例如内存中的默认字典。愚蠢而缓慢的事情可以验证您的测试工作,有时可以并行运行以确保您的复杂算法可以工作。

我对传感器进行了“跳跃和合并”星型网络,这些传感器可以按计划进行收集和转发(睡眠6分钟,唤醒40毫秒)。加上遥测技术,可以降低传输成本。每位传感器加一位,则不接收任何位。缺点是它不能处理乱序的读取,重发等操作。合并系统也有minimum latency

关于日志的非常紧凑的只读数据库读取,有很多工作要做。基本上,时间戳允许您在计算和驱动器资源之间正确分配查询。 Sensage和其他人做到了。

就像大多数堆栈溢出问题一样,我只是在猜测您的实际问题。 :)