Storm总结

基本概念

  1. 一台物理机,运行多个拓扑。具体说就是,运行多个进程,每一个进程仅属于一个拓扑。

  2. worker(工作进程) 是进程。

  3. executor(执行器)是线程。

  4. 执行器运行着多个任务( task),但执行器只能执行一类组件,要么是spout要么是bolt。

  5. 组件的任务就是task,每一个bolt就相当于多个task。

  6. eg:一个线程运行着 training-bolt的多个task,但默认是1线程1task。一个bolt的task数量在运行过程中是一定的,但是一个组件的线程数可以改变。

  7. parallelism_hint表示:一个bolt的线程(executor)数量。

  8. getThisTaskId():  Gets the task id of this task.

    getThisTaskIndex():  Gets the index of this task id in getComponentTasks(getThisComponentId()) // 该index在运行过程中是不会变的。

  9. setBolt("name",new Bolt(),2:执行的线程数).setNumTask(2);
  10.  

  11. 一些相关代码

Config.setNumWorkers(10); //一个拓扑有多少个分布于集群中的进程。
builder.setBolt(); //第三个参数就是parallelism-hint
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2).setNumTasks(4).shuffleGrouping("blue-spout);//GreenBolt指定了初始有2个executor和4个关连的task。Storm会在每个 executor(线程)2个task。

executor1个被worker进程启动的单独线程。每个executor只会运行1topology1component(spoutbolt)task注:task可以是1个或多个,storm默认是1component只生成1taskexecutor线程里会在每次循环里顺序调用所有task实例)。

task是最终运行spoutbolt中代码的单元(注:1task即为spoutbolt1个实例,executor线程在执行期间会调用该tasknextTupleexecute方法)。topology启动后,1个component(spout或bolt)的task数目是固定不变的,但该component使用的executor线程数可以动态调整(例如:1executor线程可以执行该component1个或多个task实例,当执行多个task实例时executor的数量就减少了)。这意味着,对于1component存在这样的条件:#threads<=#tasks(即:线程数小于等于task数目)。默认情况下task的数目等于executor线程数目,即1executor线程只运行1task

你可能感兴趣的:(Storm总结)