有一个连接到具有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"));
}
}
我是否必须声明新字段?
答案 0 :(得分:0)
我认为在你的情况下," shuffle分组"足以在MongoDB编写器中对元组进行分区。事实上,虽然元组是随机发出的,但文档说:
随机分组:元组随机分布在螺栓上 任务的方式使得每个螺栓都能保证平等 元组数。