介绍
storm 是一款实时 分布式 流计算开源框架,在一个多节点集群上,每秒可以轻松处理上百万条消息。扩展性好,容错性好,稳定性好,可以支持很多编程语言。hadoo框架也是个高并发处理框架,但是是批处理,就是数据来了,攒满多少,一起处理,而storm是流处理,数据来了就处理,就像水流一样,源源不断。
分布式 和 集群是有区别的。分布式集群就是有若干个分布式系统。
稳定性:Nimbus进程和Supervisor进程是快速失败的,无状态的,出了故障或者停止了,只要重启成功,那么还是会正常运行,就好像什么也没有发生,所以稳定性好。
可靠性:保证数据至少被执行一次。
易用性:容易上手;
完整性:数据不会丢失,采用事务机制,保证数据完整性。
扩展性:当某一级单元处理不够快时,直接配置并发数,即可。
storm体系结构图
Storm中核心概念:
Topology:拓扑,是程序上的拓扑,拓扑包含若干个节点,每个节点都有一个独立的功能,可以将一个任务划分为若干部分,然后将这些部分交给拓扑中的节点处理。
Nimbus:主节点,负责分配任务、调度 和监控集群。
Supervisor:工作节点,接收Nimbus分配的任务,控制和管理自己的Worker进程。
Worker:工作进程,Worker进程就可以运行一个Topology,可以理解为Topology级别。
Executor:Woker进程的线程,Executor运行一个Topology节点,可以理解为Topology节点级别。
Task:任务,storm最小的处理单位,是个名词,不是某个动作,是Topology节点具体要做的工作,可以理解为包含了若干个(或者说源源不断的)Tuple,是个抽象的概念,不像Tuple是个具体的数据结构。任务只能处理某一类Tuple。
Spout:Topology中的数据源节点,这个节点负责去从Topol外获取数据,然后源源不断地交给Topology中的Bolt节点去处理。
Bolt:Topology中处理数据的节点,从Spout节点或者Bolt节点获取数据,然后处理。
Tuple:Topology内节点之间传递的基本数据单元。
Stream:流,源源不断的Tuple就形成了流。可以理解为:Stream>Task>Tuple。
Stream分组:数据分组的方式,Storm自带的有:shuffle分组、Fields分组、All分组、Global分组、None分组、Direct分组 和 Local or Shuffle分组。
Storm内置的7中分组方法:
shuffe分组:数据被随机分配,可以保证同一级的Bolt节点有相同数量的数据处理。
Fields分组:根据Tuple中的一个或多个Field来分组,相同的Field就分到同一个Task中。
All分组:每一个Tuple都被分到所有的Task中。
Global分组:整个Stream都会选择一个目的Task,然后全部分发给这个Task,通常是具有最新ID的Task。
None分组:不设置分组方式,目前等同于随机分组。
Direct分组:输出数据的Spout或者Bolt 自定义 要将Tuple输出给哪个Bolt。
Local or Shuffle分组:如果目标Bolt的一个或者多个Task与当前产生数据的Task在同一个Woker进程中,那么就直接通过Woker内部通信,否则用shuffle分组。