storm实战总结笔记
storm是一款开源的、分布式的、低延迟的、可扩展的、容错的实时计算框架,采用clojure和java的混合编程,总体两者的代码总量是55开的,但clojure语言具有很强的表现力,所以storm的核心基本都是使用clojure语言实现的。jstorm是阿里对storm的java改写版本,阿里团队也对其做了一些优化,使得jstorm更加强大,而且jstorm是完全对storm兼容的,只是有一些细微的差别,但是基本都是内部的差别,对外的API不会有什么区别,所以学习的成本也不会增加太多。
我们对开源的、分布式的、低延迟的、可扩展的、容错的做一下解释:
开源的:感觉这个应当是不用讲的,开源不光意味着代码的开放,同样意味着其具有强大的生命力,因为jstorm不是属于一个团队的,而是大家都可以对其进行改造,生命力源自于此。
分布式的:一台物理机器的CPU、内存、磁盘终究是有限度的,当数据量巨大的情况下,利用多台廉价的机器来协同完成计算成为了上上策,而jstorm也就是用于协同多台机器完成计算的框架,当然这里的计算是指实时计算。其实分布式也是容错性的一部分。
低延迟的:低延迟一方面得益于他是分布式的,计算能力可以通过机器数量的扩展得到提升。传统的计算框架中也有很多分布式的,比如hadoop,但是那是批量处理的模式,对数据进行缓存后再进行一个批处理,比如计算网站的访问量,批处理的方式是一个小时内的数据进行计算,得到访问量。而实时计算的做法有两种,一种是一条一条记录的计算,这样讲处理的延迟就会降低,这也是jstorm采用的方案,另一种便是将批处理的“批”的时间间隔大小减少,比如一个batch时间定为200ms,这样他的处理延迟也会比传统的离线批处理快很多,这是另一款实时处理框架spark streaming的处理方法。
可扩展:通过源代码的阅读,发现jstorm采用的是thrift的server/client的模式,rpc通过thrift定义接口,代码的各个大板块之前都可以使用不同的语言开发,但是提供给我们使用的API的语言貌似只有java,也可以有一些扩展,但是支持的版本比较低。
容错:不同的应用程序对容错性的要求不同,如银行的交易,对容错性较高,网站访问数量的计算,其容错性要求就比较低。总的来数,核心业务的容错性要求较高。jstorm的容错性体现在两方面,一是其为集群的、分布式的系统,而且jstorm是一个无状态的模型,其所有的状态都保存在一个集群的zookeeper中,在机器、进程死掉后,可以通过zookeeper中记录的信息进行重启。二是其具有ack机制,对每一条信息,都可以进行ack告知上游处理完成,或者fail,告诉上游处理不成功,没能手动的ack,便会触发timeout,上游也会fail,根据我们容错性要求的不同,其处理办法也不同。
1个worker进程执行的是1个topology的子集(注:不会出现1个worker为多个topology服务)。1个worker进程会启动1个或多个executor线程来执行1个topology的component(spout或bolt)。因此,1个运行中的topology就是由集群中多台物理机上的多个worker进程组成的。
executor是1个被worker进程启动的单独线程。每个executor只会运行1个topology的1个component(spout或bolt)的task(注:task可以是1个或多个,storm默认是1个component只生成1个task,executor线程里会在每次循环里顺序调用所有task实例)。
task是最终运行spout或bolt中代码的单元(注:1个task即为spout或bolt的1个实例,executor线程在执行期间会调用该task的nextTuple或execute方法)。topology启动后,1个component(spout或bolt)的task数目是固定不变的,但该component使用的executor线程数可以动态调整(例如:1个executor线程可以执行该component的1个或多个task实例,当执行多个task实例时executor的数量就减少了)。这意味着,对于1个component存在这样的条件:#threads<=#tasks(即:线程数小于等于task数目)。默认情况下task的数目等于executor线程数目,即1个executor线程只运行1个task。
如果一个topology里面一共有一个spout, 一个bolt。 其中spout的parallelism是2, bolt的parallelism是4, 那么我们可以把这个topology的总工作量(即task的数量)看成是6, 那么一共有6个task,那么/tasks/{topology-id}下面一共会有6个以task-id命名的文件,其中两个文件的内容是spout的id, 其它四个文件的内容是bolt的id。
topology里面的组件(spout/bolt)都根据parallelism被分成多个task, 而这些task被分配给supervisor的多个worker来执行。
task都会跟一个componment-id关联, componment是spout和bolt的一个统称。
总结:一个topology可以通过setNumWorkers来设置worker的数量,通过设置parallelism来规定executor的数量(一个component(spout/bolt)可以由多个executor来执行),通过setNumTasks来设置每个executor跑多少个task(默认为一对一)。
storm实战总结笔记的更多相关文章
- Linux实战教学笔记08:Linux 文件的属性(上半部分)
第八节 Linux 文件的属性(上半部分) 标签(空格分隔):Linux实战教学笔记 第1章 Linux中的文件 1.1 文件属性概述(ls -lhi) linux里一切皆文件 Linux系统中的文件 ...
- Linux实战教学笔记07:Linux系统目录结构介绍
第七节 Linux系统目录结构介绍 标签(空格分隔):Linux实战教学笔记 第1章 前言 windows目录结构 C:\windows D:\Program Files E:\你懂的\精品 F:\你 ...
- Linux实战教学笔记06:Linux系统基础优化
第六节 Linux系统基础优化 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 基础环境 第2章 使用网易163镜像做yum源 默认国外的yum源速度很慢,所以换成国内的. 第一步:先备份 ...
- Linux实战教学笔记05:远程SSH连接服务与基本排错(新手扫盲篇)
第五节 远程SSH连接服务与基本排错 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 远程连接LInux系统管理 1.1 为什么要远程连接Linux系统 在实际的工作场景中,虚拟机界面或物理 ...
- Linux实战教学笔记04:Linux命令基础
第四节:Linux命令基础 标签(空格分隔):Linux实战教学笔记 第1章 认识操作环境 root:当前登陆的用户名 @分隔符 chensiqi:主机名 -:当前路径位置 用户的提示符 1.1 Li ...
- Linux实战教学笔记03:操作系统发展历程及系统版本选择
标签(空格分隔): Linux实战教学笔记-陈思齐 第1章 Linux简介 1.1 什么是操作系统? 简单讲:操作系统就是一个人与计算机硬件的中介. 操作系统,英文名称Operating System ...
- Linux实战教学笔记02:计算机系统硬件核心知识
标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 互联网企业常见服务器介绍 1.1 互联网公司服务器品牌 - DELL(大多数公司,常用) - HP - IBM(百度在用) 浪潮 联想 航天联 ...
- Linux实战教学笔记01:计算机硬件组成与基本原理
标签(空格分隔): Linux实战教学笔记 第1章 如何学习Linux 要想学好任何一门学问,不仅要眼睛看,耳朵听,还要动手记,勤思考,多交流甚至尝试着去教会别人. 第2章 服务器 2.1 运维的基本 ...
- 转载文档:Storm实战常见问题及解决方案
该文档为实实在在的原创文档,转载请注明: http://blog.sina.com.cn/s/blog_8c243ea30101k0k1.html 类型 详细 备注 该文档是群里几个朋友在storm实 ...
随机推荐
- android 视图设置多个setTag数据
1)在string.xml 文件中添加 <item tyoe="id" name = "tag_first" /> <item tyoe=&q ...
- Lucene简介(理论篇)
Lucene 是一个软件程序的库或者说是一个工具套件,而不是一个完全的具有搜索特性的应用程序.它关注于自己的文本检索和搜索功能,提供API来完成商业中所涉及到的搜索功能.在搜索功能中,Lucene的功 ...
- iOS 测试驱动开发
测试驱动开发是敏捷开发的一部分,它一般有“red-green- refactor”步骤 iOS测试驱动开发的工具 一. OCUnit 是Xcode自带的测试工具 其使用步骤分为 1 建立测试的Targ ...
- 我是实践派之mongo的一主多从
mongo一主多从 为什么要做一主多从? mongodb天生就是为了分布式而生的,为了保证数据读写分离和数据安全,把数据放在不同的机子上,可以减少主节点的读压力,而让从节点去承受读请求压力. 主节点用 ...
- 服务器如何防ssh服务暴力破解??
如图: 当我们遭到暴力破解ssh服务该怎么办 内行看门道 外行看热闹 下面教大家几招办法: 1 密码足够的复杂,密码的长度要大于8位最好大于20位.密码的复杂度是密码要尽可能有数字.大小写字母和特 ...
- 用Vue中遇到的问题和处理方法(一)
用Vue开发项目有一段时间,在实际项目中遇到一些问题,在里把问题记录下来,并附上解决方案,给遇到同样的问题的码友提供一个解决思路吧: 测试部抛出问题一:在Vue1.0路由vue-router中,当点击 ...
- Android自定义控件系列(二)—icon+文字的多种效果实现
转载请注明出处:http://www.cnblogs.com/landptf/p/6290810.html 今天给大家带来一个很简单但是很常用的控件ButtonExtendM,在开发中我们经常会用到图 ...
- java中的ArrayList 、List、LinkedList、Collection关系详解
一.基础介绍(Set.List.Map) Set(集):集合中的元素不按特定方式排序,并且没有重复对象.他的有些实现类能对集合中的对象按特定方式排序. List(列表):集合中的元素按索引位置排序,可 ...
- CA认证
nginx下证书配置 nginx 下 配 置 CA 认 证 为nginx配置https并自签名证书 开启443端口 实验环境: centos6.5 192.168.16.14 [ ...
- 百度的hao123.com篡改浏览器首页,解决办法
快捷方式右键找到chrome.exe, 把chorme.exe修改成别的名字例如 chromeFuckHao123.exe 就OK了. hao123是用病毒的形式查找chrome.exe然后进程注入的 ...