附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()
}
}




















posted @ 2020-10-18 23:46  十一vs十一  阅读(83)  评论(0编辑  收藏  举报