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. Go Code

    目录 备注工作空间(Workspaces)GOPATH环境变量包路径(Package Path)你的第一个程序你的第一个类库包名字(Package Name)测试集成备注 备注返回目录 此文主要是对官 ...

  2. JDBC之事务隔离级别以及ACID特性

    JDBC之事务隔离级别以及ACID特性 事务隔离级别: 1.更新遗失(Lost update) 两个事务都同时更新一行数据,但是第二个事务却中途失败退出,导致对数据的两个修改都失效了.这是因为系统没有 ...

  3. 如何在ASP.NET大型应用系统的模块化开发实现多版本程序集并存支持[转载]

    如何在ASP.NET大型应用系统的模块化开发实现多版本程序集并存支持 这是我最近碰到的一个问题,有一家企业.NET程序员有80多人,产品线很多也很复杂.对于这样的产品,他们采用了模块化开发来实现复用与 ...

  4. jQuery Mobile (整合版)

    jQuery Mobile (整合版) 前言 为了方便大家看的方便,我这里将这几天的东西整合一下发出. 里面的例子请使用手机浏览器查看. 什么是jQuery Mobile? jquery mobile ...

  5. Java设计模式透析之 —— 适配器(Adapter)

    转载请注明出处:http://blog.csdn.net/sinyu890807/article/details/9400141 今天一大早,你的leader就匆匆忙忙跑过来找到你:“快,快,紧急任务 ...

  6. Kendo UI开发教程(9): Kendo UI Validator 概述

    Kendo UI Validator 支持了客户端校验的便捷方法,它基于HTML 5 的表单校验功能,支持很多内置的校验规则,同时也提供了自定义规则的便捷方法. 完整的Kendo UI 的Valida ...

  7. STL---基本算法---<stl_algobase.h>概述

    通过一个实例来说明这些算法的接口使用: #include <iostream> #include <algorithm> #include <functional> ...

  8. Android开发(30)--AutoCompleteTextView和MultiAutoCompleteTextView自动提示输入内容

    首先大家都见过类似这种效果, AutoCompleteTextView是实现动态匹配输入的内容 下面就通过一个实例来说明AutoCompleteTextView,同样,AutoCompleteText ...

  9. tensorflow与kubernetes/docker结合使用实践

    tensorflow tensorflow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流 ...

  10. mysql关联删除

    <delete id="deleteBatchUserOfSp" parameterType="java.lang.String" > delete ...