zoukankan      html  css  js  c++  java
  • 附3、第二天课程学习整体思路及问题 ---没用

    问题:
    1、集群如何启动,任务如何执行?
    java -server nimubs,supervisor
    client--->createTopology(序列化)--->提交jar到nimbuinbox--->nimbus分配任务(task总数/worker数)---.
    启动worker<------识别自己的任务<----supervisor---->watch----zk
    启动Spout/Bolt----TaskInfo<------worker---->zk
    集群架构中的各个模块如何启动?
    nimbus:用户启动
    supervisor:用户启动
    worker:supervisor启动
    Task:worker启动

    任务如何分配,如何执行?
    看图说话

    2、集群如何通信?
    集群架构中的各个模块是如何通信的?外部通信
    拓扑程序中的各个Task是如何通信的?内部通信

    3、如何保证消息的不丢失
    ack-fail机制如何实现的?
    成功:ack方法
    失败:fail方法

    4、[动手练习]尝试自己实现一个类似storm数据执行的框架

    1,任务分配
    ----->Task总数
    ----->可用worker数量
    2,通信机制
    ----->去zk获取每个组件的任务
    ----->启动不同服务
    nimbus,手动 java -server xxx.jar main-class
    superv,手动 java -server xxx.jar main-class
    worker,supervisor启动------java -server xxx.jar main-class(main(Worker.mk_work(new Worker())))
    Task, Worker启动Task--------Jvm--->Task.mk_Task()
    3,心跳机制
    thread1------tag=true
    thread2------>tag=true------tag=false
    thread1------>tag=true------tag=false------tag=true
    thread2------>tag=true------tag=false------tag=true-----tag=false
    4、任务执行(数据流)
    spout.nextTuple(tuple)----streamGrouping---> incomingQueue-------->bolt1.exeute(tuple)-----streamGrouping----> incomingQueue-------->bolt2.exeute(tuple)

    [实现数据执行的框架]
    spout-----线程1
    incomingQueue------queue
    bolt1-----线程2
    incomingQueue------queue
    bolt2-----线程3

    需要技术:
    线程池----->Exeutes.newFixPool(3)
    队列------->ArrayBolckingQueue(1000)

    伪代码:

    MyStrom{
    main(){
    //1、配置一个线程池
    //2、向线程池中提交任务
    spoutOutPutQueue = new ArrayBolckingQueue(1000)
    submit(new MySpout(spoutOutPutQueue))------collector.emit(tuple)------spoutOutPutQueue
    bolt1OutPutQueue = new ArrayBolckingQueue(1000)
    submit(new MyBolt1(spoutOutPutQueue,bolt1OutPutQueue))------>spoutOutPutQueue---->bolt1.execute(),collector.emit(tuple)------bolt1OutPutQueue
    submit(new MyBolt1(bolt1OutPutQueue))------>spoutOutPutQueue---->bolt1.execute()
    }
    }




















  • 相关阅读:
    mysql 5.7修改密码
    使用zfs进行pg的pitr恢复测试
    什么是构造函数?它和普通函数的区别?
    匿名函数和普通函数的区别
    http缓存机制
    全局变量和局部变量
    什么是web语义化?
    ajax状态值和状态码
    如何理解MVVM?
    如果理解&&运算符和各类数值的布尔值
  • 原文地址:https://www.cnblogs.com/shan13936/p/13837928.html
Copyright © 2011-2022 走看看