1、Storm集群

1.1 Storm集群和Hadoop集群对比

在Hadoop集群上运行MapReduce jobs,在Storm集群上运行topologies。 jobs和topologies有很大的不同。一个关键的区别是,一个MapReduce jobs最终可完成,然后a topology处理过程永远执行(除非kill it)

1.2 在Storm集群中有两类节点:master节点和多个worker节点


每个master节点以守护进行运行,该守护进程称为“Nimbus”,Nimbus 类似于Hadoop's JobTracker"节点,主要负责在集群中代码分发,任务分配,监控。

每个worker节点以守护进行运行,该守护进程称为Supervisor,一个正在运行的topology是由多台机器多个worker进程处理



1.3 Nimbus 和  the Supervisors 之间的协作
通过ZooKeeper集群完成 ,Nimbus守护进程和Supervisor守护进程是无状态的;所有的状态被保存到ZooKeeper集群或者本地磁盘上。这就意味着你通过kill -9 杀死Nimbus或者 Supervisors进程 ,然后重新启动他们,不会受到任何的影响。这种设计说明Storm集群式非常稳定。 


2、Topologies


为实现在Storm集群上实时计算,首先要创建topologies。一个topology就是一个计算的图形。在一个topology中每个节点含有业务处理逻辑,topology主要把每个处理节点连接起来。集群模式下运行topology,需要把你的代码打成jar文件,然后通过命令执行。该命令格式: storm jar all-my-code.jar backtype.storm.MyTopology arg1 arg2


backtype.storm.MyTopology:定义topology和提交topology到Nimbus节点;
storm jar : 主要连接Nimbus 和上传jar文件;


3、Streams
在Storm核心概念就是stream。一个stream就是一个tuples的序列


总结如下:

Topologies 用于封装一个实时计算应用程序的逻辑,类似于Hadoop的MapReduce Job


Stream 消息流,是一个没有边界的tuple序列,这些tuples会被以一种分布式的方式并行地创建和处理

Spouts 消息源,是消息生产者,他会从一个外部源读取数据并向topology里面面发出消息:tuple

Bolts 消息处理者,所有的消息处理逻辑被封装在bolts里面,处理输入的数据流并产生新的输出数据流,可执行过滤,聚合,查询数据库等操作

Task 每一个Spout和Bolt会被当作很多task在整个集群里面执行,每一个task对应到一个线程.

Stream groupings 消息分发策略,定义一个Topology的其中一步是定义每个tuple接受什么样的流作为输入,stream grouping就是用来定义一个stream应该如何分配给Bolts们.