- Apache Storm 教程
- Apache Storm - 首页
- Apache Storm - 简介
- Apache Storm - 核心概念
- Apache Storm - 集群架构
- Apache Storm - 工作流程
- Storm - 分布式消息系统
- Apache Storm - 安装
- Apache Storm - 工作示例
- Apache Storm - Trident
- 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 集群。 |
流 (Stream) | 流是元组的无序序列。 |
喷口 (Spouts) | 流的源头。通常,Storm 从原始数据源(如 Twitter Streaming API、Apache Kafka 队列、Kestrel 队列等)接受输入数据。否则,您可以编写喷口从数据源读取数据。“ISpout”是实现喷口的核心接口。一些特定的接口是 IRichSpout、BaseRichSpout、KafkaSpout 等。 |
螺栓 (Bolts) | 螺栓是逻辑处理单元。喷口将数据传递给螺栓,螺栓处理并生成新的输出流。螺栓可以执行过滤、聚合、连接、与数据源和数据库交互的操作。螺栓接收数据并向一个或多个螺栓发出数据。“IBolt”是实现螺栓的核心接口。一些常见的接口是 IRichBolt、IBasicBolt 等。 |
让我们以“Twitter 分析”的实时示例为例,看看它如何在 Apache Storm 中建模。下图描绘了结构。
“Twitter 分析”的输入来自 Twitter Streaming API。喷口将使用 Twitter Streaming API 读取用户的推文,并将其输出为元组流。来自喷口的单个元组将包含 Twitter 用户名和单个推文作为逗号分隔的值。然后,此元组流将转发到螺栓,螺栓将推文拆分为单个单词,计算单词计数,并将信息持久化到已配置的数据源。现在,我们可以通过查询数据源轻松获取结果。
拓扑 (Topology)
喷口和螺栓连接在一起,形成一个拓扑。实时应用程序逻辑在 Storm 拓扑中指定。简单来说,拓扑是一个有向图,其中顶点是计算,边是数据流。
一个简单的拓扑从喷口开始。喷口将数据发送到一个或多个螺栓。螺栓表示拓扑中具有最小处理逻辑的节点,螺栓的输出可以作为输入发送到另一个螺栓。
Storm 保持拓扑始终运行,直到您终止拓扑。Apache Storm 的主要工作是运行拓扑,并且可以在给定时间运行任意数量的拓扑。
任务 (Tasks)
现在您对喷口和螺栓有了基本的了解。它们是拓扑中最小的逻辑单元,并且可以使用单个喷口和螺栓数组构建拓扑。为了使拓扑成功运行,它们应该按照特定的顺序正确执行。Storm 对每个喷口和螺栓的执行称为“任务”。简单来说,任务要么是喷口的执行,要么是螺栓的执行。在给定时间,每个喷口和螺栓可以有多个实例在多个单独的线程中运行。
工作节点 (Workers)
拓扑以分布式方式在多个工作节点上运行。Storm 将任务均匀地分布在所有工作节点上。工作节点的作用是侦听作业并在新作业到达时启动或停止进程。
流分组 (Stream Grouping)
数据流从喷口流向螺栓,或从一个螺栓流向另一个螺栓。流分组控制元组如何在拓扑中路由,并帮助我们理解元组在拓扑中的流动。如下所述,有四种内置分组。
随机分组 (Shuffle Grouping)
在随机分组中,数量相等的元组随机分布在执行螺栓的所有工作节点上。下图描绘了结构。
字段分组 (Field Grouping)
元组中具有相同值的字段被分组在一起,其余元组保持在外部。然后,具有相同字段值的元组被发送到执行螺栓的同一工作节点。例如,如果流按字段“word”分组,则具有相同字符串“Hello”的元组将移动到同一工作节点。下图显示了字段分组的工作原理。
全局分组 (Global Grouping)
所有流都可以分组并转发到一个螺栓。此分组将源的所有实例生成的元组发送到单个目标实例(具体来说,选择 ID 最低的工作节点)。
全部分组 (All Grouping)
全部分组将每个元组的单个副本发送到接收螺栓的所有实例。这种分组用于向螺栓发送信号。全部分组对于连接操作很有用。