如何在滑动窗口中获取当前窗口时间?
问题描述:
我使用的风暴实现滑动窗口:如何在滑动窗口中获取当前窗口时间?
这是我的拓扑结构:
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方法我想获得在该窗口开始时间戳或结束。在我的螺栓我怎么能得到窗户的长度和滑动时间?
答
由于您使用的是事件时间(withTimestampField
),因此基于周期性水印计算窗口。现在窗口的开始/结束时间不会暴露在TupleWindow中。
在风暴的最新主分支中,TupleWindow有一个getTimestamp
方法,该方法返回窗口结束时间戳并适用于基于处理和事件时间的窗口。这将在未来风暴版本(2.0版本)中可用。如果您希望在未来的1.x版本中支持此功能,您可以提交JIRA here