apache-kafka - 连接来自多个传感器的数据的最佳拓扑
问题描述
我有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}
解决方案
你有几个选择。您可以使用 join 并定义一个 joiner 来制作列表。但是,它必须是连接后的窗口流。如果您的测量值总是在宽限期内出现,那么这应该不是问题。
编辑:(如果主题的数量可以变化,它将不适用于加入,而是您需要使用模式订阅然后聚合)
稍微复杂一点,如果您的时间戳没有重复项,您可以 groupByKey 然后聚合到列表中。这将形成一个包含您想要的结果的表格。如果您需要它成为一个流,您可以使用 toStream 并过滤掉没有长度为 n 的列表的更新。
可能还有其他一些方法可以做到这一点,但首先想到的是这些。
推荐阅读
- c# - 单测试安装失败并出现 System.NullReferenceException
- visual-studio - Visual Studio 更新前的预操作
- python - 比特币交易映射引发 KeyError
- linux - 为什么Linux进程已失效但其父进程仍然存在?
- javascript - 为什么我从日志中复制的数字出现意外行为
- mysql - 我收到 PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR
- c++ - 使用 libpq 插入没有 timeZone 的二进制时间戳
- c++ - CMake:根据 C 宏定义有选择地重新编译 C++ 程序模块
- android - 打开推送通知时反应本机应用程序崩溃
- wso2 - 在完全分布式 WSO2 APIM 设置中启动 WSO2 ISKM 5.10.0 服务器时出错