Storm介绍:

Storm是一个分布式的实时计算框架,具有可扩展,容错等特性,可以应用于实时计算和在线机器学习等领域。

什么是实时流计算:

近几年数据得到广泛应用之后,在数据持久性建模不满足现状的条件下,急需数据流的瞬时建模或者计算处理。
其可用于的场景:
1.网路流量实时分析
2.基于GPS的实时路况分析
3.电信数据管理
4.web应用
5.语音实时墙
…等等

普遍的实时计算处理流程

Storm的工作流程 storm详解_Storm快速入门


1.Flume采集到数据后通过push方式存入kafka,如果kafka也使用push的方式向Strom输出数据,由于Storm是个计算框架,有时可能速度会稍慢,造成数据堆积。所以kafka采用的是pull模式,说白了kafka并不是自发的发送数据给下游,而是由下游的组件从kafka中拽数据。有助于提高性能。

Storm架构设计思想:

1.Stream和Tuple:在Storm中也有对流的抽象:流是一种不间断,无界的连续Tuple,可以把Tuple理解成是一种封装数据流的数据结构,可以类比Flume中的Event概念。每个Tuple是包含一个或多个键值对的列表。

2.Spout:Storm认为每个流都有Stream源,也就是要有一个数据源。所以它将这种数据源抽象为Spout,Spout可以连接Twitter API不断发出推文,或者从队列中不断读取数据将其装配为Tuple发射给下游组件。

3.Bolt:那现在有了数据源而且它可以发送数据,所以还缺一种可以盛接和处理这些数据的组件,在Storm中称为Bolt。只要将流方向导向该Bolt,那么他就可以消费任意数量的数据流。同时还可以发送新的流给其他Bolt组件使用。

4.综上,可以把它整体的思想归纳为一张好理解的图

Storm的工作流程 storm详解_storm入门_02


5.其中,多个Bolt的数据流也可以导向某一个Bolt。借此,会有以下更完整的图

Storm的工作流程 storm详解_storm基础知识_03


现在,我们可以将Storm的整个处理流程图看做一个有向无环图(DAG,在Spark中也有相同的概念),Storm将这种图抽象为Topology(拓扑图),拓扑是Storm中最高层次的一个抽象概念,提交拓扑到Storm集群中执行。

Storm中主要角色说明:

1.Nimbus:集群中主节点通常只运行一个后台程序——Nimbus,它的主要职责就是管理,协调和监控在集群上运行的拓扑,包括拓扑的发布,任务指派,事件处理失败时的重新指派。

他还可以将拓扑发布到Storm集群上,将预先打成jar包的拓扑和配置信息提交到nimbus服务器上。一旦它接收到了压缩好的拓扑,就会分发给足够数量的Supervisor节点上。然后nimbus就会指派task(bolt和spout实例)到每个Supervisor节点,并且发送信号指示Supervisor节点生成足够的worker来执行指派的task。

2.Supervisor:工作节点·,后台程序,用于监听工作指派并基于要求运行工作进程,它和nimbus之间通过zookeeper来协调。

3.Zookeeper:协调服务组件,由于zookeeper集群不用于消息传递,所以Storm给zookeeper带来的压力很小,通常一台zookeeper主机就够。

Storm的工作流程 storm详解_Storm的工作流程_04


4.Worker:运行具体处理组件逻辑的进程,一个拓扑里可能会有多个worker进程,每个Worker是一个物理JVM进程并且执行整个拓扑的一部分。

5.Task:具体的处理线程,worker中的每一个Spout/Bolt线程称为一个Task,同一个Spout/Bolt线程可能会共享一个Executor线程

Storm的工作流程 storm详解_Storm快速入门_05


至此,Storm入门知识介绍完毕。