一个流分流到多个流
在storm中,将一个流分流到多个不同的流中。
参考代码:
main部分
// tracker解析器
topologyBuilder.setBolt(
"TrackerBolt",
new TrackerBolt(),
2).shuffleGrouping("KafkaFilterBolt");
// 点击数统计
topologyBuilder.setBolt(
"ClickBolt",
new ClickBolt(),
2).shuffleGrouping("TrackerBolt", "CLICK");
// 加车数统计
topologyBuilder.setBolt(
"AddCartBolt",
new AddCartBolt(),
2).shuffleGrouping("TrackerBolt", "ADDCART");
TrackerBolt部分
@Override
public void execute(Tuple input, BasicOutputCollector collector) {
if (XXXXX) {
// 精准化点击行为
collector.emit("CLICK", new Values(XXXXX);
}
if (XXXXX) {
// 加车行为
collector.emit("ADDCART", new Values(XXXXX));
}
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declareStream("CLICK", new Fields("rcmdTracker"));
declarer.declareStream("ADDCART", new Fields("rcmdTracker"));
}
ClickBolt部分
@Override
public void execute(Tuple input, BasicOutputCollector collector) {
collector.emit(new Values(xx, xxxx));
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("KPIID", "KPICOLLECTOR"));
}
AddCartBolt部分
@Override
public void execute(Tuple input, BasicOutputCollector collector) {
collector.emit(new Values(xx, xx));
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("KPIID", "KPICOLLECTOR"));
}
多个流合并到一个流
参考代码:
main部分
// 点击数统计
topologyBuilder.setBolt(
"ClickBolt",
new ClickBolt(),
2).shuffleGrouping("TrackerBolt", "CLICK");
// 加车数统计
topologyBuilder.setBolt(
"AddCartBolt",
new AddCartBolt(),
2).shuffleGrouping("TrackerBolt", "ADDCART");
// 指标收集流程
topologyBuilder.setBolt(
"KpiSummaryBolt",
new KpiSummaryBolt(),
4).fieldsGrouping("ClickBolt", new Fields("KPIID"))
.fieldsGrouping("AddCartBolt", new Fields("KPIID"));
ClickBolt部分
@Override
public void execute(Tuple input, BasicOutputCollector collector) {
collector.emit(new Values(xx, xxxx));
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("KPIID", "KPICOLLECTOR"));
}
AddCartBolt部分
@Override
public void execute(Tuple input, BasicOutputCollector collector) {
collector.emit(new Values(xx, xx));
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("KPIID", "KPICOLLECTOR"));
}
KpiSummaryBolt部分
@Override
public void execute(Tuple input, BasicOutputCollector collector) {
Object object = input.getValueByField("KPICOLLECTOR");
}
全文完。