Apache Storm - 核心概念

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

下图描绘了Apache Storm的核心概念.

核心概念

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

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

让我们看一下"Twitter分析"的实时示例,看看它如何在Apache Storm中建模.下图描绘了结构.

Twitter分析

"Twitter分析"的输入来自Twitter Streaming API.Spout将阅读推文用户使用Twitter Streaming API并输出为元组流.来自spout的单个元组将具有twitter用户名和单个tweet作为逗号分隔值.然后,这个元组的流将被转发到Bolt,Bolt会将推文分成单个字,计算字数,并将信息保存到配置的数据源.现在,我们可以通过查询数据源轻松获得结果.

拓扑

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

一个简单的拓扑从spouts开始. Spout将数据发送到一个或多个螺栓. Bolt表示拓扑中具有最小处理逻辑的节点,并且螺栓的输出可以作为输入发送到另一个螺栓中.

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

任务

现在你有一个基本的想法在喷口和螺栓上.它们是拓扑中最小的逻辑单元,并且使用单个喷口和螺栓阵列构建拓扑.应按特定顺序正确执行它们,以使拓扑成功运行. Storm对每个喷口和螺栓的执行称为"任务".简单来说,任务是执行喷口或螺栓.在给定的时间,每个spout和bolt可以有多个实例在多个单独的线程中运行.

Workers

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

流分组

数据流来自喷嘴到螺栓或从一个螺栓到另一个螺栓.流分组控制元组在拓扑中的路由方式,并帮助我们理解拓扑中的元组流.有四个内置分组,如下所述.

随机分组

在随机分组中,相同数量的元组随机分布在所有分组中工人执行螺栓.下图描绘了结构.

随机分组

字段分组

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

字段分组

全球分组

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

全局分组

所有分组

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

All Grouping