Storm简介
Storm简介
是Twitter开源的一个分布式实时计算系统,主要用于数据的实时分析,持续计算,分布式RPC等等。具体简介见google,话不多说
Storm特点:
- 低延迟:实时计算系统必须要有的
- 高性能:可以使用普通的服务器建立环境,节约成本。
- 分布式:适合于分布式计算,适合大数据实时分析,群狼战猛虎
- 可扩展:就是说可以增加机器等了,支持水平扩展
- 容错:分布式系统的通用问题,一个节点挂了也不会影响到整体的计算,并且在节点重启的时候,能够投入到生产环境,自动平衡任务
- 可靠性:可靠的消息处理。storm保证每个消息至少能得到一次完整处理,任务失败时,他会负责从消息源重试消息。
- 快速:系统的设计保证了消息能得到快速的处理。使用ZeroMQ作为其底层消息队列。
- 本地模式:storm有一个“本地模式”,方便测试,快速开发
- 可以用很多种语言进行开发。
storm主要架构
hadoop和storm结构简单对比
/ | hadoop | storm |
---|---|---|
系统角色 | JobTracker | Nimbus |
系统角色 | TaskTracker | Supervisor |
系统角色 | Child | Worker |
应用名称 | Job | Topology |
组件接口 | Mapper/Reducer | Spout/Bolt |
系统架构
- Nimbus主节点
主节点通常运行一个后台程序-Nimbus, 负责资源分配和任务调度。这个很类似于Hadoop中的Job Tracker。 Supervisor工作节点:
工作节点同样会运行一个后台程序-Supervisor,用于接收工作指派的任务, 管理所有Worker,一个Supervisor节点中包含多个Worker进程。Zookeeper
Zookeeper是完成Supervisor和Nimbus之间协调的服务。而应用程序实现是的逻辑则被封装到Storm中的toplogy.toplogy则是一组有spouts(数据源)和Bolts(数据操作)通过Stream Groupings 进行连接的图,例如如图,下面是对属于进行更深刻的解析
Topology(拓扑)
上面这一整张图在一起就是一个Topology, 因为各个组件间的消息流动形成逻辑上的一个拓扑结构,一个Topology是spouts
和bolts组成的图,通过stream groupings 将途中的spouts和bolts连接起来,如下图
Spout:
数据源(Spout)就是上面的水龙头,是数据流的来源。根据需求的不同,Spout 既可以定义为可靠的数据源,也可以定义为不可靠的数据源。一个可靠的 Spout 能够在它发送的元组处理失败时重新发送该元组,以确保所有的元组都能得到正确的处理;相对应的,不可靠的 Spout 就不会在元组发送之后对元组进行任何其他的处理。一个 Spout 可以发送多个数据流。
Bolt
用于处理数据的,将数据流拿过来处理后,再次丢给下一个bolt或者直接结束。如果需求比较复杂,则需要使用多个 Bolt并且多个步骤完成
Stream Grouping
这里先简单介绍一下,具体的之后会有详解
- Shuffle Grouping: 随机分组, 随机派发stream里面的tuple, 保证每个bolt接收到的tuple数目相同。轮询,平均分配
- Fields Grouping:按字段分组, 比如按userid来分组, 具有同样userid的tuple会被分到相同的Bolts, 而不同的userid则会被分配到不同的Bolts。
- All Grouping: 广播发送, 对于每一个tuple, 所有的Bolts都会收到。
- Global Grouping: 全局分组, 这个tuple被分配到storm中的一个bolt的其中一个task。再具体一点就是分配给id值最低的那个task。
- Non Grouping: 不分组, 这个分组的意思是说stream不关心到底谁会收到它的tuple。目前这种分组和Shuffle grouping是一样的效果,不平均分配。
-
Direct Grouping: 直接分组 略!
其中前三种比较常见。这里并不细讲
操作模式
- 本地模式
Storm 拓扑结构运行在本地计算机的单一 JVM 进程上, 一般用于开发和调试,类似于hadoop本地调试一样的 - 集群模式:
Storm 群提交拓扑,它通常由许多机器共同合作完成