Kafka流-当事件可能在时间上相隔很远时加入流

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

我想问您关于如何为Kafka Streams解决以下问题的解决方案的建议。

应用程序包含主题和课程,并且会引发以下事件:

LessonCreated      SubjectCreated     LessonAddedToSubject   LessonRemovedFromSubject
 +----------+     +--------------+     ---------------+         +--------------+
 | Id  Hours|     |      Id      |     |Lesson|Subject|         |Lesson|Subject|
 | ---+---- |     +--------------+     +--------------+         +--------------+
 | 25 | 20  |     |      1       |     |  25  |   1   |         |  25  |   1   |
 | 26 | 40  |     |      2       |     |  26  |   1   |         |  26  |   2   |
 | 27 | 10  |     |      3       |     |  26  |   2   |         +------+-------+
 +----+-----+     +--------------+     |  26  |   3   |         
                                       |  27  |   3   |         
                                       |  27  |   1   |         
                                       +------+-------+

我想实现一个流,这些流将采用这些流并将它们加入以下结构:

   LessonSubjectHours
 ---------------------+
 |Lesson|Subject|Hours|
 +--------------------+
 |  26  |  1    | 40  |
 |  26  |  3    | 40  |
 |  27  |  3    | 10  |
 |  27  |  1    | 10  |
 +--------------------+

我曾考虑过对联接操作进行一些逻辑处理,但是我相信这可能无济于事,因为KStream-KStream联接似乎是强制时间窗口的(如果我理解正确的话)。这是由于以下事实:lessonCreated,lessonAdded和lessonRemoved事件可能在时间上无限期地发生。因此,当这些事件之一发生在发出包含相同键的最后一个事件之后太长时间时,恐怕窗口联接可能导致错误的结果。

但是,对连接进行完整查找不应该是性能问题,因为这些事件不应经常发生。但是,假设可以在Kafka Streams中正确处理此问题,我对如何进行操作一无所知。因此,任何建议将不胜感激。

先谢谢您。

PS:如果有帮助,仍然可以更改事件及其包含的数据。

apache-kafka apache-kafka-streams event-sourcing stream-processing
2个回答
2
投票

似乎您的数据基本上是表格形式的。因此,我想知道将主题读为KStream是否实际上是正确的方法,以及是否应将数据作为KTable处理?对于这种情况,您可以只使用表-表联接。


1
投票

具有本地状态(RockDb快速)的KTable将是正确的选择。

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