Storm并发度详解

工作进程(Worker Process)

Worker是Spout/Bolt中运行具体处理逻辑的进程。拓扑跨一个或多个Worker进程执行。每个Worker进程是一个物理的JVM和拓扑执行所有任务的一个子集。例如,如果合并并行度的拓扑是300,已经分配50个Worker,然后每个Worker将执行6个任务,Storm会尝试在所有Worker上均匀的发布任务。

执行器(Executor)

Executor称为物理线程,每个Worker可以包含多个Executor。

任务(Task)

Task是具体的处理逻辑对象,默认情况下,执行器和任务对应,即一个执行器对应一个任务。

工作进程、执行器、任务三者之间的关系如下图所示:

Storm集群的一个节点可能有一个或者多个工作进程运行在运行在一个或者过个拓扑上,一个工作进程执行拓扑的一个子集。工作进程属于一个特定的拓扑,并可能为这个拓扑的一个或多个组件(spout或bolt)运行一个或多个执行器。一个运行中的拓扑包括多个运行在Storm集群内多个节点的进程。

一个或者多个执行器可能运行在一个工作进程内,执行器是由工作进程产生的一个线程,他可能为相同的组件(Spout或Bolt)运行一个或多个任务。

任务执行真正的数据处理,代码中实现的每个Spout或Bolt,作为很多任务跨集群执行。一个组件的任务数量始终贯穿拓扑的整个生命周期,但一个组件的执行器(线程)数量可以随时间而该变。默认情况下,一个执行器包含一个任务数,即Storm会使用每个线程执行一个任务。

配置拓扑的并行度

1.工作进程的数量

工作进程的数量表示集群中不同节点的拓扑可以创建爱你多少个工作进程。

配置参数是:TOPOLOGY_WORKERS

也可以通过java API进行设置:

[html] view plain copy

  1. Config#setNumWorkers

2.执行器(线程)的数量

执行器的数量指的是每个组件产生多少个线程。

这个参数暂时只能通过java API进行配置:

[html] view plain copy

  1. TopologyBuilder#setSpout()
  2. TopologyBuilder#setBolt()

3.任务的数量

任务的数量表示的是每个组件创建多少个任务。

配置选项:TOPOLOGY_TASKS

也可以通过java API进行配置:

[html] view plain copy

  1. ComponentConfigurationDeclarer#setNumTasks()
  2. T setNumTasks(java.lang.Number val)

拓扑示例

下面我们定义一个名为mytopology的拓扑,由一个Spout组件(BlueSpout)、两个Bolt组件(GreenBolt和YellowBolt)共三个组件构成,代码如下:

[html] view plain copy

  1. Config conf = new Config();
  2. conf.setNumWorkers(2);
  3. topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2);
  4. topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
  5. .setNumTasks(4)
  6. .shuffleGrouping("blue-spout");
  7. topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6)
  8. .shuffleGrouping("green-bolt");
  9. StormSubmitter.submitTopology(
  10. "mytopology",
  11. conf,
  12. topologyBuilder.createTopology()
  13. );

mytopology拓扑的描述如下:

1.拓扑将使用两个工作进程(Worker)。

2.Spout是id为“blue-spout”、并行度为2的BlueSpout实例(产生两个执行器和两个任务)。

3.第一个Bolt的id为"green-bolt"、并行度为2、任务数为4、使用随机分组方式接收"blue-spout"所发射元组的GreenBolt实例(产生两个执行器和4个任务)。

4.第二个Bolt是id为"yellow-bolt"、并行度为6、使用随机分组方式接收"green-bolt"所发射元组的YellowBolt实例(产生6个执行器和6个任务)。

综上所述,该拓扑一共有两个工作进程(Worker),2+2+6=10个执行器(Executor),2+3+6=12个任务。因此,每个工作进程可以分配到10/2=5个执行器,12/2=6个任务。默认情况下,一个执行器执行一个任务,但是如果指定了任务的数目,则任务会平均分配到执行器中,因此,GreenBolt的实例"green-bolt"的一个执行器将会分配到4/2个任务。

mytopology的拓扑及其对应的资源分配如下图所示:

动态设置拓扑的并发度

Storm支持在不重启Topolog的情况下,动态的改变(增减)worker process的数目和Executor的数目,称为rebalancing。有两种方式可以实现拓扑的再平衡:

1.使用Storm Web UI

2.使用Storm rebalance命令(推荐使用)

使用命令行的方式如下:

