【问题标题】:Storm Sliding Window Approach风暴滑动窗口方法
【发布时间】:2016-09-25 19:57:51
【问题描述】:

目前我尝试调查风暴以进行消息处理。我发现滑动窗口功能很有趣,并尝试让它发挥作用。

但即使我将间隔设置为 5 秒,窗口后面的计算也会更加频繁。似乎每条新消息都会执行元组窗口的执行方法。

builder.setBolt("messageCountBolt",
                new MessageCountBolt()
                        .withWindow(
                                new BaseWindowedBolt.Duration(20, TimeUnit.SECONDS),
                                new BaseWindowedBolt.Duration(5, TimeUnit.SECONDS))
                        .withMessageIdField("id")
                        .withTimestampField("timeStamp")
                        .withLag(new BaseWindowedBolt.Duration(5, TimeUnit.SECONDS)),
                1).globalGrouping("spout");

有人知道为什么吗?我希望计算等待 5 秒间隔内的所有消息。

【问题讨论】:

  • 我认为解决这个问题的正确方法是在 Storm 之上使用 Trident,因为每条新消息都会触发对普通 Storm 中的 execute 方法的调用。

标签: apache-storm sliding-window


【解决方案1】:

您必须使用withTumblingWindow 而不是withWindow

withWindow 在每个输入元组上执行并传递包含最后输入消息的输入批处理。但withTumblingWindow 将批量聚合所有输入消息并提供整体。

【讨论】:

    【解决方案2】:

    我认为原因是您正在使用 SlidingWindow - 它为该窗口中的每个入口和出口生成一个输出。 如果您只希望窗口末尾有一个输出,那么理想情况下您应该使用批处理窗口或翻滚窗口。 总结一下:

    • 滑动窗口:将每个事件保留在给定的时间窗口内,每当添加或删除新事件时都会生成输出。
    • 批处理窗口:也称为翻转窗口,它们仅在时间窗口结束时产生输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-05
      • 2021-07-01
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 2012-03-05
      • 2012-08-08
      • 2012-10-20
      相关资源
      最近更新 更多