《Storm企业级应用:实战、运维和调优》——3.2 Spout数据源

3.2 Spout数据源

消息源Spout是Storm的Topology中的消息生产者(即Tuple的创造者)。
3.2.1 Spout介绍
1.?Spout的结构
Spout是Storm的核心组件之一,最源头的接口是IComponent,如图3-2所示,几个Spout接口都继承自IComponent。

2.?Spout发出的消息
Spout从外部获取数据后,向Topology中发出的Tuple可以是可靠的,也可以是不可靠的。
一个可靠的消息源可以重新发射一个Tuple(如果该Tuple没有被Storm成功处理),但是一个不可靠的消息源Spout一旦发出,一个Tuple就把它彻底“遗忘”,也就不可能再发了。
3.?Spout发射的流
Spout可以发射多个流。要达到这样的效果,使用OutputFieldsDeclarer.declareStream来定义多个流(即定义多个Stream),然后使用SpoutOutputCollector来发射指定的流。
4.?Spout的重要方法
Spout的重要方法是nextTuple。nextTuple方法发射一个新的元组到Topology,如果没有新元组发射,则直接返回。注意任务Spout的nextTuple方法都不要实现成阻塞的,因为Storm是在相同的线程中调用Spout的方法。Spout的另外两个重要方法是ack和fail方法。当Spout发射的元组被拓扑成功处理时,调用ack方法;当处理失败时,调用fail方法。ack和fail方法仅被可靠的Spout调用。
5.?Spout的组件
Spout的最顶层抽象是ISpout接口。在通常情况下(Shell和事务型的除外),实现一个Spout,可以直接实现接口IRichSpout,如果不想写多余的代码,可以直接继承BaseRichSpout。
3.2.2 Spout实例
下面通过创建一个实例RandomSpout来介绍Spout,图3-3为RandomSpout继承自BasicRichSpout及其实现的原理图。
图3-4列出了实例RandomSpout继承自BaseRichSpout中的几个重要方法。
下面对图3-4中的方法进行详细介绍。
(1)open方法
当一个Task被初始化时会调用此open方法。一般都会在此方法中初始化发送Tuple的对象SpoutOutputCollector和配置对象TopologyContext。
代码示例如下:

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

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

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

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

