[Storm]Storm流控制

本文介绍了如何在Storm中实现一个流的分流到多个不同流以及多个流的合并到一个流的操作,提供了相关的代码参考。
摘要由CSDN通过智能技术生成

一个流分流到多个流

在storm中,将一个流分流到多个不同的流中。
storm_stream_control_1

参考代码:
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"));
}

多个流合并到一个流

storm-stream-control-2

参考代码:
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");
}

全文完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值