原创翻译,如有错误,请指正。原文。
一个运行中的拓扑是由什么组成的:worker进程,executors和tasks。
Storm是按照下面3种主要的部分来区分Storm集群中一个实际运行的拓扑的:
- Worker进程
- Executors (线程)
- Tasks
下图简单的展示了它们的关系:
上图中的3段话依次如下:
- Storm集群中的其中1台机器可能运行着属于多个拓扑(可能为1个)的多个worker进程(可能为1个)。每个worker进程运行着特定的某个拓扑的executors。
- 1个或多个excutor可能运行于1个单独的worker进程,每1个executor从属于1个被worker process生成的线程中。每1个executor运行着相同的组件(spout或bolt)的1个或多个task。
- 1个task执行着实际的数据处理。
1个worker进程执行一个拓扑的子集。1个worker进程从属于1个特定的拓扑,并运行着这个拓扑的1个或多个组件(spout或bolt)的1个或多个executor。一个运行中的拓扑包括集群中的许多台机器上的许多个这样的进程。
1个executor是1个worker进程生成的1个线程。它可能运行着1个相同的组件(spout或bolt)的1个或多个task。
1 个task执行着实际的数据处理,你用代码实现的每一个spout或bolt就相当于分布于整个集群中的许多个task。在1个拓扑的生命周期中,1个组 件的task的数量总是一样的,但是1个组件的executor(线程)的数量可以随着时间而改变。这意味着下面的条件总是成立:thread的数量 <= task的数量。默认情况下,task的数量与executor的数量一样,例如,Storm会在每1个线程运行1个task。
配置拓扑的并发度
注意Storm的术语"并发度(parallelism)"是特别用来描述所谓的parallelism hint的,这代表1个组件的初始的executor(线程)的数量。在此文档中我们使用术语"并发度"的一般意义来描述你不但可以配置executor的数量,还可以配置worker进程的数量,还可以是1个拓扑的task的数量。在用到并发度的狭义的定义时我们会特别提出。
下面的小节给出了一些不同的配置选项,还有你如何在代码中设置它们。有多种方法可以进行设置,表格列举了其中几种。Storm目前有下列的配置优先级:defaults.yaml < storm.yaml < 特定拓扑的配置 < 内部特定组件的配置 < 外部特定组件的配置。
worker进程的数量
- 描述: 1个拓扑有多少个分布于集群中的机器的worker进程
- 配置选项: TOPOLOGY_WORKERS
- 如何在代码中设置 (例子):
executor的数量 (线程)
- 描述: 每个组件会有多少个executor
- 配置选项: ?
- 如何在代码中设置 (例子):
- TopologyBuilder#setSpout()
- TopologyBuilder#setBolt()
- 注意在Storm 0.8以后
parallelism_hint参数指定的是bolt的初始的executor的数量。
task的数量
- 描述: 每个组件有多少task
- 配置选项: TOPOLOGY_TASKS
- 如何在代码中设置 (例子):
这是一个简单的代码例子,展示了在实践中如何设置:
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
.setNumTasks(4).shuffleGrouping("blue-spout);
在上面的代码中我们配置了Storm运行GreenBolt指定了初始有2个executor和4个关连的task。Storm会在每个 executor(线程)2个task。如果你不想显式的配置task的数量,Storm会默认的为每个executor运行1个task。
一个运行中的拓扑的例子
下 面的图表展示了1个简单拓扑在实际操作中看起来是怎样的。这个拓扑包含了3个组件:1个spout叫做BlueSpout,2个bolt分别叫 GreenBolt和YellowBolt。BlueSpout发送它的输出到GreenBolt,GreenBolt又把它的输出发到 YellowBolt。
下面是对上图的简要分析:
3个组件的并发度加起来是10,就是说拓扑一共有10个executor,一共有2个worker,每个worker产生10 / 2 = 5条线程。
绿色的bolt配置成2个executor和4个task。为此每个executor为这个bolt运行2个task。
下面的代码配置了这3个组件
,相关代码如下:
Config conf = new Config();
conf.setNumWorkers(2); // 使用2个worker进程
topologyBuilder.setSpout(“blue-spout”, new BlueSpout(), 2); // parallelism hint为2
topologyBuilder.setBolt(“green-bolt”, new GreenBolt(), 2) .setNumTasks(4) .shuffleGrouping(“blue-spout”);
topologyBuilder.setBolt(“yellow-bolt”, new YellowBolt(), 6) .shuffleGrouping(“green-bolt”);
StormSubmitter.submitTopology( “mytopology”, conf, topologyBuilder.createTopology() );
And of course Storm comes with additional configuration settings to control the parallelism of a topology, including:
此外还有其他的配置来控制拓扑的并发度,包括了:
- TOPOLOGY_MAX_TASK_PARALLELISM: 这个设置指定了1个单独的组件的executor的数量的上限。当在测试阶段使用本地模式运行1个拓扑时,用来限制生成的线程的数量。你可以像下面这样来使用:
- Config#setMaxTaskParallelism().
如何改变1个正在运行的拓扑的并发度
Storm有一个不错的特性,你可以在不需要重启集群或拓扑,来增加或减少worker进程和executor的数量。这样行为成为rebalancing。
你有两个选项可以rebalance1个拓扑:
- 使用Storm的web UI来rebalance。
- 像下面描述的那样,使用命令行工具来做:
# 重新配置拓扑 “mytopology” 使用5个worker进程。
# spout “blue-spout” 使用3个executor
# bolt “yellow-bolt” 使用10个executor
$ storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10
相关推荐
6. 编程语言无关:Storm支持使用任何编程语言来定义拓扑和处理组件,这为不同背景的开发人员提供了便利。 在架构上,Storm使用ZooKeeper进行集群协调,支持分布式消息队列和数据库技术。Storm中的Topology负责消耗...
标题中的“那些storm的坑坑”暗示了这篇文章可能主要讨论Apache Storm使用过程中遇到的问题和挑战。Apache Storm是一个开源的分布式实时计算系统,常用于实时数据流处理,它允许开发者连续处理无限的数据流。由于...
喷嘴是 storm 中流的来源,bolts 是拓扑中的所有计算逻辑都是在 bolts 中实现的。 Storm 的拓扑结构包括 spout 和 bolts 两个部分。spout 是流的来源,bolts 是拓扑中的所有计算逻辑。每一个流申明的时候都赋予一...
3. 自适应拓扑替换:在不中断系统运行的前提下,能够自动调整任务的并发度。这使得系统能够根据实际负载动态调整资源分配,从而提高处理效率和稳定性。 4. 延迟持久化队列:通过将磁盘I/O操作推迟到数据处理完成...
为了实现这样的功能,我们需要设计一个定制的Storm拓扑。这个拓扑可能包含以下几个部分: 1. **RequestSpout**:模拟或接收实际的Web Service请求,将它们作为数据元组发射到拓扑中。 2. **ResponseParserBolt**:...
SyncSpout是上海华瑞银行(SHRB)大数据团队开发的,...我们在做实时推荐系统中,希望将Storm的并发性和分布式计算能力应用到“请求-响应”范式中, 比如客户的某次购买行为能够以消息的形式发送到storm拓扑中,storm…
在本文中,我们将深入探讨如何使用Java开发Apache Storm实时流处理系统,并通过具体的...在"stormtest"项目中,应该包含了这些示例代码的具体实现,通过阅读和理解这些代码,你可以更好地掌握Storm的实时计算核心功能。
在这些项目中,Storm成功地处理了海量实时数据,并且在高并发和大数据量的场景下,Storm展现出了出色的性能。 Storm的快速起步还包括与周边系统的集成。例如,Storm与Hadoop的集成可以用于大规模的数据处理,可以将...
- 理解并优化Spout和Bolt的并发度(parallelism hint)来提高资源的利用率。 - 调整批处理大小和超时时间以适应不同的业务场景和数据处理需求。 4. 性能调优: - 对消息的序列化和反序列化方式进行优化,减少CPU...
10. **性能调优**:考虑到基站数据的高并发性和实时性要求,项目可能涉及到 Storm 的性能调优,包括优化拓扑结构、调整并行度以及优化数据处理逻辑等。 综上所述,【中国移动storm项目代码】是一个综合性的实时大...
2. **DRPC(Distributed Remote Procedure Calls)**:DRPC是Storm的一个关键特性,它允许用户在Storm拓扑中定义和执行分布式函数。这些函数可以看作是在集群中的多个节点上分布式执行的远程过程调用。DRPC使得复杂...
4. **examples**:可能包含一些示例拓扑,供初学者了解如何构建和部署Storm拓扑。 5. **docs**:官方文档,帮助用户理解和使用Storm。 6. **conf**:默认配置文件,与`config`类似,但可能包含特定发行版的配置。 7....
1. **分布式**:Storm可以通过增加机器和提高并发度来实现水平扩展,以处理更多的数据流。 2. **自动容错**:系统能够自动检测和处理进程、机器或网络故障,确保服务的连续性。 3. **实时处理**:Storm处理数据时不...
通过实例解析,读者可以掌握如何设计和实现数据流的完整生命周期,理解如何利用Storm构建实时ETL(提取、转换、加载)流程,以及在大数据生态系统中的定位。 三、Storm之日志告警系统项目实战 日志告警系统是实时...
总之,“Storm Executor Task QuartzJob流式框架定时任务处理框架”是一种结合实时处理和定时批处理的强大工具,适合处理大规模、高并发的数据流任务。通过巧妙地融合这两种技术,我们可以构建出一个既具备实时响应...
5. **Web服务接口**:为了使Storm拓扑对外提供服务,可能需要在Bolt中实现RESTful API,或者使用如Flask、Spark Java这样的微服务框架,将处理结果以HTTP响应的形式返回。 6. **容错机制**:Storm保证每个消息至少...
**Storm笔记概述** Storm是一个分布式实时计算系统,由Twitter开源并广泛应用于...通过对Storm的学习,我们可以理解实时数据处理的核心原理,掌握如何构建和优化实时数据处理系统,为企业提供更敏捷、高效的决策支持。
Storm拓扑结构** Storm的核心概念是拓扑(Topology),它是由 bolt 和 spout 组成的有向无环图(DAG)。Spouts作为数据源,负责产生数据流;Bolts则执行业务逻辑,如数据清洗、聚合、过滤等操作。每个组件都可以...