storm翻译(2):Concepts

Concepts:概念

原文:http://storm.apache.org/documentation/Concepts.html html

这个列表展现了storm中的主要概念和相关详细信息。这些概念是:java

  1. Topologies数据库

  2. Streamsapache

  3. Spoutsapi

  4. Bolts安全

  5. Stream groupings异步

  6. Reliability分布式

  7. Tasksui

  8. Worksspa

     

Topologies

实时处理逻辑被包含在一个storm topology中。一个storm topology MapReduce job类似。其中一个关键不一样是MapReduce job最终会中止,可是topology会一直运行(除非你kill它)。一个topology是一系列经过数据流链接起来的spoutbolt。下面将描述这些概念。

 

更多资源:

 

Streams

Streamstorm的核心抽象。Stream是经过分布式方式平行创造出的一个无限制的tuples队列。Stream要为tuples中的fields(属性)命名。在默认状况下,tuples中能够有integerslongsshortsbytesStringsdoublesfloatsbooleansbyte arrays。固然,你也能够在tuples中使用自定义序列化(serializers)类型。

每个Stream在声明时都会给一个id。由于单一流的spoutsbolts很是常见,OutputFieldsDeclarer有很是方便的方法声明一个没有指定id的流。在这种状况下,这个流被给定了一个默认id:“default

 

更多资源:

Spouts

Spoutstorm中流的源头。一般的spouts从外部数据源中读取数据而后向topology中发射。Spout分为可重发(reliable)和非可重发(unreliable)两种。一个可重发的spout会在storm处理失败后再次发送处理失败的tuple,而非可重发的spout在发射完一个tuple以后就再也不关注后续处理。

Spout能够发射多条Stream。可使用OutputFieldsDeclarer中的declareStream方法声明多个Stream,并在使用时经过SpoutOutputCollectoremit方法发射数据

Spout中最主要的方法是nextTuplenextTuple能够向topology发射数据或在没有数据要发射的时候返回。在spout实现类中没有必要给nextTuple加锁,由于storm会在同一个线程中调用全部的spout方法。

其余两个重要的方法是ackfail。当storm发现从spout发射出的tuple在整个topology过程当中处理成功或失败时,会调用响应的ackfail方法。只有在可重发的spout中才会调用ackfail方法。

 

更多资源:

Bolts

Topologies中的全部处理过程都是在bolts中完成的。Bolts经过过滤(filtering)、方法(function)、聚合(aggregation)、链接(joins)、访问数据库等方式作任意数据操做。

Bolts能够作简单的Stream转换。可是作复杂的Stream转换须要在更多的bolt中执行多个步骤。举例来讲:讲一个tweet Stream转换为一个热门图片Stream至少须要两个步骤:一个bolt统计每一个图片的关注者(retweets),另外一个bolt算出前几名的图片(你能够用更加可拓展的方式处理这个数据Stream转换,好比使用3bolt

bolts能够发射多条Stream。可使用OutputFieldsDeclarer中的declareStream方法声明多个Stream,并在使用时经过SpoutOutputCollectoremit方法发射数据

当你在bolt中声明了一个输入Stream,就意味着bolt从另外一个组件(component)上订阅了一个特定的Stream。若是你但愿订阅另外一个组件上的全部流,须要分别声明订阅。InputDeclarer提供了一个经过默认Stream id订阅流的方法。好比declarer.shuffleGrouping("1")表示你从组件1上订阅了默认流,至关于declarer.shuffleGrouping("1", DEFAULT_STREAM_ID).

Bolt中的主方法是execute,每从输入Stream中读取数据时会调用它。Bolts经过OutputCollector发射新的tuplesBolts须要在OutputCollector发射每一个tuple完成以后调用ack方法,以便于storm知道tuple何时完成(能够最终确认原始spout发射的tuple是处理成功的)。一般状况下,tuple每处理一个输入tuple,会在输入tuple的基础上发射0或多个tuples,而后ack输入tuplestorm提供了一个接口IBasicBolt能够自动的调用ack方法。

bolts中启动多个线程进行异步处理数据是一个完美的方法。OutputCollector是线程安全的,而且能够随时调用。

 

更多资料:

Stream groupingssteam 组操做)

