Apache Storm 中的元组窗口开始/结束时间



我一直在开发一个填充应用程序,用于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 版本中提供。

最新更新