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

时间:2019-10-22 15:15:02

标签: stream apache-kafka-streams ksql

我们有一个名为 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"
}

问题陈述:

所有这三个事件均已处理后,我们需要在下面的 migrationstatus-out 主题上生成该事件,如下所示:

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

宽广的时间窗口是有意的,因为前三个事件可能相隔几天。

在没有外部数据库的情况下做到这一点的最佳方法?

解决方案尝试:

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

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

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,并在github中共享了代码。请点击链接获取解决方案。

GitHub link for the solution

感谢MatthiasJ.Sax的注意。