Storm

Storm基础(一)概念

2017-04-02  本文已影响63人  quiterr

原文链接:http://storm.apache.org/releases/1.0.3/Concepts.html

本人原创翻译,转载请注明出处

之前翻译过Storm的Tutorial:http://www.jianshu.com/p/ea078dbd9958 所以这次不会再一字一句等翻译。

这篇文章列出了Storm的主要概念和相关的资源链接(可以获取更多信息)。讨论的概念包括:

  1. Topologies
  2. Streams
  3. Spouts
  4. Bolts
  5. Stream groupings
  6. Reliability
  7. Tasks
  8. Workers

Topologies

应用程序的逻辑被打包进了一个Storm topology。spouts和bolts以stream groupings相连,构成的图就是topology。

Streams

stream是Storm的核心抽象。stream是tuple的无限序列,tuple以分布式的方式并行的被创建和处理。默认情况下,tuples可以包含integers, longs, shorts, bytes, strings, doubles, floats, booleans, and byte arrays。你可以定义serializers,这样自定义的类型也可以在tuples中直接使用。

Spouts

spout是streams的源。spouts可以是可靠的,也可以是不可靠的。如果tuple处理失败,可靠的spout会重传它,不可靠的spout会在emit tuple后立即“忘掉”它。

Bolts

bolts是topology里真正负责处理tuple的单元。

Stream groupings

定义topology的一部分就是要定义bolt该接收哪个stream作为输入,Stream groupings就是用来做这件事。有8种内建的Stream groupings,你也可以实现CustomStreamGrouping 接口来自定义一个Stream groupings。

  1. Shuffle grouping: tuples随机分配给bolts,每个bolt收到的tuple数量相同。
  2. Fields grouping: stream被grouping中指定的字段分割。举个例子,如果一个stream以"user-id" 字段分组,"user-id" 相同的tuple将总是分配到相同的任务,"user-id" 不同的tuple可能分配到不同的任务。
  3. Partial Key grouping: 和Fields grouping一样以字段来分组,但是在下游的bolts之间做了负载均衡,当输入数据不均衡的时候可以更好的利用系统资源。这篇论文说明了它是如何工作的以及它的优点。
  4. All grouping: 流将被复制到所有bolts,使用这种分组的时候要特别小心。
  5. Global grouping: 整个流都将被分配到唯一一个bolt任务,通常是id最小的那个。
  6. None grouping:这种分组方式意味着你不关心如何分组。目前,这种方式等价于shuffle groupings。
  7. Direct grouping: 这是一种特殊的分组,由tuple的生产者来决定谁来消费这个tuple。Direct groupings只能搭配direct streams使用,也就是说tuple必须通过emitDirect方法发出。bolt可以通过TopologyContext 或 跟踪emit的返回值(返回值就是接收tuple的任务ids)来得到消费者的任务ids。
  8. Local or shuffle grouping: 如果目的bolt在相同的worker进程中有一个或多个任务,tuples就会被随机发送给这些同进程的任务。否则就按普通shuffle grouping处理。

Reliability

这部分专门翻译了一篇文章:http://www.jianshu.com/p/a51167bab444

Tasks

每个spout和bolt都以集群中任务的形式执行。每个任务对应一个线程,setSpout和setBolt用来设置任务的并发度。

Workers

topology在一个或多个worker进程中执行。每个worker进程是一个物理JVM,负责执行topology中所有任务的一个子集。举个例子,如果topology总的并发是300,worker数时50,那么每个worker执行6个任务。

上一篇 下一篇

猜你喜欢

热点阅读