文档章节

storm中worker、executor、task之间的关系

飓风2000
 飓风2000
发布于 2018/09/26 22:20
字数 1081
阅读 7
收藏 1

理清一下worker、executor、task、supervisor、nimbus、zk这几个之间的关系

先来看一张图

这里写图片描述

 

(图片来自:http://www.cnblogs.com/foreach-break/p/storm_worker_executor_spout_bolt_simbus_supervisor_mk-assignments.html)

  首先从微观上来看:worker即进程,一个worker就是一个进程,进程里面包含一个或多个线程,一个线程就是一个executor,一个线程会处理一个或多个任务,一个任务就是一个task,一个task就是一个节点类的实例对象。

  一个worker处理topology的一个子集,同一个子集可被多个worker同时处理,一个worker有且仅为一个topology服务,不会存在一个worker即处理topology1的几个节点,又处理topology2的几个节点;一个executor处理一个节点,但这个节点可能会有多个实例对象,所以可通过配置并发度和setNumTask来配置一个executor同时处理多少个task。默认情况下一个executor就处理一个task。如果处理多个task,executor会循环遍历执行task。

  那么一个excutor处理多个task,有什么用?一种理解的是可以方便以后扩容。首先要知道,topology代码一旦提交到nimbus上去之后,task数量随之而定,以后永不再改变,甚至重启topology,都不会再改变task数量,除非改代码,再重新提交。而设置并行度就不一样了,我们不需要重新提交代码,就可以修改topology的并发,可以随时修改。但一个executor必须要处理一个task,如果以前我们默认有4个executor,4个task,即一个executor处理一个task,好了,我现在感觉现在并发不够,处理速度跟不上,想调高一些并发,调为8个,呵呵,但task数量只有4个,多出来的executor也只是闲着,所以调高并发也没卵用了。就像这里有4个苹果,也有4个人,一个人吃一个苹果要5分钟,现在需要在5秒钟内将苹果吃完,规则是一个苹果只能被一个人吃。现在一个人吃一个,并发为4,需要5分钟,显然满足不了,于是你调高并发,叫来8个人,因为一个苹果只能被一个人吃,所以另外4个不就是干瞪眼吗?还浪费资源。所以为了方便以后调并发数,还是要设置一下task数量的。

然后再来看看宏观的storm架构,要想理清整个架构,只看概念觉得枯燥,不如来看看一个topology从提交到运行的整个过程放松一下:

一个topology的提交过程:

  1. 非本地模式下,客户端通过thrift调用nimbus接口,来上传代码到nimbus并触发提交操作.

  2. nimbus进行任务分配,并将信息同步到zookeeper.

  3. supervisor定期获取任务分配信息,如果topology代码缺失,会从nimbus下载代码,并根据任务分配信息,同步worker.

  4. worker根据分配的tasks信息,启动多个executor线程,同时实例化spout、bolt、acker等组件,此时,等待所有connections(worker和其它机器通讯的网络连接)启动完毕,此storm-cluster即进入工作状态。

  5. 除非显示调用kill topology,否则spout、bolt等组件会一直运行。

这里写图片描述

(图片来自:http://www.cnblogs.com/foreach-break/p/storm_worker_executor_spout_bolt_simbus_supervisor_mk-assignments.html)

nimbus是整个集群的控管核心,总体负责了topology的提交、运行状态监控、负载均衡及任务重新分配,等等工作。
zk就是一个管理者,监控者。

  总之一句话:nimbus下命令(分配任务),zk监督执行(心跳监控,worker、supurvisor的心跳都归它管),supervisor领旨(下载代码),招募人马(创建worker和线程等),worker、executor就给我干活!其实说白了跟我们常见的军队管理是一个道理啊。

  这里只是粗浅的分析了一下几者之间的关系,还没有谈论到负载均衡和任务调度,没有深入到代码层次,后面会相继补充。如有错误欢迎批评指正!

本文转载自:https://www.cnblogs.com/Chuck-wu/p/4926038.html

共有 人打赏支持
飓风2000
粉丝 37
博文 330
码字总数 136046
作品 0
浦东
高级程序员
私信 提问
Storm笔记整理(四):Storm核心概念与验证——并行度与流式分组

[TOC] Storm核心概念之并行度 Work 1个worker进程执行的是1个topology的子集(注:不会出现1个worker为多个topology服务)。1个worker进程会启动1个或多个executor线程来执行1个topology的(...

xpleaf
2018/04/13
0
0
聊聊storm worker的executor与task

序 本文主要研究一下storm worker的executor与task Worker storm-2.0.0/storm-client/src/jvm/org/apache/storm/daemon/worker/Worker.java main方法创建Worker,然后调用start Worker.star......

go4it
2018/10/13
0
0
Storm目录树、任务提交、消息容错、通信机制

Storm技术增强 注:学习本课程,请先学习Storm基础 课程目标: 通过本模块的学习,能够掌握Storm底层的通信机制、消息容错机制、storm目录树及任务提交流程。 课程大纲: 1、 Storm程序的并发...

飓风2000
2018/09/26
0
0
Storm概念讲解和工作原理介绍

Strom的结构 Storm与传统关系型数据库 传统关系型数据库是先存后计算,而storm则是先算后存,甚至不存 传统关系型数据库很难部署实时计算,只能部署定时任务统计分析窗口数据 关系型数据库重...

张超
2015/04/26
0
0
Storm源码阅读总结(1) -- Client Nimbus Supervisor

Client 客户端提交作业 NimbusClient: RPC 客户端, 向RPC服务端即Nimbus Server发起RPC调用. App通过StormSubmitter提交计算拓扑作业submitTopology: 首先提交jar包, 会向Nimbus服务器发起b...

zqhxuyuan
2018/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

npm安装教程

一、使用之前,我们先来掌握3个东西是用来干什么的。 npm: Nodejs下的包管理器。 webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资源的合并...

Bob2100
15分钟前
0
0
Failure to find net.sf.json-lib:json-lib:jar:2.2.2

Could not resolve dependencies for project com.platform:platform-gateway:jar:1.0: Failure to find net.sf.json-lib:json-lib:jar:2.2.2 in http://maven.aliyun.com/nexus/content/gro......

SummerGao
17分钟前
0
0
netty 系列博客

https://blog.csdn.net/tjreal/article/list/2?

Java搬砖工程师
20分钟前
0
0
《大话数据结构》读后总结(二)

一、数据结构基本概念 1. 数据类型 数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。 在C语言中,按照取值的不同,数据类型可以分为两类: 原子类型:是不可以再分解...

徐曙辉
23分钟前
4
0
数据清理的终极指南

我花了几个月的时间分析来自传感器、调查及日志等相关数据。无论我用多少图表,设计多么复杂的算法,结果总是会与预期不同。更糟糕的是,当你向首席执行官展示你的新发现时,他/她总会发现缺...

阿里云官方博客
25分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部