【问题标题】:Apache Storm - composing a bolt with another boltApache Storm - 用另一个螺栓组合螺栓
【发布时间】:2014-07-29 09:52:20
【问题描述】:

我正在使用 Apache Storm,我想知道是否可以像这样用另一个螺栓组合螺栓:

public class MyNewBolt extends BaseRichBolt {
    private MyOldBolt bolt; // MyOldBolt also extends BaseRichBolt

    public MyNewBolt(MyOldBolt bolt) {
        this.bolt = bolt;
    }

    @Override 
    public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
        bolt.prepare(map, topologyContext, outputCollector);
        //Prepare other stuff
    }

    @Override
    public void execute(Tuple tuple) {
        bolt.execute(tuple);
        bolt.someOtherMethod();
        //Do some other stuff
    }

    @Override
    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
        bolt.declareOutputFields(outputFieldsDeclarer);
    }
}

在此之后我会提交螺栓:

public static void main(String[] args) throws Exception {
                         .
                         .
                         .
    TopologyBuilder builder = new TopologyBuilder();
    BaseRichBolt bolt = new MyNewBolt(new MyOldBolt());
    builder.setBolt("bolt-id", bolt).someGrouping(....);
                         .
                         .
                         .
}

这在我以本地模式运行时有效,但它实际上可以在远程模式下工作吗? Storm在这种情况下是如何处理bolt序列化-反序列化的呢?现在创建了多少任务?

【问题讨论】:

  • 你在集群上试过了吗?我同意您的怀疑,即由于创建螺栓的方式,为“bolt-id”创建工人可能存在一些问题,但最好的了解方法是尝试并查看。我似乎记得一些与动态类创建相关的限制。
  • 我没有设置真正的风暴集群。我在本地(测试)模式下工作,当我运行我的代码时它可以工作(没有错误或异常)。因为我学会了不相信模拟,所以我只是想知道在真正的工作风暴集群上这样做是否合法。对于我的项目,我只需要在本地模式下测试我的拓扑。所以也许真正的问题是本地模式是 100% 准确地模拟真实集群还是有一些例外?

标签: java constructor decorator composition apache-storm


【解决方案1】:

我建议您采用另一种方法(巧合的是,我使用的是这种方法)。与其将 Bolt 视为可重用类,不如将 Bolt 的业务逻辑分解为纯 Java 类。然后,如果您想在另一个螺栓中重用该逻辑,这样做会容易得多。

我还建议您将与特定流相关的所有行为(元组中的名称、类型和值顺序等知识)分解到另一个类中。螺栓类的实现应该是相当少的。

【讨论】:

  • 是的,我放弃了我上面提到的方法,因为它看起来不正确,而且我还没有在任何风暴启动器示例中看到它。关于“分解流的行为”的好建议。我会努力做到的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多