📜  Apache Storm-核心概念

📅  最后修改于: 2020-12-02 05:54:27             🧑  作者: Mango


Apache Storm从一端读取实时数据的原始流,并将其通过一系列小型处理单元,然后在另一端输出已处理的/有用的信息。

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

核心理念

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

Components Description
Tuple Tuple is the main data structure in Storm. It is a list of ordered elements. By default, a Tuple supports all data types. Generally, it is modelled as a set of comma separated values and passed to a Storm cluster.
Stream Stream is an unordered sequence of tuples.
Spouts Source of stream. Generally, Storm accepts input data from raw data sources like Twitter Streaming API, Apache Kafka queue, Kestrel queue, etc. Otherwise you can write spouts to read data from datasources. “ISpout” is the core interface for implementing spouts. Some of the specific interfaces are IRichSpout, BaseRichSpout, KafkaSpout, etc.
Bolts Bolts are logical processing units. Spouts pass data to bolts and bolts process and produce a new output stream. Bolts can perform the operations of filtering, aggregation, joining, interacting with data sources and databases. Bolt receives data and emits to one or more bolts. “IBolt” is the core interface for implementing bolts. Some of the common interfaces are IRichBolt, IBasicBolt, etc.

让我们以“ Twitter分析”的实时示例为例,看看如何在Apache Storm中对其进行建模。下图描述了该结构。

Twitter分析

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

拓扑结构

喷嘴和螺栓连接在一起,形成一个拓扑。在Storm拓扑中指定了实时应用程序逻辑。用简单的话来说,拓扑是有向图,其中顶点是计算,边是数据流。

一个简单的拓扑结构从喷口开始。喷口将数据发射到一个或多个螺栓。螺栓表示拓扑中具有最小处理逻辑的节点,螺栓的输出可以作为输入发射到另一个螺栓中。

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

任务

现在,您对喷口和螺栓有了基本的了解。它们是拓扑的最小逻辑单元,并且使用单个喷口和螺栓阵列构建拓扑。应该以特定顺序正确执行它们,以使拓扑成功运行。 Storm将每个喷口和螺栓的执行称为“任务”。简而言之,一项任务是执行喷口或螺栓。在给定的时间,每个喷嘴和螺栓可以在多个单独的线程中运行多个实例。

工人

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

流分组

数据流从喷嘴流向螺栓,或从一个螺栓流向另一螺栓。流分组控制元组在拓扑中的路由方式,并帮助我们了解元组在拓扑中的流动。分为以下四个内置分组。

随机分组

在随机分组中,相等数量的元组在执行螺栓的所有工人中随机分布。下图描述了该结构。

随机分组

现场分组

元组中具有相同值的字段被分组在一起,其余元组保留在外部。然后,将具有相同字段值的元组转发给执行螺栓的同一工人。例如,如果流按“单词”字段分组,则具有相同字符串“ Hello”的元组将移至同一工作程序。下图显示了字段分组的工作方式。

现场分组

全球分组

所有流都可以分组并转发到一个螺栓。此分组将由源的所有实例生成的元组发送到单个目标实例(特别是选择ID最低的工作程序)。

全球分组

所有分组

所有分组将每个元组的单个副本发送到接收螺栓的所有实例。这种分组用于将信号发送到螺栓。所有分组对于联接操作都是有用的。

所有分组