流处理旅程——storm之spout介绍

核心
Spout中方法的说明

1、Spout数据源
消息源Spout是storm的Topology中的消息生产者。

2、spout介绍
2、1spout的结构
Spout是storm的核心组件之一,最源头的接口是IComponent

2、2Spout发出的消息
Spout从外部获取数据后,向Topology中发出的Tuple可以是可靠的,也可以是不可靠的。

注意:一个可靠的消息源可以重新发射一个Tuple(如果该Tuple没有被storm成功处理),但是一个不可靠的消息源spout一旦发出,一个Tuple就把它彻底”遗忘”,也就不可能再发了。

2、3Spout发射的流
Spout可以发射多个流,要达到这样的效果,使用OutputFieldsDeclarer.declareStream来定义多个流(即定义多个stream),然后使用SpoutOutputCollector来发射指定的流。

2、4Spout的重要方法
Spout的重要方法是nextTuple,nextTuple方法发射一个新的元组到Topology,如果没有新的元组发射,则直接返回。注意任务Spout的nextTuple方法都不要实现成阻塞的,因为storm是在相同的线程中调用spout的方法。Spout的另外两个重要方法是ack和fail方法,当spout发射的元组被拓扑成功处理时,调用ack方法,当处理失败时,调用fail方法,ack和fail方法仅被可靠的spout调用。

2、5Spout的组件
Spout的最顶层抽象是ISpout接口,在通常情况下,实现一个Spout,可以直接实现接口IRichSpout,如果不想写多余的代码,可以直接继承BaseRichSpout

3、Spout 实例
3、1open方法
当 一个task被初始化时会调用open方法,一般都会在此方法中初始化发送tuple的对象SpoutOutputCollector和配置对象TopologyContext.
代码如下

public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
                this.collector=collector;
            }

3、2declareOutputFields
此方法用于声明当前Spout的Tuple发送流。流的定义是通过OutputFieldsDeclare.declareStream方法完成的,其中的参数包括了发送的域Fields
代码如下

public void declareOutputFields(OutputFieldsDeclarer declarer) {
                declarer.declare(new Fields("sentence"));
            }

3、3nextTuple方法
这是Spout类中最重要的一个方法,发射一个Tuple到Topology都是通过该方法来实现的。
代码如下

public void nextTuple() {
                String sentence=msgs[random.nextInt(8)];
                collector.emit(new Values(sentence));
            }

另外,除了上述的几个方法之外,还有getComponentConfiguration、ack、fail和close方法等,getComponentConfiguration方法用于配置当前组件的参数,storm监测到一个tuple被成功处理时调用ack方法,处理失败时调用fail方法,这两个方法在BaseRichSpout类中已经被隐式实现了

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值