在几个数据库编写器螺栓/数据库查询路由器之间平均分割风暴流?

时间:2014-05-25 08:35:25

标签: java apache-storm

有一个连接到具有n个查询路由器的MongoDB集群的风暴集群,创建一个" SplitStreamBolt"是否合理?将流平均分割为n个流并连接到每个流,并且附加了特定查询路由器的编写器螺栓?

如何定义这样的SplitStreamBolt?有没有更好的方法以这种方式拆分流?

基本尝试:

public static class SplitStreamBolt extends BaseRichBolt {
    private OutputCollector _collector;

    private int cycleStream = 1;

    @Override
    public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
        _collector = collector;
    }

    @Override
    public void execute(Tuple input) {
        if(cycleStream == 1)
        {
            _collector.emit("mongoStream1", input, new Values(1));
            cycleStream = 2;
        }
        else
        {
            _collector.emit("mongoStream2", input, new Values(2));
            cycleStream = 1;
        };
        _collector.ack(input);
    }

    @Override
    public void declareOutputFields(final OutputFieldsDeclarer outputFieldsDeclarer) {
        outputFieldsDeclarer.declareStream("mongoStream1", new Fields("stream"));
        outputFieldsDeclarer.declareStream("mongoStream2", new Fields("stream"));
    }
}

我是否必须声明新字段?

1 个答案:

答案 0 :(得分:0)

我认为在你的情况下," shuffle分组"足以在MongoDB编写器中对元组进行分区。事实上,虽然元组是随机发出的,但文档说:

  

随机分组:元组随机分布在螺栓上   任务的方式使得每个螺栓都能保证平等   元组数