美文网首页我爱编程Java程序员
Storm 核心构建及分组

Storm 核心构建及分组

作者: smartjiang | 来源:发表于2018-08-01 10:08 被阅读0次
    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

    相关文章

      网友评论

        本文标题:Storm 核心构建及分组

        本文链接:https://www.haomeiwen.com/subject/zrthmftx.html