storm基本概念

来源:互联网 发布:淘宝能卖泰国药品吗 编辑:程序博客网 时间:2024/05/20 11:26

Storm是一个免费的开源的分布式实时计算平台,基于Storm的有向无环拓扑可以轻松的处理数据流。有关Storm的基本概念可以参考文献[1],此处只给出简单的介绍。

  • 元组(Tuple)
    Storm处理消息的基本单元,是一个命名的值列表。tuple的类型可以涵盖所有的基本类型、字符串和字节数组等。
  • 流(Stream)
    流是一个无界的Tuple序列,由源源不断的元组组成。
  • Spout
    Spout产生整个Storm处理的数据流。Spout获取输入,并将其以tuple的形式发送,它源源不断的发送tuple,为后续的处理提供了数据流。
  • Bolt
    Bolt获取Spout或者其他Bolt发送的数据流,经过处理后,可以将处理后的数据流继续以元组的形式发送,也可以将数据流进行持久化存储,可以存储到HDFS,本地文件,数据库,消息中间件等等。
  • 拓扑(Topology)
    Spout和Bolt之间的数据流向构成的逻辑上的有向图。把应用程序的运行逻辑打成jar包并提交到topology。Storm的Topology类似于MapReduce的作业(Job),但是MR的job最终会完成,而Topology会一直运行直到被手动kill。

storm topology

在上面拓扑图中由两个Spout和五个Bolt组成,Spout和Bolt之间的有向箭头标识了数据流的流向。拓扑的数据流由两个不同的Spout产生,而Bolt分别按照有向图的指示接收并处理数据,而后将处理后的数据再次发送。Spout和Bolt本身并不存储产生的数据(这里是指不持久化所处理的数据流),但是完全可以在它们的实际实现中,增加数据持久化的实现,例如Bolt4的功能实现完全可以是将之前处理的数据流持久化到HDFS,文件系统,DB等。Spout的数据源也是丰富多样的,可以读取本地文件然后处理后发出,可以来自Redis,也可以来自各种消息中间件(Kafka等)。

Strom通常作为集群运行,由zookeeper提供各种数据的一致性服务。Storm的集群节点分为主节点(Master node)和工作节点(Worker node)。主节点有一个,工作节点有多个。主节点由Nimbus进程守护,工作节点由Supervisor进程守护。Storm是快速失败的(每当遇到任何意外情况时,会自动结束worker进程),因此可以用kill命令杀死拓扑。Storm也是无状态的,所有状态都可以保存在zookeeper或者本地磁盘。

storm提供了一些方便可靠的拓扑实现:

  • DRPC
    DRPC(分布式远程过程调用,Distributed Remote Procedure Call)是storm整合流(stream)、Spout、Bolt、Topology而形成的一种模式。引入DRPC旨在借助Storm集群实现远程的并行计算。DRPC客户端只要指定要使用的“函数”(函数实现了特定的功能),并将要计算的内容发送给storm的drpc服务,待服务端调用响应函数计算完成后,客户端会收到相应的返回结果。

  • 事务拓扑
    storm的事务机制提供了一种完全精确的、可扩展的和容错的方式来处理数据,保证数据是严格有序的处理。狭义上的事务可以理解成数据库事务,它具有ACID属性(原子性、一致性、隔离性和持久性),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。对照数据库事务的定义,你可以更好的想象和理解storm事务提供的精确处理。

  • Trident
    Trident是对Storm的更高一层的抽象,除了提供一套简单易用的流数据处理API之外,它以batch(一组tuples)为单位进行处理,这样一来,可以使得一些处理更简单和高效。 它可以让你无缝的混合使用高吞吐量、低延迟分布式查询处理状态。Trident可以对数据流使用连接、聚合、分组、函数、过滤器等原语进行处理。

storm中使用的相关组件:

  • storm集群使用zookeeper实现集群服务是一致性,storm集群的许多中间状态都会保存在zookeeper中。
  • 默认使用Kryo序列化。也可以使用自定义的序列化方式。
  • 默认使用ZeroMQ作为消息处理队列,storm 0.9版本后引入Netty传输机制。支持自定义消息通信机制。
  • storm核心及Topology定义使用Thrift,因此topolopy的提交是跨语言的。

1.赵必夏,程丽明. 从零开始学Storm(第二版).清华大学出版社,2016.

0 0
原创粉丝点击