【问题标题】:How would I split a stream in Apache Storm?我将如何在 Apache Storm 中拆分流?
【发布时间】:2013-11-17 09:55:22
【问题描述】:

我不明白如何在 Apache Storm 中拆分流。例如,我有螺栓 A,经过一些计算,它有 somevalue1、somevalue2 和 somevalue3。它想将 somevalue1 发送到 bolt B,将 somevalue2 发送到 bolt C,然后将 somevalue1,somevalue2 发送到 bolt D。我将如何在 Storm 中执行此操作?我将使用什么分组以及我的拓扑是什么样的?预先感谢您的帮助。

【问题讨论】:

    标签: apache-storm


    【解决方案1】:

    如果您的情况需要,您可以使用不同的流,这并不是真正的拆分,但您将拥有很大的灵活性,例如,您可以将它用于从螺栓进行基于内容的路由:

    你在bolt中声明流:

    @Override
    public void declareOutputFields(final OutputFieldsDeclarer outputFieldsDeclarer) {
        outputFieldsDeclarer.declareStream("stream1", new Fields("field1"));
        outputFieldsDeclarer.declareStream("stream2", new Fields("field1"));
    }
    

    您从所选流上的螺栓发出:

    collector.emit("stream1", new Values("field1Value"));
    

    你通过拓扑收听正确的流

    builder.setBolt("myBolt1", new MyBolt1()).shuffleGrouping("boltWithStreams", "stream1");
    builder.setBolt("myBolt2", new MyBolt2()).shuffleGrouping("boltWithStreams", "stream2");
    

    【讨论】:

    • 在 Trident 中有没有对应的?
    • @zenbeni 当你从螺栓发出这个新流时,你并没有锚定它。在这种情况下,是否形成了单独的树?如果“stream1”出现故障,spout 或 bolt 会知道发生了什么问题吗?
    • 一个可以在锚定时发射到流 - 为此还有一个额外的发射方法重载。
    【解决方案2】:

    这里有两个选项:Stream Groups 和“直接分组”。根据您的要求,其中之一将为您服务。

    查看 WordCountTopology 示例项目,看看这是否是您正在寻找的。否则,“直接分组”将是一个更好的选择。

    但同样,选择分组策略取决于您的要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 2015-11-20
      相关资源
      最近更新 更多