我爱编程Java程序员

Storm 核心构建及分组

2018-08-01  本文已影响0人  smartjiang
image.png

Storm核心组件:
Topology:Storm中运行一个实时应用程序的名称。
Nimbus:负责资源分配和任务调度。
Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。---通过配置文件设置当前supervisor上启动多少个worker port决定。
spout:在一个topology中 会从外部数据源中读取数据,将外部数据源转化成Storm内部的数
据,以Tuple为基本的传输单元下发给Bolt。
Bolt:接受Spout发送的数据,或上游的bolt的发送的数据。根据业务逻辑进行处理。发送给下一个Bolt或者是存储到某种介质上。介质可以是Redis可以是mysql,或者其他。
Tuple:Storm内部中数据传输的基本单元,里面封装了一个List对象,用来保存数据。
StreamGrouping:数据分组策略
7种:shuffleGrouping(Random函数),Non Grouping(Random函数),FieldGrouping(Hash取模)、Local or ShuffleGrouping 本地或随机,优先本地。
Task:一个Task属于一个Spout或者Bolt并发任务 worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,不同spout/bolt的task可能会共享一个物理线程,该线程称为executor。

worker processes的数目, 可以通过配置文件和代码中配置, worker就是执行进程, 所以考虑并发的效果, 数目至少应该大亍machines的数目 
executor的数目, component的并发线程数,只能在代码中配置(通过setBolt和setSpout的参数), 例如, setBolt("green-bolt", new GreenBolt(), 2) 
tasks的数目, 可以不配置, 默认和executor1:1, 也可以通过setNumTasks()配置 
Topology的worker数通过config设置,即执行该topology的worker(java)进程数。它可以通过 storm rebalance 命令任意调整。

Config conf = newConfig();

conf.setNumWorkers(2); **//****用2个worker**

topologyBuilder.setSpout("blue-spout", newBlueSpout(), 2); **//****设置2个并发度**

topologyBuilder.setBolt("green-bolt", newGreenBolt(), 2).setNumTasks(4).shuffleGrouping("blue-spout"); **//****设置2个并发度,4个任务**

topologyBuilder.setBolt("yellow-bolt", newYellowBolt(), 6).shuffleGrouping("green-bolt"); **//****设置6个并发度**

StormSubmitter.submitTopology("mytopology", conf, topologyBuilder.createTopology());

并发度


image.png

3个组件的并发度加起来是10,就是说拓扑一共有10个executor,一共有2个worker,每个worker产生10 / 2 = 5条线程。
绿色的bolt配置成2个executor和4个task。为此每个executor为这个bolt运行2个task。

Storm文件提交流程;


本地目录.png 流程图片.png

Storm 的zookeeper目录树


zookeeper目录.png
上一篇下一篇

猜你喜欢

热点阅读