Apache Storm学习笔记(3)Apache Storm的组成部分并行度的理解

一个WORKER PROCESS

在这里插入图片描述

  • 一个worker process执行topology的一个子集。worker process属于特定的topology,并且可以为该topology的一个或多个组件(spout或bolt)运行一个或多个executor。正在运行的topology由在Storm集群中的许多机器上运行的类似worker process组成。

  • 一个executor是由一个worker process生成的一个线程。它可能针对同一组件(spout或bolt)运行一项或多项任务。

  • 在拓扑的整个生命周期中,组件的任务数量始终是相同的,但是组件的执行executors (threads)的数量会随着时间而变化。这意味着以下条件成立:#threads ≤ #tasks。默认情况下,Task数设置为与executor数相同,即Storm将在每个线程中运行一个任务。

并行度

一般来说,默认情况下一个Task就对应一个Thread,且#threads ≤ #tasks,也就是说可以在代码设置任务的数量,代码表示:

	topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)	// 2为executor的数量,这时这个Bolt组件的并行度为2
					.setNumTasks(4)		// 如果不设置Task数量,则Task数量和executor相同,现在则为4
					.shuffleGrouping("blue-spout");

案例A:如果只有一台机器,上面有两个worker process,这里Blue Spout并行度为2,没有设置任务数量,所以任务数量也为2。同理Green Bolt和Yellow Bolt并行度为2和6,但是任务数量为4和6,所以一个Green Bolt有两个线程执行四个 Task,一个线程执行2个Task,而Green则是每个Task独占一个线程,总的并行度为10,平均给worker process为5。

如图所示:
在这里插入图片描述
案例代码如下:

Config conf = new Config();
conf.setNumWorkers(2); // use two worker processes

topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); // set parallelism hint to 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()
    );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值