定义在topology中,每一个bolt选择哪一个Stream做为输入。一个Stream grouping定义了Stream在多个bolt’s tasks中如何分配。

storm中有7种内置的Stream grouping方式,你能够经过实现CustomStreamGrouping接口来建立本身的Stream grouping

  1. Shuffle grouping: Tuples被随机分配到每个bolt’s task,以便于每个bolt’s task得到相同数量的tuples

  2. Fields grouping: Stream被根据属性(fields)进行分组。举例:若是一个Stream根据“user-id”分组,具备相同“user-id”属性的tuples会被发往同一个bolt’s task,具备不一样“user-id”的tuples有可能发往不一样的bolt’s task

  3. All groupingStream会被重复的发往每个bolt’s task,使用这个方式须要慎重。

  4. Global grouping输入流会发往bolt’s tasks中的一个。具体来讲,会发往最小idtask

  5. None grouping:这种方式表示你并不关心Stream如何分组。当前版本中,它的效果等同于shuffle groupingEventually though, Storm will push down bolts with none groupings to execute in the same thread as the bolt or spout they subscribe from (when possible).

  6. Direct grouping:这是一个特殊的grouping。这种方式可让tuple的生产者决定消费者中哪个task可以接收这个tuple。只有当一个Stream声明是一个direct stream时,Direct grouping方式才能生效。必须使用[emitDirect](/apidocs/backtype/storm/task/OutputCollector.html#emitDirect(int, int, java.util.List)方法,才能将tuple发送到一个direct Stream中。一个bolt能够经过两种方式获取到消费者的taskid,一种是使用TopologyContext获取,另外一种是经过跟踪OutputCollector中的emit方法的返回值(当tuples发送以后,会返回task ids

  7. Local or shuffle grouping:若是目标bolt在一个worker进程中有多个或一个taskstuples会随机发送到进程内的tasks。不然,这种方式与shuffle grouping相同。

     

相关资料

TopologyBuilder:用来建立topology的类

InputDeclarer:这个对象在调用TopologyBuilder类的setBolt方法时返回,用来声明一个bolt的输入Stream和这些Stream用什么样的grouping方式。

CoordinatedBolt:这个bolt用于分布式RPC topologies,并大量使用direct Streamdirect groupings

Reliability

Storm确保没有个spout发出的tuple将会被topology完整的处理。经过创建一颗树来跟踪spout发出的每个tuple,并且决定tuple有多长时间处理完毕。每个topology有一个“message timeout”配置这个时间。若是storm发现tuple在这个时间内没有完成这棵树,那么这个tuple就是fail,并从新处理这个tuple

为了很好的利用storm的可靠性机制,你必须告知storm何时在监控树上建立了一个新的路径,并在何时完成了一个tuple的处理。这些在bolts使用OutputCollector发送完tuple时要作的。在肯定完成了emit方法以后,必须调用ack方法来告知处理了这个tuple

更多信息在Guaranteeing message processing.

Tasks

每个spoutbolt在集群中运行多个tasks。每个task至关于程序中的一个线程,Stream grouping定义了如何将tuples从一个task集合到另外一个task集合。你能够为每个spoutbolt在类中TopologyBuildersetSpoutsetBolt方法设置平行度(parallelism)。

Workers

Topologies执行一个或多个worker进程。每一个worker进程是一个运行task子集的物理虚拟机。举例:若是一个topology一共有300tasks50workers,那么每个worker执行6tasksStorm尝试将tasks平均的分配到每个worker

相关资料:

Config.TOPOLOGY_WORKERS:执行topologyworker数量

相关文章
相关标签/搜索