wwwtl222333com/Storm集群I3O9439III2架构分析
史上最通俗易懂的Storm集群架构分析,最大白话的Storm并行度理解
初识Strom:初识实时流处理Storm,掌握其编程模型、核心概念、数据处理流程
一、原理架构图
一个连续运行的主节点组织若干节点工作,构成了一个Storm集群。
在 Storm 集群中,有两类节点:主节点(master node)和工作节点(worker nodes)。
◾主节点运行着一个叫做 Nimbus 的守护进程,负责在集群中分发代码,为工作节点分配任务,并监控状态。Supervisor守护进程作为拓扑的一部分运行在工作节点上。
◾每一个工作节点上面运行一个叫做Supervisor的节点。Supervisor会监听分配给它那台机器的工作,根据需要启动/关闭工作进程。每一个工作进程执行一个topology的一个子集;一个运行的topology由运行在很多机器上的很多工作进程组成。
◾Nimbus和Supervisor之间的所有协调工作都是通过Zookeeper集群完成。另外,Nimbus进程和Supervisor进程都是快速失败(fail-fast)和无状态的。所有的状态要么在zookeeper里面, 要么在本地磁盘上。这也就意味着你可以用kill -9来杀死Nimbus和Supervisor进程, 然后再重启它们,就好像什么都没有发生过。这个设计使得Storm异常的稳定。
相关概念的深度解读:
◾Nimbus:负责资源分配和任务调度。
◾Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。
◾Worker:运行具体处理组件逻辑的进程。拓扑是在一个或多个工作进程(worker processes)中运行的,但一个worker只会运行一个topology,不会同时为多个topology服务。每个工作进程都是一个实际的 JVM 进程,并且执行拓扑的一个子集。Storm会在所有的worker 中分散任务,以便实现集群的负载均衡。worker只是一个JVM进程,并不是指1台机器。1台机器可以开启多个worker进程。
◾Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,同一个spout/bolt的task可能会共享一个物理线程,该线程称为executor,即:一个executor只会同时运行一个task,即:一个spout/bolt实例,当有多个task的时候,会被轮询调用的。简而言之,就是一个task运行着一个spout/bolt实例。
最后,来张图来展示它们的关系:
现在想象一下,很容易在整个 Storm 集群定义每个 bolt 和 spout 的并行性级别,因此你可以无限的扩展你的拓扑结构。通过增加Storm的并行度,可以大大提高程序运行的效率。
二、大白话理解Storm并行度:worker、executor和task之间的工作机制
1、引言
默认情况下,1个topology默认使用1个worker进程,每个worker进程默认启动1个executor,每个executor默认启动1个task。
注释:一旦启动了一个topology,worker是不能动态调整的,但是executor是可以动态调整的!!!
即:进程数固定,线程可以动态调整!!!
new一个Spout就是一个task;
new一个bolt又是一个task;
==>一个线程里面就有了两个task!!!
==>为了提高并行度:可以开多个worker,多个executor,而配置多个task(Spout或bolt)是没有效果,只是为了增加逻辑性。
2、通过自定义配置改变Strom的并行度
我们先放一个官网的topology示例,通过该实例配置来一步步的介绍这个理解起来稍微有些复杂的概念:
我们先解读一下上面配置的含义:
◾该topology配置了2个worker进程,也就是同样的工作会有2个进程来并行进行,可以肯定地说,2个worker肯定比1个worker执行效率要高很多,但是并没有2倍的差距;
◾默认情况下,1个supervisor节点最多可以启动4个worker进程(因为默认配置里面就最多只分配了4个,当然你也可以改这个配置)
◾配置了一个 blue-spout,并且为其指定了 2 个 executor,即并行度为2;
◾配置了一个 green-bolt,并且为其指定了 2 个 executor,即并行度为2,并设置了4个task;
◾配置了一个 yellow-bolt,并且为其指定了 6 个 executor,即并行度为6;
可以看出,这个图片完整无缺地还原了代码里设定的 topology 结构:
◾图左最大的灰色方框,表示这个 topology;
◾topology 里面刚好有两个白色方框,表示2个 worker 进程;
◾每个 worker 里面的灰色方框表示 executor 线程,可以看到2个 worker 方框里各有5个 executor;
◾为什么各有5个executor呢?
◾因为代码里面指定的 spout 并行度=2,green-bolt并行度=2,yellow-bolt并行度=6,加起来刚好是10,而配置的 worker 数量为2,那么自然地,这10个 executor 会均匀地分配到2个 worker 里面;
◾每个 executor 里面的黄蓝绿(写着Task)的方框,就是最小的处理单元 task 了。
◾我们重点看绿色的 Task 方框,与其他 Task 不同的是,两个绿色方框同时出现在一个 executor 方框内。
◾为什么会这样呢?
◾大家回到上文看 topology 的定义代码,topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2).setNumTasks(4),这里面的 setNumTasks(4) 表示为该 green-bolt 指定了4个 task,且 executor 的并行度为2,那么自然地,这4个 task 会均匀地分配到2个 executor 里面;
◾图右的三个圆圈,依次是蓝色的 blue-spout,绿色的 green-bolt 和黄色的 yellow-bolt,并且用箭头指示了三个组件之间的关系。spout 是数据的产生元件,而 green-bolt 则是数据的中间接收节点,yellow-bolt 则是数据的最后接收节点。这也是 DAG 的体现,有向的(箭头不能往回走)无环图。
下节我们将学习Storm的单机环境和分布式环境的搭建、如何提交/查看/杀死Storm作业、Storm UI界面参数介绍,并实战演示storm并行度参数调优以增强我们对Storm并行度的理解
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里HBase高可用8年抗战回忆录 | 10月18号栖夜读
点击订阅云栖夜读日刊,专业的技术干货,不容错过! 阿里专家原创好文 1.阿里HBase高可用8年抗战回忆录 2011年毕玄和竹庄两位大神将HBase引入阿里技术体系,2014年接力棒转到东8区第一位HBase commiter天梧手中,多年来与淘宝、旺旺、菜鸟、支付宝、高德、大文娱、阿里妈妈等几乎全BU合作伙伴携手共进,支撑了双十一大屏、支付宝账单、支付宝风控、物流详情等核心业务。2018年双十一,HBase全天处理请求2.4万亿行,单集群吞吐达到千万级别。从一个婴儿成长为青年,阿里HBase摔过很多次,甚至头破血流,我们在客户的信任之下幸运的成长,感激涕零。2017年开始阿里HBase走向公有云,我们有计划的在逐步将阿里内部的高可用技术提供给外部客户,目前已经上线了同城主备,将作为我们后续高可用能力发展的一个基础平台。本文分四个部分回顾阿里HBase在高可用方面的发展:大集群、MTTF&MTTR、容灾、极致体验,希望能给大家带来一些共鸣和思考。阅读更多》》 2.《Flutter in action》开放下载!闲鱼Flutter企业级实践精选 闲鱼是国内最早使用Flutter的...
- 下一篇
阿里云RPA(机器人流程自动化)干货系列之二:认识RPA(下)
导读:本文是阿里云RPA(机器人流程自动化)干货系列之二,主要介绍了RPA的发展齐纳经和主要使用场景有哪些,目前国内外主流的RPA厂商以及RPA的未来在哪。 一、RPA的发展前景 根据Gartner的最新研究,2018年全球机器人流程自动化(RPA)软件的开支预计将达到6.8亿美元,同比增长57%,到2022年支出达到24亿美元。 Gartner副总裁CathyTornbohm表示:“最终用户组织把RPA技术作为手动任务自动化的一种快速简便的方法。一些员工将继续执行那些要求他们手动剪切、粘贴和更改数据的日常任务。但是当RPA工具执行这些操作时,误差率会降低,数据质量会提高。” 如今,RPA最主要的应用领域包括电商、财务/税务、银行、制造业、新零售、保险、物流、政府、公安等各行各业。Tornbohm表示:“通常,这些组织很难将财务和HR系统
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题