基于Kafka的分布式调度器

问题描述

我们有一个用例,我们每天在 Kafka 中获取数百万个事件。每个事件都应该是这样的:

{"id": 123,"state": "start/in-transit/stop","ts":"01-02-2021 12:00:00"}

因此对于每个 id,我们可以有多个事件。

我们需要生成警报,以防在 xx 天后这些事件流中的特定 id 未收到任何状态。如果我们在 5 天后未收到运输途中事件,则 id 123 的示例。

一种方法是将所有内容存储在数据湖中,并在其上持续运行 Spark 作业。

我的问题是:我们能否在 xx 天后为这些 ID 中的每一个安排作业,并使用 Kafka 为其授权,使其成为分布式。

这样做时,我们不会持续轮询和检查是否违反警报条件,而是会在特定时间安排作业,我们可以查询警报条件。

解决方法

您可以创建一个压缩的进行中事件主题,该主题存储所有开始/传输中状态,停止是从 KTable 中删除 ID 的删除。

但是,您仍然需要每秒扫描一次表以验证任何时间戳都没有超过其窗口