【发布时间】:2019-05-27 12:57:59
【问题描述】:
我们的团队正在尝试构建一个预测性维护系统,其任务是查看一组事件并预测这些事件是否描述了一组已知异常。
我们处于设计阶段,目前的系统设计如下:
- 事件可能发生在物联网系统的多个来源(例如云平台、边缘设备或任何中间平台)上
- 事件由数据源推送到消息队列系统(目前我们选择 Apache Kafka)。
- 每个数据源都有自己的队列(Kafka 主题)。
- 来自队列的数据由多个推理引擎(实际上是神经网络)使用。
- 根据功能集,推理引擎将订阅 多个 Kafka 主题并从这些主题中流式传输数据以持续输出推理。
- 整体架构遵循单一职责原则,这意味着每个组件将相互分离并在单独的 Docker 容器中运行。
问题:
为了将一组事件分类为异常,这些事件必须在同一时间窗口内发生。例如假设有三个数据源将各自的事件推送到Kafka主题中,但是由于某种原因,数据没有同步。 因此,其中一个推理引擎从每个 kafka 主题中提取最新条目,但提取数据中的相应事件不属于同一时间窗口(例如 1 小时)。由于数据不同步,这将导致无效的预测。
问题
我们需要弄清楚如何确保所有三个来源的数据按顺序推送,这样当推理引擎请求来自多个 kakfa 主题的条目(例如最后 100 个条目)时,每个主题中的相应条目主题属于同一时间窗口?
【问题讨论】:
-
您提出了一个非常有趣的问题。也许this article 会引导您找到一些解决方案。
标签: apache-kafka synchronization iot distributed-system stream-processing