工作进程、平行度就、任务数解释
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 提升处理性能。