Apache Storm是由Clojure编程语言编写的分布式流处理计算框架。该项目最初由Nathan Marz及BackType团队创建,在被Twitter收购后基于Apache许可协议开源。Apache Storm应用程序是基于有向无环图(DAG)的拓扑结构,以数据喷口(spout)和螺栓(bolt)为图的顶点,图上的边为流,将数据从一个节点引导到另一个节点,同时,拓扑一起充当数据转换的管道。Twitter最初使用Storm时,处理数十亿级的事件,通过对数十亿级的事件实时分析用户行为偏好、实时热点推文等,为用户实时推送偏好内容以及时下热点推文。
Storm纯内存的计算方式,减少了数据写入磁盘的时间,对比与传统关系型数据库(MYSQL、DB2、ORACLE等),其优点在于数据即拿即处理,数据源源不断地从喷口流出,通过流的方式传送至螺栓,螺栓即对数据进行处理,采用流水线加工生产作业,提高数据处理的效率,不需要对数据落地入库,后再进行数据运算。
Storm的拓扑模型架构
Storm的喷头可以接入多种数据源(KAFKA、SocketServer、Redis、FTP等),数据接入后,可由共同的Bolt的进行逻辑处理,最终可将结果输出至多种数据源。其数据通讯时,需要定义元组(Tuple)对象进行数据通讯,数据在拓扑中完成数据清洗、转换、计算、输出的过程。Storm拓扑应用一经执行后,将不停的运作,直至应用被杀死。
![](https://i-blog.csdnimg.cn/blog_migrate/54e832b41bb6a4a9c6362ef764257fe1.png)
Storm集群技术架构
整个Storm集群的工作原理,是由客户端提交Topology(拓扑程序)至Nimbus,Nimbus将JAR包分发至所有的Supervisor节点,当所有的Supervisor接收完Jar包括,Nimbus将任务发布至zookeeper,Supervisor收到zookeeper分派的任务后,启动work(进程),work启动Executor(线程), Executor执行Task(任务),而Storm UI则负责监控总个集群的运行情况。以下详细介绍各个模块的职能以及相互间的交互。
Nimbus:负责对运行在集群上的topology进行管理、协调和监控,其中包括topology的发布、任务指派、时间处理时重新指派任务等。Nimbus采用Zookeeper记录所有的supervisor节点,以及执行任务数(Task),根据supervisor定时上报的心跳信息,检查supervisor是否正常,在设定的超时范围内,未收到心跳信息,则进行故障转移,将故障的supervisor的任务信息分派给其他的supervisor。
Supervisor:通过zookeeper接收Nimbus分发的任务信息,根据Nimbus执行的任务信息启动相应数量的work,再由work根据任务信息启动相应的Executor,当work启动失败时,supervisor将会重新调起work。Work与work间的通讯采用Netty中间件,并使用tuple元组的对象模式进行数据交互。
UI:通过Storm UI可以监控数据执行情况,每10分钟数据的处理效率,并可对应用进行暂停、恢复、rebalance以及停止操作。