storm的并行度和流分组

1.流分组

       stream grouping就是用来定义一个stream应该如果分配给Bolts上面的多个task

2.流分组策略

       storm里面有6种类型的stream grouping。

       (1).Shuffle Grouping

            轮询,平均分配。随机派发stream里面的tuple,保证每个bolt接收到的tuple数目相同。

       (2). Non Grouping: 无分组, 这种分组和Shuffle grouping是一样的效果,多线程下不平均分配。

       (3). Fields Grouping:按Field分组,比如按word来分组, 具有同样word的tuple会被分到相同的Bolts, 而不同的word则会被分配到不同的Bolts。

作用:1、过滤,从源端(Spout或上一级Bolt)输出Fields中选择某些Field

           2、相同的tuple会分发给同一个task处理

      (4). All Grouping: 广播发送, 对于每一个tuple, 所有的Bolts都会收到。(单线程下均等同于All Grouping)

      (5). Global Grouping: 全局分组, 这个tuple被分配到storm中的一个bolt的其中一个task。再具体一点就是分配给id值最低的那个task。(不常用)

      (6). Direct Grouping: 直接分组, 这是一种比较特别的分组方法,用这种分组意味着消息的发送者决定由消息接收者的哪个task处理这个消息。 只有被声明为Direct Stream的消息流可以声明这种分组方法。而且这种消息tuple必须使用emitDirect方法来发射。消息处理者可以通过TopologyContext来或者处理它的消息的taskid (OutputCollector.emit方法也会返回taskid)(不常用)

 

3.并行度

  1. 一般对于物理节点来讲,我们部署的节点的类型包括nimbus(master),supervisor(slave),通常是一个nimbus,多个supervisor。nimbus是负责安排任务给supervisor去完成的,即supervisor是实际上干活的。
  2. 而对于一个supervisor来讲,它可以包含多个worker,worker有可以包含多个executor,executor又可以执行多个task。
  3. 这个task就是所谓的并行度。

 

   worker、executor、task和topology,spout和bolt之间又是怎么样的对应关系

  

  supervisor和node是一一对应的关系,而worker就是process(进程),executor就是thread(线程),task就是在spout或bolt中定义的函数。

 

  一个Topology可以包含一个或多个worker(并行的跑在不同的machine上), 所以worker process就是执行一个topology的子集, 并且worker只能对应于一个topology

  一个worker可用包含一个或多个executor, 每个component (spout或bolt)至少对应于一个executor, 所以可以说executor执行一个compenent的子集, 同时一个executor只能对应于一类component

  Task就是具体的处理逻辑对象, 一个executor线程可以执行一个或多个tasks

  但一般默认每个executor只执行一个task, 所以我们往往认为task就是执行线程, 其实不是。

  task代表最大并发度, 一个component的task数是不会改变的, 但是一个componet的executer数目是会发生变化的(storm rebalance命令),

  task数>=executor数, executor数代表实际并发数

4.storm物理结构和storm逻辑结构(拓扑)

  物理:nimbus(master),supervisor(slave)、worker、executor、task

  逻辑:topology,spout、bolt

 

posted @ 2018-09-07 11:06  大虾张三丰  阅读(181)  评论(0编辑  收藏  举报