public void nextTuple() {
      while(true){
          Values val = new Values(random.nextInt(100));
          collector.emit(val);
          try {
              Thread.sleep(500);
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
      }
  }

以上代码从100以内的整数中随机生成一个数作为Tuple的值,然后通过_collector发送到Topology。
另外,除了上述几个方法之外,还有getComponentConf?iguration、ack、fail和close方法等。getComponentConf?iguration方法用于配置当前组件的参数,Storm监测到一个Tuple被成功处理时调用ack方法,处理失败时调用fail方法,这两个方法在BaseRichSpout类中已经被隐式-实现了。

时间: 2024-09-15 20:39:40

《Storm企业级应用:实战、运维和调优》——3.2 Spout数据源的相关文章

《Storm企业级应用:实战、运维和调优》——导读

**前言**大数据是继云计算.物联网之后IT行业又一大颠覆性的技术变革.之前大数据在互联网.军事.金融.通信和物理学等领域已有不少落地案例,却因为近年来Hadoop技术的快速发展而引起业界广泛关注.可以说,Hadoop目前是大数据处理的关键技术,也是迄今为止,最成熟.应用最广泛的技术.但是Hadoop生态圈下面的数据处理几乎都是在离线状态下进行的,离线处理海量数据是比较耗时.耗力的,Storm的实时处理技术应运而生.正如曾经开发Storm的一位主要工程师所谈到的,Storm可以方便地在一个计算机

《Storm企业级应用:实战、运维和调优》——3.8 Worker、Task、Executor三者之间的关系

3.8 Worker.Task.Executor三者之间的关系 Storm集群中的一个物理节点启动一个或者多个Worker进程,集群的Topology都是通过这些Worker进程运行的.然而,Worker进程中又会运行一个或者多个Executor线程,每个Executor线程只运行一个Topology的一个组件(Spout或Bolt)的Task任务,Task又是数据处理的实体单元.Worker是进程,Executor对应于线程,Spout或Bolt是一个个的Task:同一个Worker只执行同一

《Storm企业级应用:实战、运维和调优》——2.3 安装部署Storm集群

2.3 安装部署Storm集群 Storm的安装.部署过程分为安装依赖.安装Storm.启动和查看安装等几个部分.其中,前两部分内容在三个节点上都是一样的,只要在启动时区分开角色即可.接下来将讲解Storm集群的安装过程.2.3.1 安装Storm依赖库 在Nimbus和Supervisor的节点上安装Storm时,都需要安装相关的依赖库,具体如下: ZeroMQ 2.1.7. JZMQ. 其中,ZeroMQ推荐使用2.1.7版本,请勿使用2.1.10版本.官方解释是因为该版本的一些严重Bug会

《Storm企业级应用:实战、运维和调优》——3.3 Bolt消息处理者

3.3 Bolt消息处理者 认识了消息源Spout和消息的数据存储元组Tuple,接下来了解消息的处理者Bolt.Bolt是接收Spout发出元组Tuple后处理数据的组件,所有的消息处理逻辑被封装在Bolt中,Bolt负责处理输入的数据流并产生输出的新数据流.3.3.1 Bolt介绍 消息处理者Bolt在Storm中是一个被动的角色.Bolt把元组作为输入,然后产生新的元组作为输出. 1.?Bolt的功能 Bolt可以执行过滤.函数操作.合并.写数据库等操作.Bolt还可以简单地传递消息流,复

《Storm企业级应用:实战、运维和调优》——1.2 Storm是什么

1.2 Storm是什么 本节主要通过介绍Storm出现的背景.简介.设计思想.与大数据框架Hadoop的比较等内容,使读者了解Storm的设计理念,从整体感观上切入,并快速掌握Storm.1.2.1 Storm出现的背景 互联网从诞生的第一时间起,对世界的最大改变就是让信息能够实时交互,从而大大加速了各个环节的效率.正因为大家有对信息实时响应.实时交互的需求,所以软件行业除了个人操作系统之外,数据库(更精确的说是关系型数据库)应该是发展最快.收益最为丰厚的产品了.记得十年前,很多银行别说实时转

《Storm企业级应用:实战、运维和调优》——1.4 Storm的特性

1.4 Storm的特性 Storm是一个开源的分布式实时计算系统,可以简单.可靠地处理大量的数据流.Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快(在一个小集群中,每个节点每秒可以处理数以百万计的消息).Storm的部署和运维都很便捷,而且更为重要的是,可以使用任意编程语言来开发应用. 下面介绍Storm的特点. (1)编程模型简单 在大数据处理方面,Hadoop为开发者提供了MapReduce原语,使并行批处理程序变得非常简单和优美.同样,Storm也为大数

《Storm企业级应用:实战、运维和调优》——1.1 什么是实时流计算

1.1 什么是实时流计算 所谓实时流计算,就是近几年由于数据得到广泛应用之后,在数据持久性建模不满足现状的情况下,急需数据流的瞬时建模或者计算处理.这种实时计算的应用实例有金融服务.网络监控.电信数据管理.Web应用.生产制造.传感检测,等等.在这种数据流模型中,单独的数据单元可能是相关的元组(Tuple),如网络测量.呼叫记录.网页访问等产生的数据.但是,这些数据以大量.快速.时变(可能是不可预知)的数据流持续到达,由此产生了一些基础性的新的研究问题--实时计算.实时计算的一个重要方向就是实时

《Storm企业级应用:实战、运维和调优》——1.5 Storm的功能

1.5 Storm的功能 Storm有许多应用领域:实时分析.在线机器学习.持续计算.分布式RPC(远过程调用协议,一种通过网络从远程计算机程序上请求服务).ETL(Extraction-Transformation-Loading的缩写,即数据抽取.转换和加载)等.下面介绍Storm的三大主要应用. (1)信息流处理(stream processing) Storm可用来实时处理新数据和更新数据库,兼具容错性和可扩展性,即Storm可以用来处理源源不断流进来的消息,处理之后将结果写入某个存储中

《Storm企业级应用:实战、运维和调优》——3.7 Worker工作者进程

3.7 Worker工作者进程 工作者进程(Worker)是一个Java进程,执行拓扑的一部分任务.一个Worker进程执行一个Topology的子集,它会启动一个或多个Executor线程来执行一个Topology的组件(Spout或Bolt).因此,拓扑在执行时,可能跨一个或多个Worker.Storm会尽量均匀分配任务给所有的Worker.不会出现一个Worker为多个Topology服务的情况.