Kafka-两个特定事件之间的窗口

时间:2020-11-09 12:56:09

标签: apache-kafka apache-kafka-streams

我想对两个具体事件之间发生的不同事件进行操作(例如汇总)。例如。用户单击按钮“ A”,然后单击按钮“ B”一段时间,我想计算一下这段时间内到达了多少事件(来自其他主题)。

我在应用程序中面临的一般概念是事件具有持续时间,它们不是在给定时间独立发生的单个事件。在该示例中,单击按钮“ A”将是事件的开始,单击按钮“ B”将是事件的结束。

我的问题是,kafka提供的窗口化过程(滚动,跳跃,滑动,会话)不适合我的情况。在Kafka Streams中是否还有其他替代方法可以实现此目的?还有其他可以处理它的框架,例如Flink或Spark?

1 个答案:

答案 0 :(得分:1)

我不确定其他框架,但是KStreams的通用窗口解决方案可能不适用于您的情况。

但是,有一些方法可以使它适合您。我不知道您的密钥是如何设置的,因此我将假设您可以在密钥中确定用户以及它是“开始”还是“停止”事件。

如果您愿意制造一个新处理器,则可以轻松地对开始事件做出反应,收集事件直到停止事件,然后将该批处理作为一条记录发送。基本上是一个窗口。您可以使用process将其与DLS代码结合使用,从而简化拓扑结构的构建。

也许可以通过对流进行分组并以某种方式进行聚合来实现此目的,但这可能需要更改密钥的构造方式。