[html] view plain copy

  1. # 重新配置拓扑
  2. # "mytopology" 拓扑使用5个Worker进程
  3. # "blue-spout" Spout使用3个Executor
  4. # "blue-spout" Bolt使用10个Executor
  5. # storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10

注:"mytopology"是拓扑的名称,"blue-spout"和"yellow-bolt"是组件的名称。

时间: 2024-10-20 19:44:29

Storm并发度详解的相关文章

Storm并发度和Grouping方式

Storm并发度和Grouping方式 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB","STHeiti","Microsoft YaHei","WenQuanYi Micro Hei",SimSun,Song,sans-serif;} .note-content h2 {line-height: 1.6; colo

Storm文档详解

1.Storm基础概念 1.1.什么是storm? Apache Storm is a free and open source distributed realtime computation system. Storm是免费开源的分布式实时计算系统 实时和离线的区别: 1 离线计算:批量获取数据.批量传输数据.周期性批量计算数据.数据展示 代表技术:Sqoop批量导入数据.HDFS批量存储数据.MapReduce批量计算数据.Hive批量计算数据.***任务调度 2 流式计算:数据实时产生.

Storm并发度

并发度 一个Topology可以包含一个或多个worker(并行的跑在不同的machine上), 所以worker process就是执行一个topology的子集, 并且worker只能对应于一个top  ology 一个worker可用包含一个或多个executor, 每个component (spout或bolt)至少对应于一个executor, 所以可以说executor执行一个compenent的子集, 同时一个executor只能对应于一个component Task就是具体的处理逻

[Storm] 并发度的理解

Tasks & executors relation Q1. However I'm a bit confused by the concept of "task". Is a task an running instance of the component(spout or bolt) ? An executor having multiple tasks actually is saying the same component is executed for multi

Stream grouping 并发策略详解

Spout数据源:Message queue   消息队列  必须使用 MQ.Db.文件 直接流数据源:MQ 从db只能读配置文件 Log文件增量数据:1.读出内容写入MQ,2.Storm处理 Spout读文件:学习用,其他无用 读文件:1.分布式应用无法读:2.spout开并发会重复读 Stream grouping 策略 只适用于多并发 stream grouping就是用来定义一个stream应该如果分配给Bolts上面的多个 Executors(多线程,并发度) 注:不是一个spout或

Storm 系列(二)—— Storm 核心概念详解

一.Storm核心概念 1.1 Topologies(拓扑) 一个完整的 Storm 流处理程序被称为 Storm topology(拓扑).它是一个是由 Spouts 和 Bolts 通过 Stream 连接起来的有向无环图,Storm 会保持每个提交到集群的 topology 持续地运行,从而处理源源不断的数据流,直到你将主动其杀死 (kill) 为止. 1.2 Streams(流) Stream 是 Storm 中的核心概念.一个 Stream 是一个无界的.以分布式方式并行创建和处理的

MySQL锁解决并发问题详解

文章分为以下几个要点 问题描述以及解决过程 MySQL锁机制 数据库加锁分析 下面讨论的都是基于MySQL的InnoDB. 0. 问题描述以及解决过程 因为涉及到公司利益问题,所以下面很多代码和数据库信息,进行了缩减和修改,望见谅. 业务场景是优惠券系统规则规定了一个优惠券活动最多可发行多少张优惠券和每个用户最多可领取优惠券数量. 下面列出两张表的结构. 活动表 CREATE TABLE `coupon_activity` ( `act_id` int(11) NOT NULL AUTO_INC

LeetCode Go 并发题详解:交替打印字符串

原文地址:https://mp.weixin.qq.com/s/K032xlARjiyS8ecJrqZXaA 本题 LeetCode 链接: https://leetcode.com/problems/fizz-buzz-multithreaded/ 本题题目 给定一个数列从 1 ~ n,依序输出,但是: 如果 n 可以被 3 整除,输出 "fizz" 如果 n 可以被 5 整除,输出 "buzz" 如果 n 同时可以被 3 与 5 整除,输出 "fizz

轻松搞定高并发:详解Redis的五种数据类型及应用场景分析!

一.Redis基本概念介绍和特性 1.1 Redis基本概念介绍 1.Redis是远程的,有客户端和服务端,我们一般说的是服务端: 2.Redis是基于内存的,所以比基于硬盘的MySQL要快很多,但非常吃内存 3.Redis是非关系型数据库.本质上也是数据库,但MySQL关系型数据库存储时必须定义数据词典,而Redis则不需要. 1.2 Redis 和 Memcached比较 Redis数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的