Apache Storm简介

Apache Storm简介html

Storm是一个分布式的,可靠的,容错的数据流处理系统。Storm集群的输入流由一个被称做spout的组件管理,spout把数据传递给bolt, bolt要么把数据保存到某种存储器,要么把数据传递给其它的bolt。一个Storm集群就是在一连串的bolt之间转换spout传过来的数据。node

Storm组件apache

在Storm集群中,有两类节点:主节点master node和工做节点worker nodes。主节点运行Nimbus守护进程,这个守护进程负责在集群中分发代码,为工做节点分配任务,并监控故障。Supervisor守护进程做为拓扑的一部分运行在工做节点上。一个Storm拓扑结构在不一样的机器上运行着众多的工做节点。每一个工做节点都是topology中一个子集的实现。而Nimbus和Supervisor之间的协调则经过Zookeeper系统或者集群。
分布式

Zookeeper大数据

Zookeeper是完成Supervisor和Nimbus之间协调的服务。而应用程序实现实时的逻辑则被封装进Storm中的“topology”。topology则是一组由Spouts(数据源)和Bolts(数据操做)经过Stream Groupings进行链接的图。spa

Spout线程

Spout历来源处读取数据并放入topology。Spout分红可靠和不可靠两种;当Storm接收失败时,可靠的Spout会对tuple(元组,数据项组成的列表)进行重发;而不可靠的Spout不会考虑接收成功与否只发射一次。而Spout中最主要的方法就是nextTuple(),该方法会发射一个新的tuple到topology,若是没有新tuple发射则会简单的返回。orm

Bolthtm

Topology中全部的处理都由Bolt完成。Bolt从Spout中接收数据并进行处理,若是遇到复杂流的处理也可能将tuple发送给另外一个Bolt进行处理。而Bolt中最重要的方法是execute(),以新的tuple做为参数接收。无论是Spout仍是Bolt,若是将tuple发射成多个流,这些流均可以经过declareStream()来声明。进程

Stream Groupings

Stream Grouping定义了一个流在Bolt任务中如何被切分。

1. Shuffle grouping:随机分发tuple到Bolt的任务,保证每一个任务得到相等数量的tuple。

2.Fields grouping:根据指定字段分割数据流,并分组。例如,根据“user-id”字段,相同“user-id”的元组老是分发到同一个任务,不一样“user-id”的元组可能分发到不一样的任务。

3. Partial Key grouping:根据指定字段分割数据流,并分组。相似Fields grouping。

4.All grouping:tuple被复制到bolt的全部任务。这种类型须要谨慎使用。

5. Global grouping:所有流都分配到bolt的同一个任务。明确地说,是分配给ID最小的那个task。

6. None grouping:无需关心流是如何分组。目前,无分组等效于随机分组。但最终,Storm将把无分组的Bolts放到Bolts或Spouts订阅它们的同一线程去执行(若是可能)。

7. Direct grouping:这是一个特别的分组类型。元组生产者决定tuple由哪一个元组处理者任务接收。

8. Local or shuffle grouping:若是目标bolt有一个或多个任务在同一工做进程,tuples 会打乱这些进程内的任务。不然,这就像一个正常的 Shuffle grouping。

官网概念:http://storm.apache.org/releases/1.0.1/Concepts.html

推荐阅读:http://ifeve.com/getting-started-with-storm-1

 

欢迎扫码关注下面公众号,按期分享大数据与知识图谱相关知识点,读书思考。

相关文章
相关标签/搜索