工作进程、平行度就、任务数解释
1. 第一种情况
如上使用默认模式,Node 中运行情况:
1个 JVM 每个Spout、Bolt 一个Executors 一个Task
2. 第二种情况
说明如下:
1. 独立JVM Worker:2
printWriterTopologyBuilder.setNumWorkers(2); public void setNumWorkers(int numWorkers) { printWriterTopology.setNumWorkers(numWorkers); }
2. printWriterTopologyBuilder.setSpout(2);
public void setSpout(int parallelismSize) { hasSpout = true; printWriterTopology.setSpout(parallelismSize, parallelismSize * 1); }
每个Worker 每个PrintWriterSpout中一个Executor ,运行一个Task, 总共2个Parrallelism
Each Worker = Parrallelism Size / Worker Size
3. printWriterTopologyBuilder.setPrintBolt(4, 8);
public void setPrintBolt(int parallelismSize, int numTasks) { hasPrintBolt = true; printWriterTopology.setPrintBolt(parallelismSize, numTasks); } public void setWriterBolt(int parallelismSize, int numTasks, BoltGroupType boltGroupType) { this.hasWriterBolt = true; printWriterTopology.setWriterBolt(parallelismSize, numTasks, boltGroupType); } Each Worker Executors = 4/2 = 2 即 每个worker 两个 Executors Each Executor Task Count = numTasks/parallelismSize 8/4=2
即 4个Executors 共计 8个Task
4. printWriterTopologyBuilder.setWriterBolt(8, 8);
protected void setWriterBolt(int parallelismSize, int numTasks) { setWriterBolt(parallelismSize, numTasks, BoltGroupType.ShuffleGrouping); } Each Worker Executors = Parrallelism Size / Worker Size 8/2 =4 即 每个Worker中 4个Executors, 每个Executor Task Count =8/8=1
3. 如何理解Task 和 Executor 呢?
如果我们将 NumWorker 配置成4, 将会有哪些变化呢?
我们可以学习到: Executors 可以伴随JVM Worker 数量的提升,平均分布到不同JVM 中运行,
但是 Task 不可以,必须伴随Executors 执行,这里性能提高提升不如WriterBolt 好。
再来一个极端配置: 假如我们有8台 Supervisor,配置如下
结论: 8个Task 在一个Executor JVM 中无法通过增加Num worker 提升处理性能。