Supervisor结构:

单点结构如图:

1. 初始化时,启动进程Supervisor,根据 Nimbus分配的任务情况触发启动/停用Worker Jvm进程!

2. 每个Worker进程启动一个 或 多个 Task线程,且 task必须 同属 一个topology应用!即Worker必须服务于单个Topology;

3. 整体分析:Supervisor节点运行多个JVM线程(非一个节点),包括一个Supervisor进程和  一个(一个端口)或 多个Worker进程。

4. Task通过hb直接将 时间信息、当前Task统计信息写入zookeeper;

5. Worker定期将包括TopologyId、端口、TaskId集合 以及 当前时间写入本地;

6. supervisor 定期将包括时间 及  节点资源(端口集合) 写入到zookeeper,同时从zk中读取任务调度结果,根据结果启动/停用worker进程。

原理:Supervisor 与zk进行通信,通过zk的watch机制” 轮询,感知是否有新的任务需要认领,哪些任务需要被重新分配。

Worker结构:

1. Worker JVM进程内部,线程相互独立,同时 也会 共享数据收发和节点之间连接管理等Worker进程内的公共资源。

线程连接:

-->VirtualPort:数据接收线程;

-->keyoTupleSerialize : Tuple数据序列化;

-->TransferQueue:数据发送管道;

-->DraineRunnable:数据发送线程;

-->RefreshConnections:节点之间连接管理线程。

Supervisor:初始化:

1、清理本地临时目录下数据strom-local-dir/supervisor/tmp;

2、创建zk操作实例;

3、本地新建状态文件,/local-dir/supervisor/localstate;

4、生成supervisor-id并写入localstate,其中key=”supervisor-id”;如果supervisor重启,先检查supervisor-id是否已经存在,若存在直接读取即可!

5、初始化并启动heartbeat线程;

6、初始化并启动SyncProcessEvent线程;

7. 注册主进程退出数据清理Hook in SupervisorManger;

启动流程:

一:校验集群启动模式;

二: 创建supervisor本地目录;

三:

sync-processes方法:用于管理Workers;

1.  校验Worker状态:从本地的LocalState读取Worker的心跳信息来判断Worker状态!关闭状态无效(非valid)的Worker。重新分配端口,且创建新的Worker;

步骤:

-->读取 当前 所有的worker的状态,从LocalState中读出每个worker的心跳:不被允许、没有心跳、超时的Worker的worker-state均为无效!

-->关闭所有 状态不是有效的Worker!

-->为新的worker创建目录,添加到LocalState的LS-APPROVED-WORKERS中。

-->启动新的worker,等待worker的启动!

mk-synchronize-supervisor方法:

当assignMent发生变化,从Nimb

Executor心跳:

功能:Worker心跳信息保存到本地文件,Executor心跳保存到zookeeper中。

参考资料:http://www.bubuko.com/infodetail-1129547.html  ;

