storm的并行度的解释--- ( 看完就能理解 )

关于storm的基础,参照我这篇文章:流式计算storm
关于并发和并行,参照我这篇文章:并发和并行
关于storm的并行度解释,参照我这篇文章:storm的并行度解释
关于storm的流分组策略,参照我这篇文章:storm的流分组策略
关于storm的消息可靠机制,参照我这篇文章:storm的消息可靠机制

本文说的是对storm的并行度理解和如何在代码中实际的设置

1.Worker

Worker是进程级别的,一个worker进程对应执行一个Topology服务,一个运行中的Topology是由集群中的多个Worker进程组成的
反过来说,一个Worker里面不会运行属于不同的topology的执行任务。

2.Executer

Executer是线程级别,一个Worker进程里有多个Executer线程,默认一个Executor运行一个task,
一个Executor中只能运行隶属于同一个component(spout/bolt)的task
我们常说的并行度,也就是executer的个数

3.Task

Task是实例级别,一个Task对应一个new Bolt()或者一个new Spout()
一个Executer线程默认执行一个task,也可以设置为执行多个Task
如果一个bolt或spout有设置多个task,executer就会在每次循环里顺序调用所有的task实例
每个component(spout/bolt)的并发度就是这个component对应的task数量。
同时,task也是各个节点之间进行grouping(partition)的单位。

这里写图片描述

默认

默认情况下一个supervisor节点会启动4个worker进程
每个worker进程会启动1个executer线程
每个executer会启动1个task

注意

原生storm的一个executer可以有多个task,但是我们知道一个线程不管有多少的task,他的效率都不会增加,反而会因为线程在多个task之间切换而损失一些性能,所以有人就会有这个疑问,为什么可以一个executer可以对应多个task
其实这个是因为storm可以提供动态调整executer,而task的数量一旦启动就固定不能变了
所以一开始就想以后可以提高并行度,那么就最好将task的数量多弄一些
比如设置executer为2个,task的数量为4个,那么上线后executer的数量最多可以调至4个,再调大了,由于没有太多的task与之对应,所以也没什么用了

配置

看看以下这个拓扑结构的部分代码,我们说说这三个概念对应代码中的设置方式:

TopologyBuilder builder = new TopologyBuilder();
//设置这个splitbolt的executer数为2,即这个bolt会有两个线程
//设置这个splitbolt的task数为4,即这个bolt会有4个实例bolt,即真正的集群中会new出4个来,即内存中中会有4个splitbolt对象
//整体就是这个splitbolt会开两个线程,跑四个实例,平均一个线程跑两个实例对象
builder.setBolt(SPLIT_BOLT_ID, splitBolt,2).setNumTasks(4).XXXXX

Config config = new Config();
//设置这个topology的worker数为2个
config.setNumWorkers(2);

在运行过程中,线程数是可以动态调整的,但其他参数不能调整
大的方面,有多种方法可以进行并发度的配配置,其优先级如下:
defaults.yaml < storm.yaml < topology 私有配置 < component level(spout/bolt) 的私有配置

网上其他例子

这里写图片描述
如上面代码所示:
进程数=numWorkers=2
线程数=blue_parallelism_hint(2)+green_parallelism_hint(2)+yellow_parallelism_hint(6)=10

10个线程/2个进程 = 5个线程/进程

Blue-Spout 线程数 = 2
Blue-Spout Task数 = Blue-Spout NumTasks = 4

4/2=2 即每个Blue-Spout线程有2个Task。

线程数量即并发度可以动态调整,其它的参数启动后就不能调整了。

以一张图更清晰的说明:
这里写图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值