sga*_*zvi 8 synchronization distributed-system stream-processing apache-kafka iot
我们的团队正在尝试建立一个预测性维护系统,其任务是查看一组事件并预测这些事件是否描绘了一组已知异常。
我们正处于设计阶段,当前的系统设计如下:
为了将一组事件分类为异常,这些事件必须在同一时间窗口内发生。例如,说有三个数据源将各自的事件推送到Kafka主题中,但是由于某些原因,数据未同步。因此,其中一个推理引擎会从每个kafka主题中提取最新条目,但是所提取数据中的相应事件并不属于同一时间窗口(例如1小时)。由于数据不同步,将导致无效的预测。
我们需要弄清楚如何确保按顺序推送来自所有三个源的数据,以便当推理引擎从多个kakfa主题请求条目(例如最后100个条目)时,每个主题中的对应条目都属于同一时间窗口?
我建议使用KSQL,它是一个流式 SQL 引擎,可以针对 Apache Kafka 进行实时数据处理。它还为窗口聚合等提供了很好的功能。
在 KSQL 中定义Windows有 3 种方法:
跳跃窗口、翻滚窗口和会话窗口。跳跃和翻滚窗口是时间窗口,因为它们是由您指定的固定持续时间定义的。会话窗口根据传入数据动态调整大小,并通过由不活动间隙分隔的活动周期来定义。
在您的上下文中,您可以使用 KSQL 使用Windowed Joins查询和聚合感兴趣的主题。例如,
SELECT t1.id, ...
FROM topic_1 t1
INNER JOIN topic_2 t2
WITHIN 1 HOURS
ON t1.id = t2.id;
Run Code Online (Sandbox Code Playgroud)