storm基本概念
Storm是一个免费的开源的分布式实时计算平台,基于Storm的有向无环拓扑可以轻松的处理数据流。本文介绍storm的一些基本概念。
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。
在上面拓扑图中由两个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.
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)