我在应用程序中使用kafka流,我对聚合函数中的时间窗口有疑问。
KTable<Windowed<String>, PredictReq> windowedKtable = views.map(new ValueMapper()).groupByKey().windowedBy(TimeWindows.of(TimeUnit.MINUTES.toMillis(1)))
.aggregate(new ADInitializer(), new ADAggregator(),Materialized.with(Serdes.String(), ReqJsonSerde));
KStream<Windowed<String>, Req> filtered = windowedKtable.toStream().transform(new ADTransformerFilter());
KStream<String, String> result = filtered.transform(new ADTransformerTrans());
我在1分钟内汇总数据,然后进行变换以获得最终的汇总结果并进行第二次变换。
以下是一些示例数据:
msg1:10:00:00来了,msg2:10:00:20来了,msg3:10:01:10来了
例如,窗口从10:00:00到10:01:00开始。
我发现直到msg3到来之前Windows才到期! (因为在msg3出现之前,以下转换不会执行。)
这不是我想要的。
我的测试有问题吗?如果这是事实,该如何更改?
答案 0 :(得分:1)
我明白了...
Kafka流没有window expired
概念。所以我使用消息中的窗口来检查窗口是否已更改,因此我必须等待下一个窗口中的消息。
如果没有收到下一条消息,我不知道窗口已完成。