如何在滑动窗口中获取当前窗口时间?

时间:2017-04-01 16:47:38

标签: java real-time apache-storm sliding-window

我正在通过风暴实施使用滑动窗口:

From Here

这是我的拓扑结构:

 public static void main(String[] args) throws Exception {
    TopologyBuilder builder = new TopologyBuilder();

    builder.setSpout("rabbitSpout", new RabbitMQSpout());
    builder.setBolt("filterBolt", new FilteringBolt()).shuffleGrouping("rabbitSpout");

    builder.setBolt("HourStatisticsBolt", new SlidingWindowStatisticsBolt()
            .withWindow(new BaseWindowedBolt.Duration(60, TimeUnit.MINUTES),
                    new BaseWindowedBolt.Duration(10, TimeUnit.SECONDS))
            .withTimestampField("timestamp")).shuffleGrouping("filterBolt");

在我的SlidingWindowStatisticsBolt的execute方法中,我想获得windows开始或结束的时间戳。在我的螺栓中,我如何获得窗口长度和滑动持续时间?

1 个答案:

答案 0 :(得分:2)

由于您使用的是事件时间(withTimestampField),因此会根据周期性水印计算窗口。现在,窗口开始/结束时间不在TupleWindow中公开。

在最新的风暴主分支中,TupleWindow有一个getTimestamp方法,它返回窗口结束时间戳,适用于基于处理和事件时间的窗口。这将在未来的风暴版本(2.0版本)中提供。如果您希望在下一个1.x版本中将其移植并提供,您可以提交JIRA here