【问题标题】:Storm Tick Tuple from a spout来自喷口的 Storm Tick Tuple
【发布时间】:2015-07-12 22:30:14
【问题描述】:

我想将我的 spout 配置为在不同的流上以 2 个不同的频率发出刻度元组。我的问题如下:

  1. 我了解这是如何使用螺栓完成的。但是,在 spout 上,tick tuple 会在每个 tick 上调用 next Tuple 方法吗?

  2. 如何确定调用刻度的频率?意思是,我在config对象中配置的时间的实际值?

【问题讨论】:

  • 我不明白它与使用通常的螺栓方式配置有什么不同?在螺栓中,可以使用此功能检查它private static boolean isTickTuple(Tuple tuple) { return tuple.getSourceComponent().equals(Constants.SYSTEM_COMPONENT_ID) && tuple.getSourceStreamId().equals(Constants.SYSTEM_TICK_STREAM_ID); }
  • 为什么不使用 2 个喷口或 1 个喷口 + 1 个螺栓与刻度元组?您真的需要在单个 spout 中合并数据吗?如果您混合过多的数据,请注意复杂性,如果您可以将其隔离为 2 个组件,那绝对是最佳选择。

标签: apache-storm


【解决方案1】:

只有螺栓可以接收刻度元组。 Spout 只能发出元组。

我假设您正在尝试从您的 spout 中每隔一段时间进行一次“读取”,以便发出一个新元组。

例如,在两次读取之间休眠 50 毫秒:

@Override
public void nextTuple() {
   try {
      String message = _mqClient.getMessage();
      if (message != null) {
         _collector.emit(new Values(message));
      } 
      // sleep for 50 milliseconds
      Utils.sleep(50);
   } catch (Exception e) {
      _collector.reportError(e);
      LOG.error("MQ spout error {}", e);
   }
}

【讨论】:

    【解决方案2】:

    也许这可以帮助你:

    https://github.com/ptgoetz/storm-signals

    Storm-Signals 旨在提供一种将消息(“信号”)发送到 风暴拓扑中的组件(喷口/螺栓),否则不会 可寻址。

    Storm 拓扑可以被认为是静态的,因为对 拓扑的行为需要重新部署。 Storm-Signals 提供了一个 在运行时修改拓扑行为的简单方法,无需 重新部署。

    【讨论】:

    • 风暴信号不再维护。
    猜你喜欢
    • 1970-01-01
    • 2020-05-02
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2018-10-26
    相关资源
    最近更新 更多