没有为事件到达定义时间 window 时的事件合并

Event Consolidation when there is no defined time window for Event Arrival

我们有一个名为 migrationstatus 的主题,假设我们进行分区以便给定 MigrationCandidateNumber 的所有实例和事件总是结束于相同的主题和分区。

以下活动将于 2019 年 12 月 10 日 10:00 上午

{
"MigrationCandidateNumber": 54545451,
"MigrationStatus":"Final Bill Produced"
}

以下活动将于 2019 年 10 月 14 日 08:00 上午

{
"MigrationCandidateNumber": 54545451,
"MigrationStatus":"Product Ready"
}

以下活动将于 2019 年 10 月 17 日 12:00 上午

到达
{
"MigrationCandidateNumber": 54545451,
"MigrationStatus":"Registration Complete"
}

问题陈述:

处理完所有 3 个事件后,我们需要在 migrationstatus-out 主题上生成以下事件,如下所示:

{
    "MigrationCandidateNumber": **54545451**,
    "MigrationStatus":"**Ready for extract 2**"
 }

宽时间 window 是故意的,因为前 3 个事件可能会相隔几天到达。

在没有外部数据库的情况下执行此操作的最佳方法?

尝试的解决方案:

  1. 您不能使用 windowed 聚合,因为我们不确定事件何时到达。
  2. 为不同的迁移状态从主流中创建了 3 个流,但流-流连接再次被 windowed。
  3. 对于这种情况,我看不到聚合数据的方法,因此我们无法将数据存储在 KSQL table 中并执行分组以检查所有状态的消息是否已到达。

我知道这是一个广泛开放的问题,主要与解决问题的方法有关,而不是技术问题,但我找不到更好的论坛来 post 这个问题。

我已经解决了这个问题,并在github中分享了代码。请按照link解决。

GitHub link for the solution

感谢MatthiasJ.Sax提醒。