概述
Storm是Twitter开源的分布式实时大数据处理框架,最早开源于github,从0.9.1版本之后,归于Apache社区,被业界称为实时版Hadoop。随着大数据实时处理解决方案(流计算)的应用日趋广泛,目前已是分布式技术领域最新爆发点,而Storm更是流计算技术中的佼佼者和主流。
Storm 的集群架构

Nimbus:即Storm的Master,负责资源分配和任务调度。一个Storm集群只有一个Nimbus。
Supervisor:即Storm的Slave,负责接收Nimbus分配的任务,管理所有Worker,一个Supervisor节点中包含多个Worker进程。
Worker:工作进程,每个工作进程中都有多个Task。
Executor:根据配置可启动多个线程
Task:任务,在 Storm 集群中每个 Spout 和 Bolt 都由若干个任务(tasks)来执行。每个任务都与一个执行线程相对应。
Storm的核心组件

Topology:计算拓扑,Storm 的拓扑是对实时计算应用逻辑的封装。拓扑由一系列通过数据流(Stream Grouping)相互关联的 Spout 和 Bolt 组成的的拓扑结构。
Stream:数据流(Streams)是 Storm 中最核心的抽象概念。一个数据流指的是在分布式环境中并行创建、处理的一组元组(tuple)的无界序列。数据流可以由一种能够表述数据流中元组的域(fields)的模式来定义。
Spout:数据源代码组件,数据源是拓扑中数据流的来源。一般 Spout 会从一个外部的数据源读取元组然后将他们发送到拓扑中。
Bolt:业务处理代码组件,拓扑中所有的数据处理均是由 Bolt 完成的。通过数据过滤(filtering)、函数处理(functions)、聚合(aggregations)、联结(joins)、数据库交互等功能,Bolt 几乎能够完成任何一种数据处理需求。
Stream grouping:为拓扑中的每个 Bolt 的确定输入数据流是定义一个拓扑的重要环节。数据流分组定义了在 Bolt 的不同任务(tasks)中划分数据流的方式。在 Storm 中有八种内置的数据流分组方式。
Reliability:可靠性。Storm 可以通过拓扑来确保每个发送的元组都能得到正确处理。通过跟踪由 Spout 发出的每个元组构成的元组树可以确定元组是否已经完成处理。每个拓扑都有一个“消息延时”参数,如果 Storm 在延时时间内没有检测到元组是否处理完成,就会将该元组标记为处理失败,并会在稍后重新发送该元组。
并行度和流分组

并行度:Worker->Executor->Task。默认情况下,一个 Executor 对应一个 Task。因此,task 越多,并行度越高。
流分组:Task 与 Task 之间的数据流向关系。一个拓扑中,可以有很多 Spout + Bolt,那么 bolt1 的数据流向 bolt2 的时候的一个策略就是流分组。
流分组策略:
Shuffle Grouping:随机发射,负载均衡
Fields Grouping:根据一个或多个字段进行分组,如果那一个或者多个 fields 如果值完全相同的话,那么这些 tuple,就会发送给下游 bolt 的其中固定的一个 task。
你发射的每条数据是一个 tuple,每个 tuple 中有多个 field 作为字段。
比如 tuple 3 个字段,name,age,salary
{"name": "tom", "age": 25, "salary": 10000} -> tuple -> 3个 field,name,age,salary
All Grouping:广播分发
Global Grouping:选择其中一个 task 最小的 id 分发
None Grouping:与 shuffle 类似
Direct Grouping:指定一个 task id 发送
Local or Shuffle Grouping: 只在本地同一个进程(worker)中国随机分发
网友评论