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

问题描述 投票:0回答:1

我们只有一个名为migrationstatus的主题,假设我们进行了分区,因此给定MigrationCandidateNumber的所有实例和事件始终以同一主题和分区结尾。

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

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

以下活动于14-10-2019 08:00 AM到达

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

以下活动于17-10-2019 12:00 AM到达>>

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

问题陈述:

一旦处理完所有这三个事件,我们就需要将下面的事件产生到migrationstatus-out

主题上,如下所示:
{
    "MigrationCandidateNumber": **54545451**,
    "MigrationStatus":"**Ready for extract 2**"
 }

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

没有外部数据库的最佳方式?

解决方案尝试:

  1. 您不能使用窗口聚合,因为我们不确定事件何时到达。
  2. 从主流中创建了3个流以用于不同的迁移状态,但是再次对流-流连接进行了窗口化。
  3. 在这种情况下,我看不到一种汇总数据的方法,因此我们无法将数据存储在KSQL表中并执行分组依据来检查所有状态的消息是否到达。
  4. 我知道这是一个广泛的问题,主要与解决问题的方法有关,而不是与技术问题有关,但是我找不到更好的论坛来发布此内容。

我们有一个名为migrationstatus的主题,假设我们已分区,因此给定MigrationCandidateNumber的所有实例和事件始终以同一主题和分区结尾。后续事件...

stream apache-kafka-streams ksql
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.