Storm 第四章 Storm常见问题

一、集群如何启动,任务如何执行?
  java -server nimbus,supervisor
  client--->createTopology(序列化)--->提交jar到nimbusinbox--->nimibus分配任务(task总数/worker数)---写到zk。
  启动worker<----识别本身的任务<----supervisor----->watch----zk
  启动Spout/Bolt<----TaskInfo<-----worker---->task
二、集群架构中各个模块如何启动?
  nimbus:用户启动
  supervisor:用户启动
  worker:supervisor启动
  Task:worker启动
三、集群如何通讯?
  集群架构中的各个模块是如何通讯的?外部通讯
  拓扑程序中的各个Task是如何通讯的?内部通讯
四、Worker与topology
  一个worker只属于一个topology,每一个worker中运行的task只能属于这个topology。反之,一个topology包含多个worker,其实就是这个topology运行在多个worker上。

  一个topology要求worker数量若是不被知足,集群在分配任务时,根据现有的worker先运行topology。若是当前集群中的worker数量为0,那么最新提交的topology将只会标记active,
  不会运行,只有当集群有了空闲资源才会运行。

五、如何指定驱动类中每一个组件的并发度数量?如何设置worker数量?
  1,根据上游的数据量来设置spout的并发度。
  2,根据业务复杂度和execute方法执行时间来设置bolt并发度。
  3,根据集群的可用资源来配置,通常状况下70%的资源使用率。
  4,worker的数量理论上根据程序并发度的task数据来划分,在实际业务场景中,须要反复调整。java

六、ack-fail机制
  1,须要ackfail时,请为每一个tuple生成一个messageId,这个messageId是用来标识你关心的tuple,当这个tuple被彻底处理时,storm框架会调用spout的ack方法,不然调用fail。至于你的
  消息是否重发,彻底由本身处理。
  2,在Spout有并发度的状况下,storm会根据tuple最开始的所属spout taskId,通知相应的spoutTask。
  3,在流式计算中topology的bolt组件能够配置多个的,在每一个环节中,都须要bolt组件显示的高速storm框架,本身对当前接受的这个tuple处理完成。




架构

相关文章
相关标签/搜索