supervisor启动流程的更多相关文章

  1. Storm启动流程简介

    storm启动流程          storm是一个流行的开源的,分布式实时处理框架,关于storm的基本介绍可以参加这篇官方文档.大致的拓扑结构如图所示:        其中Nimbus是一个后台 ...

  2. storm启动流程

    email:chenguibin2004@126.com storm: 是一个分布式的实时流式计算框架,具有低延迟.高可用.分布式.可扩展.数据不丢失的特点, storm包含四个核心组件: Nimbu ...

  3. Flume-ng源码解析之启动流程

    今天我们通过阅读Flume-NG的源码来看看Flume的整个启动流程,废话不多说,翠花,上源码!! 1 主类也是启动类 在这里我贴出Application中跟启动有关的方法,其他你们可以自己看源码,毕 ...

  4. Storm集群启动流程分析

    Storm集群启动流程分析 程序员 1.客户端运行storm nimbus时,会调用storm的python脚本,该脚本中为每个命令编写了一个方法,每个方法都可以生成一条相应的Java命令. 命令格式 ...

  5. 庖丁解牛 Activity 启动流程

    前言 这是 Android 9.0 AOSP 系列 的第五篇了,先来回顾一下前面几篇的大致内容. Java 世界的盘古和女娲 -- Zygote 主要介绍了 Android 世界的第一个 Java 进 ...

  6. 进程监控工具supervisor 启动Mongodb

    进程监控工具supervisor 启动Mongodb 一什么是supervisor Superviosr是一个UNIX-like系统上的进程监控工具. Supervisor是一个Python开发的cl ...

  7. MyCat源码分析系列之——配置信息和启动流程

    更多MyCat源码分析,请戳MyCat源码分析系列 MyCat配置信息 除了一些默认的配置参数,大多数的MyCat配置信息是通过读取若干.xml/.properties文件获取的,主要包括: 1)se ...

  8. Android进阶系列之源码分析Activity的启动流程

    美女镇楼,辟邪! 源码,是一个程序猿前进路上一个大的而又不得不去翻越障碍,我讨厌源码,看着一大堆.5000多行,要看完得啥时候去了啊.不过做安卓的总有这一天,自从踏上这条不归路,我就认命了.好吧,我慢 ...

  9. Spring Boot启动流程详解(一)

    环境 本文基于Spring Boot版本1.3.3, 使用了spring-boot-starter-web. 配置完成后,编写了代码如下: @SpringBootApplication public ...

随机推荐

  1. javascript闭包1

    javascript闭包 在学习javascript闭包之前,需要先了解一下"作用域链". 每一段javascript代码都有一个与之关联的作用域链(scope chain),这个 ...

  2. 解决js中传值,Action获取是乱码问题

    1.先在js中进行编码 var str = $("mytext").val(); //转码,两次 str = encodeURI(str); str = encodeURI(str ...

  3. iOS多线程的初步研究1

    iOS多线程的初步研究(一) 对于多线程的开发,iOS系统提供了多种不同的接口,先谈谈iOS多线程最基础方面的使用.产生线程的方式姑且分两类,一类是显式调用,另一类是隐式调用. 一.显示调用的类为NS ...

  4. Opengl坐标转换

    有时候我们需要手动计算三维点对应的二维坐标,下面的矩阵公式就是模拟了一遍三维图形的流程.这里已假设读者具备了图形学的基础知识,比如矩阵乘法代表的三维变换,放射变换:还有齐次坐标等. 这里不考虑模型自身 ...

  5. 更有效率的使用Visual Studio2

    PS色调均化滤镜的快捷实现(C#源代码). photoshop色调均化功能通常是在进行修片处理前期比较常用的功能之一,其对扩展图像的对比度,增强视觉效果有一定的作用.在很多课本或者文章中,也称这种处理 ...

  6. tastypie Django REST framework API [Hello JSON]

    tastypie is a good thing. Haven't test it thoroughly. Gonna need some provement. Now I will introduc ...

  7. 关于ActiveMQ的一点总结

    ActiveMQ入门 作者:一路向北 摘要:本文主要讲述ActiveMQ的基本知识和使用方法,并简单结合spring使用ActiveMQ. 一.ActiveMQ特性和使用总览 企业消息软件从80年代起 ...

  8. Android开发(25)--framebyframe帧动画并实现启动界面到主界面的跳转

    Drawable animation可以加载Drawable资源实现帧动画.AnimationDrawable是实现Drawable animations的基本类.推荐用XML文件的方法实现Drawa ...

  9. Java实践 — SSH远程执行Shell脚本(转)

    原文地址:http://www.open-open.com/lib/view/open1384351384024.html 1. SSH简介         SSH是Secure Shell的缩写,一 ...

  10. qt5.5.0成功移植到IMX6中

    前阵子移植qt4.8.5到板子上成功后,总想着qt4有点旧,于是就想着玩qt5,之前都是在Windows7上写qt,写了个游戏,感觉还不错,但毕竟不能只能在PC机上跑,现在由于项目需要,要将qt搞到I ...