- Apache Storm 教程
- Apache Storm - 主页
- Apache Storm - 简介
- Apache Storm - 核心概念
- Apache Storm - 集群架构
- Apache Storm - 工作流程
- Storm - 分布式消息系统
- Apache Storm - 安装
- Apache Storm - 工作示例
- Apache Storm - 三叉戟
- Twitter 中的 Apache Storm
- 雅虎中的Apache Storm!金融
- Apache Storm - 应用程序
- Apache Storm 有用资源
- Apache Storm - 快速指南
- Apache Storm - 有用的资源
- Apache Storm - 讨论
Apache Storm - 核心概念
Apache Storm 从一端读取原始实时数据流,并将其传递给一系列小型处理单元,并在另一端输出已处理/有用的信息。
下图描述了 Apache Storm 的核心概念。
现在让我们仔细看看 Apache Storm 的组件 -
成分 | 描述 |
---|---|
元组 | Tuple是Storm中的主要数据结构。它是一个有序元素的列表。默认情况下,元组支持所有数据类型。通常,它被建模为一组逗号分隔值并传递到 Storm 集群。 |
溪流 | 流是无序的元组序列。 |
喷嘴 | 流的来源。一般来说,Storm 接受来自 Twitter Streaming API、Apache Kafka 队列、Kestrel 队列等原始数据源的输入数据。否则,您可以编写 spouts 从数据源读取数据。“ISpout”是实现spouts的核心接口。具体的接口有IRichSpout、BaseRichSpout、KafkaSpout等。 |
螺栓 | Bolt 是逻辑处理单元。Spouts 将数据传递给 Bolt,然后 Bolt 进行处理并生成新的输出流。Bolt 可以执行过滤、聚合、连接、与数据源和数据库交互的操作。Bolt 接收数据并向一个或多个 Bolt 发送数据。“IBolt”是实现 Bolt 的核心接口。一些常见的接口有 IRichBolt、IBasicBolt 等。 |
让我们以“Twitter 分析”为例,看看如何在 Apache Storm 中对其进行建模。下图描述了该结构。
“Twitter 分析”的输入来自 Twitter Streaming API。Spout 将使用 Twitter Streaming API 读取用户的推文并以元组流的形式输出。来自 spout 的单个元组将具有 Twitter 用户名和单个推文作为逗号分隔值。然后,这组元组将被转发到 Bolt,Bolt 会将推文拆分为单个单词,计算单词数,并将信息保存到配置的数据源。现在,我们可以通过查询数据源轻松获得结果。
拓扑结构
喷嘴和螺栓连接在一起并形成拓扑。实时应用程序逻辑在 Storm 拓扑内部指定。简而言之,拓扑是一个有向图,其中顶点是计算,边是数据流。
一个简单的拓扑从 Spout 开始。Spout 将数据发送到一个或多个 Bolt。Bolt 表示拓扑中具有最小处理逻辑的节点,并且一个 Bolt 的输出可以作为输入发送到另一个 Bolt 中。
Storm 会保持拓扑始终运行,直到您终止拓扑。Apache Storm 的主要工作是运行拓扑,并且会在给定时间运行任意数量的拓扑。
任务
现在您对喷嘴和螺栓有了基本的了解。它们是拓扑的最小逻辑单元,拓扑是使用单个 spout 和螺栓阵列构建的。它们应该以特定顺序正确执行,以便拓扑成功运行。Storm 对每个 spout 和 Bolt 的执行称为“任务”。简单来说,任务要么是执行 spout,要么是执行 Bolt。在给定时间,每个 Spout 和 Bolt 可以有多个实例在多个单独的线程中运行。
工人
拓扑以分布式方式在多个工作节点上运行。Storm 将任务均匀地分布在所有工作节点上。工作节点的作用是监听作业并在新作业到达时启动或停止进程。
码流分组
数据流从喷口流向螺栓,或者从一个螺栓流向另一个螺栓。流分组控制元组在拓扑中的路由方式,并帮助我们理解元组在拓扑中的流动。有四个内置分组,如下所述。
随机分组
在随机分组中,相等数量的元组随机分布在执行 Bolt 的所有工作人员中。下图描述了该结构。
字段分组
元组中具有相同值的字段被分组在一起,其余元组保留在外面。然后,具有相同字段值的元组被转发给执行 Bolt 的同一工作人员。例如,如果流按字段“word”分组,则具有相同字符串“Hello”的元组将移动到同一个worker。下图显示了字段分组的工作原理。
全球分组
所有流都可以分组并转发到一个 Bolt。此分组将源的所有实例生成的元组发送到单个目标实例(具体来说,选择 ID 最低的工作线程)。
所有分组
所有分组将每个元组的单个副本发送到接收 Bolt 的所有实例。这种分组用于向螺栓发送信号。所有分组对于连接操作都很有用。