【问题标题】:Session Windows behave with Kafka Stream is not as expected会话窗口与 Kafka Stream 的行为不符合预期
【发布时间】:2018-03-13 15:20:34
【问题描述】:

我是一个使用 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()));

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢,非常感谢。这回答了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2020-09-05
    • 2017-10-01
    • 2019-06-10
    相关资源
    最近更新 更多