📜  Apache Storm-核心概念(1)

📅  最后修改于: 2023-12-03 14:39:17.450000             🧑  作者: Mango

Apache Storm-核心概念

Apache Storm是一种开源的分布式实时计算引擎,它主要用于处理实时流数据。在本文中,我们将介绍Storm的核心概念,从而帮助程序员更好地理解和使用Storm。

拓扑 (Topology)

拓扑是Storm计算的主要单元。它是由一组Spout和Bolt组成的数据处理网络。在拓扑中,Spout负责从数据源获取数据,而Bolt则负责对数据进行转换、过滤、聚合等操作。

拓扑中的各个组件通过输出流(Output Stream)和输入流(Input Stream)相互连接。Output Stream表示一个Bolt输出的数据流,而Input Stream则表示一个Bolt接收的数据流。一个Bolt可以同时有多个输入流和输出流。

在拓扑中,Spout和Bolt都有一个唯一的ID,可以通过这个ID来访问它们。拓扑中的组件可以通过调用它们的ID来构建数据流。例如,一个Bolt可以通过调用另一个Bolt的ID来接收其输出流。

Spout

Spout是Storm中的数据源组件。它可以从消息队列、数据库、网络等数据源中读取数据,并转换为Storm中的Tuple对象。Spout可以产生无限的数据流,并将数据流发送给拓扑中的下一个组件(一般是Bolt)。

在实际应用中,Spout需要实现接口IRichSpout。这个接口定义了Spout的生命周期方法,包括open()、nextTuple()、ack()、fail()和close()等。其中,nextTuple()是处理数据的主要方法,它会不断产生Tuple并发送给Bolt。

Bolt

Bolt是Storm中的数据处理组件。它可以对数据流进行转换、过滤、聚合等操作,并将处理后的数据流发送给拓扑中的下一个组件。

在实际应用中,Bolt需要实现接口IRichBolt。这个接口定义了Bolt的生命周期方法,包括prepare()、execute()、cleanup()、declareOutputFields()等。其中,execute()是处理数据的主要方法,它会接收来自上一个组件的Tuple,并将处理后的Tuple发送给下一个组件。

Tuple

Tuple是Storm中的数据对象。它由一组字段组成,可以进行序列化和反序列化。Tuple在拓扑中流动,携带着数据和元数据。

Tuple中的每个字段都有一个名称和一个值。字段的值可以是任意类型的对象,例如字符串、整数、列表等。Tuple的字段可以通过名称或索引访问。

Stream Grouping

Stream Grouping定义了如何将一个Bolt的输出流分发给拓扑中的下一个组件。Storm提供了多种Stream Grouping策略,包括shuffle、fields、all、global、localOrShuffle等。每种策略都有不同的分发规则,可以根据实际需求选择。

Task

Task是Storm中的执行单元。一个Task包含了一个或多个并发执行的实例。在拓扑中,每个Spout和Bolt都会被分配一个或多个Task实例。Task实例的数量可以通过配置文件进行设置。

Worker

Worker是Storm中的执行进程。每个Worker运行在一个独立的JVM进程中,负责执行多个Task实例。在拓扑中,每个Worker都会分配一定数量的Spout和Bolt实例。

Nimbus

Nimbus是Storm中的主节点。它负责接收拓扑提交请求,并将拓扑分配给Worker执行。Nimbus还负责监控Storm集群的状态,管理拓扑的运行和调度。

Supervisor

Supervisor是Storm中的工作进程。它负责启动、停止和监控Worker进程。一个Supervisor通常会在一台物理机上运行多个Worker进程。

参考资料
  1. Apache Storm官方网站: http://storm.apache.org/
  2. "Mastering Apache Storm" by Ankit Jain and Anand Sharma