我一直在开发一个填充应用程序,用于Apache Storm中的CDR(呼叫详细记录(数据。应用程序的主要目的是在指定的时间块(在每个窗口中(提取调用者总呼叫计数和总调用持续时间。对于填充,我想使用滑动窗口技术。
要了解,您可以查看下图滑动窗口图像
对于填充,我需要知道元组窗口何时开始和结束。我的意思是TupleWindow的时间戳或SlidingWindow的时间戳是多少。
即使我查找了 Storm 的实现,我也找不到任何关于它的内容。你能帮我怎么弄清楚吗?
谢谢
如果您使用的是 apache Storm 的 1.x 版本,则无法通过 TupleWindow 直接访问此信息。您必须手动计算。例如
public class MyBolt extends BaseWindowedBolt {
...
long slidingInterval;
@Override
public BaseWindowedBolt withWindow(Duration windowLength, Duration slidingInterval) {
this.slidingInterval = slidingInterval.value;
return super.withWindow(windowLength, slidingInterval);
}
public void execute(TupleWindow inputWindow) {
long now = System.currentTimeMillis();
long windowEnd = now;
long windowStart = now - slidingInterval;
...
}
但在所有情况下,这可能并不简单,特别是如果您有事件时间窗口。
在最新的 storm 主分支中,TupleWindow 有一个 getTimestamp
方法,该方法返回窗口结束时间戳,并适用于基于处理和事件时间的窗口。这将在 storm 的未来版本(2.0 版本(中提供。它可以向后移植,并在未来的 Storm 1.x 版本中提供。