原文鏈接:a870439570.github.io/interview-d…git
Shuffle grouping:github
Fields grouping:apache
Partial Key grouping:bash
All grouping:網絡
Global grouping:jvm
None grouping:分佈式
Direct grouping:post
Local or shuffle grouping: 本地或隨機分組:和隨機分組相似,可是若是目標Bolt在同一個工做進程中有一個或多個任務,那麼元組將被隨機分配到那些進程內task。簡而言之就是若是發送者和接受者在同一個worker則會減小網絡傳輸,從而提升整個拓撲的性能。有了此分組就徹底能夠不用shuffle grouping了。性能
修改上一章節的Topology Storm(三)Java編寫第一個本地模式demoui
package com.qxw.topology;
import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.topology.TopologyBuilder;
import org.apache.storm.tuple.Fields;
import com.qxw.bolt.OutBolt;
import com.qxw.bolt.OutBolt2;
import com.qxw.spout.DataSource;
/**
* 拓撲的並行性
* @author qxw
* @data 2018年9月17日下午2:49:09
*/
public class TopologyTest2 {
public static void main(String[] args) throws Exception {
//配置
Config cfg = new Config();
cfg.setNumWorkers(2);//指定工做進程數 (jvm數量,分佈式環境下可用,本地模式設置無心義)
cfg.setDebug(false);
//構造拓撲流程圖
TopologyBuilder builder = new TopologyBuilder();
//設置數據源(產生2個執行器和倆個任務)
builder.setSpout("dataSource", new DataSource(),2).setNumTasks(2);
//設置數據建流處理組件(產生2個執行器和4個任務)
builder.setBolt("out-bolt", new OutBolt(),2).shuffleGrouping("dataSource").setNumTasks(4); //隨機分組
//設置bolt的並行度和任務數:(產生6個執行器和6個任務)
// builder.setBolt("out-bol2", new OutBolt2(),6).shuffleGrouping("out-bolt").setNumTasks(6); //隨機分組
//設置字段分組(產生8個執行器和8個任務)字段分組
builder.setBolt("out-bol2", new OutBolt2(),8).fieldsGrouping("out-bolt", new Fields("outdata")).setNumTasks(8);
//設置廣播分組
//builder.setBolt("write-bolt", new OutBolt2(), 4).allGrouping("print-bolt");
//設置全局分組
//builder.setBolt("write-bolt", new OutBolt2(), 4).globalGrouping("print-bolt");
//1 本地模式
LocalCluster cluster = new LocalCluster();
//提交拓撲圖 會一直輪詢執行
cluster.submitTopology("topo", cfg, builder.createTopology());
//2 集羣模式
// StormSubmitter.submitTopology("topo", cfg, builder.createTopology());
}
}
}
複製代碼