我有点新手使用kafka流,但我注意到的是一种我没想到的行为。我开发了一个应用程序,耗费了6个主题。我的目标是通过内部字段对每个主题分组(或加入)一个事件。这工作正常。但我的问题是窗口时间,看起来每个周期的结束时间对所有聚合都有影响。所有聚合只有一个计时器同时进行吗?我期待当流被配置的30秒退出聚合过程时。我认为这是可能的,因为我已经看到Windowed windowedRegion变量和windowedRegion.window()。start()和windowedRegion.window()。end()值的数据每个流都不同。 这是我的代码:
streamsBuilder
.stream(topicList, Consumed.with(Serdes.String(), Serdes.String()))
.groupBy(new MyGroupByKeyValueMapper(), Serialized.with(Serdes.String(), Serdes.String()))
.windowedBy(SessionWindows.with(windowInactivity).until(windowDuration))
.aggregate(
new MyInitializer(),
new MyAggregator(),
new MyMerger(),
Materialized.with(new Serdes.StringSerde(), new PaymentListSerde())
)
.mapValues(
new MyMapper()
)
.toStream(new MyKeyValueMapper())
.to(consolidationTopic,Produced.with(Serdes.String(), Serdes.String()));
答案 0 :(得分:1)
我不确定这是否是您所要求的,但每个聚合(每个每个键会话窗口)可能确实会多次更新。通常情况下,每个窗口只会显示一条消息,并在“合并”主题上显示该会话窗口的最终结果。这在这里有更详细的解释: https://stackoverflow.com/a/38945277/7897191