Storm教程

Storm 核心概念

Apache Storm 从一端读取​​实时数据的原始流,并将其传递给一系列小型处理单元,并在另一端输出处理后的/有用的信息。
下图描述了 Apache Storm 的核心概念。
核心概念
现在让我们仔细看看 Apache Storm 的组件-
组件 说明
Tuple Tuple 是 Storm 中的主要数据结构。它是一个有序元素的列表。默认情况下,元组支持所有数据类型。通常,它被建模为一组逗号分隔值并传递给 Storm 集群。
Stream Stream 是一个无序的元组序列。
Spouts 流的来源。通常,Storm 接受来自 Twitter Streaming API、Apache Kafka 队列、Kestrel 队列等原始数据源的输入数据。否则您可以编写 spout 从数据源读取数据。 "ISpout"是实现 spout 的核心接口。一些具体的接口有IRichSpout、BaseRichSpout、KafkaSpout等
Bolts 螺栓是逻辑处理单元。 Spouts 将数据传递给 bolts 和 bolts 进程并产生新的输出流。 Bolt 可以执行过滤、聚合、加入、与数据源和数据库交互的操作。 Bolt 接收数据并发送到一个或多个 Bolt。 "IBolt"是实现bolts的核心接口,常用的接口有IRichBolt、IBasicBolt等
让我们以"Twitter 分析"的实时示例为例,看看如何在 Apache Storm 中对其进行建模。下图描述了其结构。
Twitter 分析
"Twitter 分析"的输入来自 Twitter Streaming API。Spout 将使用 Twitter Streaming API 读取用户的推文,并以元组流的形式输出。来自 Spout 的单个元组将有一个 Twitter 用户名和一个单个推文作为逗号分隔值。然后,这个元组流将转发到 Bolt,Bolt 会将推文拆分为单个单词,计算字数,并将信息持久化到配置的数据源。现在,我们可以轻松获得查询数据源的结果。

Topology

Spouts 和 bolts 连接在一起并形成一个拓扑。实时应用逻辑在 Storm 拓扑中指定。简单来说,拓扑是一个有向图,其中顶点是计算,边是数据流。
一个简单的拓扑从 spouts 开始。 Spout 将数据发送到一个或多个 Bolt。 Bolt 表示拓扑中具有最小处理逻辑的节点,并且可以将一个 bolt 的输出作为输入发送到另一个 bolt 中。
Storm 保持拓扑始终运行,直到您终止拓扑。 Apache Storm 的主要工作是运行拓扑,并将在给定时间运行任意数量的拓扑。

Tasks

现在您对 spouts 和 bolts 有了基本的了解。它们是拓扑的最小逻辑单元,拓扑是使用单个 spout 和一组 bolt 构建的。它们应该以特定顺序正确执行,以便拓扑成功运行。 Storm 对每一个 spout 和 bolt 的执行称为"任务"。简单来说,一个任务要么是一个 spout 的执行,要么是一个 bolt。在给定的时间,每个 spout 和 bolt 可以有多个实例运行多个单独的线程。

Workers

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

Stream Grouping

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

Shuffle Grouping

在 shuffle 分组中,相同数量的元组随机分布在所有执行 bolts 的 worker 中。下图描述了结构。
随机分组

Field Grouping

元组中具有相同值的字段被分组在一起,其余的元组保留在外面。然后,具有相同字段值的元组被转发给执行螺栓的同一个工人。例如,如果流按字段"word"分组,则具有相同字符串"Hello"的元组将移动到同一个 worker。下图显示了字段分组的工作原理。
字段分组

Global Grouping

所有流都可以分组并转发到一个螺栓。此分组将源的所有实例生成的元组发送到单个目标实例(具体而言,选择 ID 最低的工作线程)。
全局分组

All Grouping

所有分组将每个元组的单个副本发送到接收螺栓的所有实例。这种分组用于向螺栓发送信号。所有分组对于连接操作都很有用。
所有分组
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4