Apache storm (推特)风暴';s关于聚合的窗口

Apache storm (推特)风暴';s关于聚合的窗口,apache-storm,real-time-data,real-time-systems,Apache Storm,Real Time Data,Real Time Systems,我在玩Storm,我想知道Storm在聚合时在哪里指定(翻滚/滑动)窗口大小。例如,如果我们想在Twitter上找到前一小时的热门话题。我们如何指定螺栓应每小时返回一次结果?是否在每个螺栓内按程序进行?或者指定一个“窗口”是某种方式吗?添加一个并行度为1的新喷口,并让它发出一个空信号,然后使用Utils.sleep直到下一次(所有操作都在nextTuple中完成)。然后,使用所有分组将所有相关螺栓链接到该喷口,以便它们的所有实例都将收到相同的信号。免责声明:我用引用的Storm文章编写了趋势主题

我在玩Storm,我想知道Storm在聚合时在哪里指定(翻滚/滑动)窗口大小。例如,如果我们想在Twitter上找到前一小时的热门话题。我们如何指定螺栓应每小时返回一次结果?是否在每个螺栓内按程序进行?或者指定一个“窗口”是某种方式吗?

添加一个并行度为1的新喷口,并让它发出一个空信号,然后使用Utils.sleep直到下一次(所有操作都在nextTuple中完成)。然后,使用所有分组将所有相关螺栓链接到该喷口,以便它们的所有实例都将收到相同的信号。

免责声明:我用引用的Storm文章编写了趋势主题

我认为最好的做法是使用所谓的。通过这些,您可以配置自己的喷口/螺栓,以便在特定的时间间隔(例如,每10秒或每分钟)收到通知

下面是一个简单的示例,它将相关组件配置为每10秒接收一次滴答元组:

// in your spout/bolt
@Override
public Map<String, Object> getComponentConfiguration() {
    Config conf = new Config();
    int tickFrequencyInSeconds = 10;
    conf.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, tickFrequencyInSeconds);
    return conf;
}

正如gakhov指出的那样(无耻的插件!),几天前我又在Storm中写了一篇关于这样做的文章。

我们最终使用了tick元组来“触发”聚合函数(bolt)。谢谢大家=)嗨,迈克尔,我想知道这个问题:在风暴来袭的时候,我能改变滴答声元组的频率吗?如果可以,我们可以更改storm写入趋势分析结果日志的频率,也可以更改storm计算主题趋势的窗口大小。谢谢抱歉,您不能在运行时更改滴答声频率。
// in your spout/bolt
@Override
public void execute(Tuple tuple) {
    if (isTickTuple(tuple)) {
        // now you can trigger e.g. a periodic activity
    }
    else {
        // do something with the normal tuple
    }
}

private static boolean isTickTuple(Tuple tuple) {
    return tuple.getSourceComponent().equals(Constants.SYSTEM_COMPONENT_ID)
        && tuple.getSourceStreamId().equals(Constants.SYSTEM_TICK_STREAM_ID);
}