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

流处理旅程——storm之spout介绍核心 Spout 中方法的说明 1 Spout 数据源消息源 Spout 是 storm 的 Topology 中的消息生产者 2 spout 介绍 2 1spout 的结构 Spout 是 storm 的核心组件之一 最源头的接口是 IComponent2 2Spout 发出的消息 Spout 从外部获取数据后 向 Topology 中发出的 Tuple 可以是可靠的 也可以是不可靠的 注意 一个可靠的消息源可以重新发射

核心
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类中已经被隐式实现了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226215.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午7:35
下一篇 2026年3月17日 上午7:36


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号