会话Windows与Kafka Stream的行为不符合预期

时间:2018-03-13 15:20:35

标签: stream apache-kafka apache-kafka-streams

我有点新手使用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()));

1 个答案:

答案 0 :(得分:1)

我不确定这是否是您所要求的,但每个聚合(每个每个键会话窗口)可能确实会多次更新。通常情况下,每个窗口只会显示一条消息,并在“合并”主题上显示该会话窗口的最终结果。这在这里有更详细的解释: https://stackoverflow.com/a/38945277/7897191