Storm 核心概念

Apache Storm从一端读取​​实时数据的原始流,并通过一系列小处理单元传递它,并在另一端输出处理/有用的信息。

下图描述了Apache Storm的核心概念。

核心概念

现在让我们仔细看看Apache Storm的组件

组件 描述
Tuple 元组是Storm中的主要数据结构。它是有序元素的列表。默认情况下,Tuple支持所有数据类型。通常,它被建模为一组逗号分隔值并传递给Storm集群。
Stream Stream是一个无序的元组序列。
Spouts 流的来源。通常,Storm接受来自原始数据源(如Twitter Streaming API,Apache Kafka队列,Kestrel队列等)的输入数据。否则,您可以编写spout来从数据源读取数据。“ISpout”是实现spouts的核心接口。一些特定的接口是IRichSpout,BaseRichSpout,KafkaSpout等。
Bolts Bolts是逻辑处理单元。Spouts将数据传递给Bolts和Bolts进程并生成新的输出流。Bolts可以执行过滤,聚合,连接,与数据源和数据库交互的操作。Bolt接收数据并发射到一个或多个Bolts。“IBolt”是实施Bolts的核心接口。一些常见的接口是IRichBolt,IBasicBolt等。

我们来看一个“Twitter分析”的实时示例,看看它如何在Apache Storm中建模。下图描述了结构。

Twitter分析

“Twitter分析”的输入来自Twitter Streaming API。Spout将使用Twitter Streaming API读取用户的推文,并将其输出为元组流。来自Spouts口的单个元组将具有twitter用户名和单个推文作为逗号分隔值。然后,这组元组将被转发给Bolt,Bolt将把tweet分成单独的单词,计算单词数量,并将信息保存到配置的数据源中。现在,我们可以通过查询数据源轻松获得结果。

 

拓扑

Spouts和Bolts连接在一起,形成拓扑结构。实时应用程序逻辑在Storm拓扑结构中指定。简而言之,拓扑是一个有向图,其顶点是计算,边是数据流。

一个简单的拓扑开始于Spouts。Spout将数据发送到一个或多个Bolts。Bolts表示拓扑中具有最小处理逻辑的节点,并且Bolts的输出可以作为输入发射到另一Bolts中。

Storm将始终运行拓扑,直到您终止拓扑。Apache Storm的主要工作是运行拓扑,并在给定的时间运行任意数量的拓扑。

 

任务

现在你对Spouts和Bolts有了一个基本的想法。它们是拓扑中最小的逻辑单元,拓扑结构是使用单个Spouts和一组Bolts构建的。它们应该以特定的顺序正确执行,以便拓扑成功运行。Storm提供的每个Spouts和Bolts的执行称为“任务”。简而言之,任务是执行Spouts或Bolts。在给定时间,每个Spouts和Bolts可以有多个实例在多个单独的线程中运行。

 

工人

拓扑在多个工作节点上以分布式方式运行。Storm将所有工作节点上的任务均匀分散。工作节点的角色是监听作业,并在新作业到达时启动或停止进程。

 

流分组

数据流从Spouts流向Bolts或从一个Bolts流向另一个Bolts。流分组控制如何在拓扑中路由元组,并帮助我们理解拓扑中的元组流。如下所述,有四个内置分组。

洗牌分组

在随机分组中,相同数量的元组随机分布在所有执行Bolts的工作人员中。下图描述了结构。

洗牌分组

字段分组

元组中相同值的字段被组合在一起,剩下的元组保留在外面。然后,将具有相同字段值的元组向前发送给执行Bolts的同一个工作人员。

例如,如果流按字段“字”分组,则具有相同字符串“Hello”的元组将移至同一个工作者。下图显示了Field Grouping的工作原理。

字段分组

全球分组

所有的流可以分组并转发给一个Bolts。此分组将源的所有实例生成的元组发送到单个目标实例(具体来说,选择具有最低ID的工作者)。

全球分组

所有分组

所有分组将每个元组的单个副本发送到接收Bolts的所有实例。这种分组被用于向Bolts发送信号。所有分组对于连接操作都很有用。

所有分组