storm笔记 spout和bolt

  storm是twitter开源的实时计算框架,从架构上来说,和hadoop有些相似,但是有别于mapreduce的处理模型,storm采用数据流(stream)模型,因而更适合实时数据的处理。

   
  以上是官方网站上提供的图示,storm的处理模型有点类似自来水。水龙头的部分是数据产生器(spout),中间流经的各个节点(bolt)对数据进行分阶段处理。这个模型有点类似以前接触过的过滤器(filter),但是由于各个spout或bolt都是分布式的,相应的复杂性也就不可同日而语了。这里先简单的介绍一下spout和bolt,作为这个系列的开头。

  1. spout

  spout是storm中数据流的源头,因此担当的角色是数据的发送者。这里可以先看一下ISpout这个接口的uml图:


   对于spout来说,以上的几组回调函数对应着ISpout的生命周期。下面依次简单介绍一下:

  (1)open & close

  这一组方法分别在初始化完成后和关闭前调用。对于需要在数据发送前需要的上下文初始化,可以放到open中进行,相应的清理工作可以放到close中进行。

  (2)ack & fail

  当数据在下一跳处理完成后被调用,分别对应处理成功和失败的情况。通常来说,ack方法中会清除处理成功的消息,而fail中需要实现消息的重新发送。

  (3)deactivate 和 activate 

  分别在spout被去激活和重新激活时被调用。当spout被去激活以后,发送消息的方法将不会被调用。

  (4)nextTuple

   最重要的一个方法,用于发射(emit)数据,方法名Tuple即为storm中流动的数据。对应参数分别为配置信息,上下文信息,以及用于发射数据的SpoutOutputCollector。  

  2. bolt

  bolt中可以实现实际的数据处理逻辑,对应IBolt的uml如下:


  (1)prepare & cleanup

  和ISpout中的open和close一样。

  (2)execute

  实际的数据处理逻辑,tuple在上面有提到,为数据的抽象。处理完成后,既可以选择发送到下一个bolt,也可以选择输出。

  
    以上是简单的接口介绍,在实际应用中,一般会通过spout与其他系统集成,例如kaffa这样的消息队列。对于处理完成的数据,也可以选择输出到db或在bolt中直接导向其他系统做进一步处理。鉴于篇幅有限,关于spout和bolt的连接(groupping),并发控制,以及trident接口就放到后面介绍了。

    

猜你喜欢

转载自yaochitc.iteye.com/blog/2096730
今日推荐