从一个数据库获取数据并使用三叉戟拓扑处理并将其存储到另一个数据库

时间:2013-07-24 07:04:55

标签: apache-storm trident

我想通过一个spout从一个数据库中获取数据并处理数据并使用trident将其存储在另一个数据库中。我是风暴和三叉戟的新手,我不知道如何实现它。我从中获取数据spout中的数据库(单独的java类实现了trident支持的IRichSpout)并将其作为对象发出。我需要将它传递给三叉戟拓扑进行处理(计算记录数)并将其存储到数据库中。

 TridentTopology topology = new TridentTopology();  
 TridentState wordCounts =
          topology.newStream("spout1",spout)

现在新流将spout作为输入,即语法为

 Stream storm.trident.TridentTopology.newStream(String txId, IRichSpout spout)

但我想将spout发出的对象作为流的输入,以便trident处理并保存到database.So如何将我的spout类带入trident并将其传递给新流或者我应该将它组合在一起喷口和三叉戟都是同一类??

有人可以帮助PLZ .....

1 个答案:

答案 0 :(得分:1)

您可以执行类似

的操作
    MyFooSpout spout = new MyFooSpout();
    topology.newStream("spout1", spout)....

MyFooSpout类应该实现IRichSpout

来自trident tutorial newStream中的TridentTopology方法在拓扑中创建数据流,从任何输入源读取。

在您的情况下,它可能是MyFooSpout

  

。我从数据库中获取了数据库中的数据(单独的java类实现了三叉戟支持的IRichSpout)并将其作为对象

发出
你能澄清一下你到底指的是什么吗?你的鲸鱼喷码是怎么样的?作为一个非常通用的例子,如果我们写一些东西(取自教程页面)

    TridentState wordCounts = topology.newStream("spout1", spout).each(new Fields("sentence"), new Split(), new Fields("word"))

这意味着spout应该发出单个字段sentence。通过调用eachSplit函数将应用于流中的每个元组,这将基于通过采用sentence字段编写的任何代码来执行。但是,这可能会因您的要求而异。例如,它可以是Filter MyFilter extends BaseFilterfunction MyCustomFuction extends BaseFunction。查看API页面了解更多详情。