Storm流之多个Bolt聚合到一个Bolt
一、 案例Demo
基于分发案例,将MinBolt、MidBolt、MaxBolt聚合到TotalBolt
二、 FenFaTopology代码
package com.test.csdn;
import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.topology.TopologyBuilder;
/**
* Created by Simon on 2018/4/19.
*/
public class FenFaTopology {
public static void main(String[] args) {
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("fenFaSpout",new FenFaSpout());
builder.setBolt("minBolt",new MinBolt()).localOrShuffleGrouping("fenFaSpout","min");
builder.setBolt("midBolt",new MidBolt()).localOrShuffleGrouping("fenFaSpout","mid");
builder.setBolt("maxBolt",new MaxBolt()).localOrShuffleGrouping("fenFaSpout","max");
builder.setBolt("totalBolt",new TotalBolt())
.localOrShuffleGrouping("minBolt")
.localOrShuffleGrouping("midBolt")
.localOrShuffleGrouping("maxBolt");
Config config = new Config();
try {
LocalCluster cluster = new LocalCluster();
cluster.submitTopology(FenFaTopology.class.getSimpleName(),config, builder.createTopology());
}catch (Exception e){
e.printStackTrace();
}
}
}
三、 MinBolt代码
package com.test.csdn;
import org.apache.storm.topology.BasicOutputCollector;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseBasicBolt;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Tuple;
import org.apache.storm.tuple.Values;
/**
* Created by Simon on 2018/4/19.
*/
public class MinBolt extends BaseBasicBolt{
@Override
public void execute(Tuple tuple, BasicOutputCollectorbasicOutputCollector) {
Integer i = tuple.getInteger(0);
basicOutputCollector.emit(new Values(i));
}
@Override
public void declareOutputFields(OutputFieldsDeclareroutputFieldsDeclarer) {
outputFieldsDeclarer.declare(new Fields("minBolt"));
}
}
四、 MidBolt代码
package com.test.csdn;
import org.apache.storm.topology.BasicOutputCollector;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseBasicBolt;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Tuple;
import org.apache.storm.tuple.Values;
/**
* Created by Simon on 2018/4/19.
*/
public class MidBolt extends BaseBasicBolt{
@Override
public void execute(Tuple tuple, BasicOutputCollectorbasicOutputCollector) {
Integer i = tuple.getInteger(0);
basicOutputCollector.emit(new Values(i));
}
@Override
public void declareOutputFields(OutputFieldsDeclareroutputFieldsDeclarer) {
outputFieldsDeclarer.declare(new Fields("midBolt"));
}
}
五、 MaxBolt代码
package com.test.csdn;
import org.apache.storm.topology.BasicOutputCollector;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseBasicBolt;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Tuple;
import org.apache.storm.tuple.Values;
/**
* Created by Simon on 2018/4/19.
*/
public class MaxBolt extends BaseBasicBolt{
@Override
public void execute(Tuple tuple, BasicOutputCollectorbasicOutputCollector) {
Integer i = tuple.getInteger(0);
basicOutputCollector.emit(new Values(i));
}
@Override
public void declareOutputFields(OutputFieldsDeclareroutputFieldsDeclarer) {
outputFieldsDeclarer.declare(new Fields("maxBolt"));
}
}
六、 TotalBolt代码
package com.test.csdn;
import org.apache.storm.topology.*;
import org.apache.storm.topology.base.BaseBasicBolt;
import org.apache.storm.tuple.Tuple;
/**
* Created by Simon on 2018/4/19.
*/
public class TotalBolt extends BaseBasicBolt{
@Override
public void execute(Tuple tuple, BasicOutputCollectorbasicOutputCollector) {
Integer integer =tuple.getInteger(0);
String sourceComponent =tuple.getSourceComponent();
System.out.println("来源bolt:"+sourceComponent+"__值:"+integer);
}
@Override
public void declareOutputFields(OutputFieldsDeclareroutputFieldsDeclarer) {
}
}
七、 运行结果
来源bolt:midBolt__值:111
来源bolt:maxBolt__值:580
来源bolt:minBolt__值:12
来源bolt:minBolt__值:2
来源bolt:minBolt__值:45
来源bolt:maxBolt__值:288
来源bolt:minBolt__值:12
来源bolt:maxBolt__值:235
来源bolt:maxBolt__值:580
来源bolt:midBolt__值:118
来源bolt:minBolt__值:45
来源bolt:midBolt__值:111
来源bolt:maxBolt__值:360
来源bolt:minBolt__值:45
来源bolt:maxBolt__值:360
来源bolt:minBolt__值:7
来源bolt:midBolt__值:111
来源bolt:minBolt__值:7
来源bolt:midBolt__值:153
来源bolt:midBolt__值:153
来源bolt:maxBolt__值:235
来源bolt:maxBolt__值:521