Storm 1.0.0
Storm 1.0.0版本增加了很多新的特性,可用性以及性能也得到了很大的改善,该版本是Storm发展历程上一个里程碑式的版本,主要特点如下。
性能提升
Storm 1.0.0版本最大的亮点就是性能提升,和之前的版本先比,Storm 1.0的速度能够提升至16倍,延迟能够降低至60%。Storm的拓扑性能和应用案例以及依赖的外部服务相关,但是对于大部分应用,相对于之前的版本,性能能够实现3倍的提升。
Pacemaker-心跳服务器
Pacemaker在Storm中是一个可选的后台进程,用来处理Worker心跳。当Storm的集群规模很大时,所有Worker都向Zookeeper发送心跳,由于Zookeeper上的数据是写磁盘的,而且为了实现数据的一致性,Zookeeper中Leader节点与Follow节点要进行通信,也来带来大量的网络通信开销,所以Zookeeper就容易成为一个性能瓶颈。
由于心跳数据一般是临时的,所以不需要将其持久化到硬盘上,也不需要跨节点实现数据的同步。把心跳数据存储到内存就行,Pacemaker主要完成的就是这个功能。Pacemaker提供了简单的基于内存的键/值存储,存储模式类似Zookeeper,Key通过目录的形式维护,Value就是字节数据。
分布式缓存API
在之前的版本中,Storm开发者一般将拓扑所需要的资源(如查询数据、机器学习模型)和拓扑打包成一个Topology Jar包。这种实现方式带来的问题就是更新困难,如果想更新拓扑所依赖的资源,就得重新打包和部署。另一个问题,如果依赖的数据很大(GB或更大),这会极大的增加拓扑的时启动时间。
Storm 1.0 版本采用分布式缓存API来实现文件(BLOBs)在多个拓扑之间的共享。分布式缓存中的文件可以通过命令行更新,无需重新部署拓扑。分布式缓存中文件大小可以是几KB, 也可以是几GB, 同时也支持ZIP和GZIP压缩格式。
Storm 1.0支持两种方式实现分布式缓存API。一种是基于Supervisor节点上的本地文件系统,另外一种基于HDFS实现。这两种实现都支持细粒度的 ACL 访问控制。
Nimbus HA
Storm之前的版本中,Nimbus节点存在单点失败的问题(Nimbus节点挂掉不会影响正在运行的拓扑),但是如果Nimbus节点不存在,用户不能提交新的拓扑,之前拓扑的任务也不能实现重新分配。
在Storm 1.0中,采用HA Nimbus来解决单点失败问题。在集群中运行多个Nimbus 服务实例,当Nimbus节点挂掉时,重新选举出新的Nimubs 节点,Nimbus主机可以随时加入或者离开集群。HA Nimbus通过采取分布式缓存API来实现数据的备份,保证拓扑资源的可用性。
原生流式窗口API
基于窗口的计算在流处理中非常普遍,连续的数据流可通过特定的准则(如时间)划分为离散的多批数据,针对每一批数据可以进行单独计算。一个典型例子就是计算过去一小时内最流行的Twitter主题。
窗口计算可用来实现聚合,连接,模式匹配等等。窗口可以看做一个基于内存的表,基于一定的策略(如时间),事件可以加入到表中也可以从表中删除。
之前的版本中,Storm开发者需要自己构建窗口计算逻辑,缺少一些高层的抽象,基于这个高层抽象用户在拓扑中可以以一种标准的方式定义窗口。
Storm 1.0版本中提供了原生的流式窗口API, 窗口定义主要包含两个参数: 窗口长度和窗口滑动间隔。Storm支持滑动窗口和滚动窗口两种方式,窗口大小可以基于时间长度或者事件个数。
状态管理-自动Checkpoint的有状态的Bolt
Storm 1.0引入了有状态的Bolt API, 并且支持自动Checkpoint。有状态的Bolt很容易实现,只需要继承 BaseStatefulBolt 类即可,在拓扑中,有状态的Bolt和无状态的Bolt可以一起使用。Storm可以自动管理Bolt的状态,比如说自动Checkpoint,而且当发生失败时,Storm可以恢复Bolt的状态。
Storm 1.0可以通过内存和Redis来实现状态的管理,之后的版本中,会考虑增加其他的状态存储方式。
自动反压机制
之前的版本中,限制注入到拓扑的数据流量的方式是启用ACKing机制,并且设置topology.max.spout.pending参数。 当用例不需要实现at-least-once语义容错时,采用这种方式会极大的降低性能。
Storm 1.0引入了基于高/低水位的自动反压机制,这里的水位可通过Task的缓冲区大小来表示。当缓冲区达到高水位时,反压机制自动触发,降低Spout的数据注入速率,直到达到低水位为止。
Storm的反压机制和Spout API是独立的,所以所有已经存在的Spout都支持自动反压。
资源感知调度器
Storm支持可插拔的拓扑调度器,Storm 1.0提供了基于资源的调度器,该调度器考虑到了集群中的内存(堆内和堆外)和CPU资源。资源感知调度器(RAS)允许用户为拓扑组件(Spout/Bolt)指定所需的内存和CPU资源,Storm会在不同的Worker之间调度拓扑Task,最大程度上满足这些Task的资源需求。
未来,Storm社区将会扩展RAS实现,考虑网络资源开销和机架感知。
动态的日志等级
Storm 1.0允许用户和管理员动态的调整正在运行的拓扑的日志等级,这种调整可以通过Storm UI或者命令行实现,用户也可以配置可选的超时时间,一旦超时,这种改变会自动恢复。日志文件可以通过Storm UI或者logviewer服务查找。
Tuple采样和调试
在拓扑的调试过程中,许多Storm用户采取增加 Debug Bolt或者Trident 函数来记录拓扑中的数据流信息,Storm 1.0中提供了新的拓扑调试功能。
Storm UI提供了这样的一个功能,允许用户对流入到拓扑或者特定的组件中的Tuples进行比例采样,这些采样数据可以直接从Storm UI观测到,也可以存入到硬盘中。
分布式的日志查找
Storm UI增加的另一个功能就是分布式的日志查找,查找对象可以是特定拓扑的所有日志文件,查找结果包含所有Supervisor节点的匹配结果。
动态的Worker性能分析
另外一个功能提升就是动态的Worker性能分析,这个新特性允许用户通过Storm UI获取Worker的分析数据,包括:
- Heap Dumps
- JStack 输出
- JProfile 记录
这些分析数据可以直接下载,用来离线分析,通过Storm UI也可以重启Workers。
原文摘自http://blog.csdn.net/wfzczangpeng/article/details/52711296
Storm 1.0.0的更多相关文章
- Apache Storm 1.1.0 发布概览
写在前面的话 本人长期关注数据挖掘与机器学习相关前沿研究.欢迎和我交流,私人微信:846731084 我自己测试了一下这个版本,总的来说更加稳定,新增的特性并没有一一测试,仅凭kafk-client来 ...
- Apache Storm 1.1.0 中文文档 | ApacheCN
前言 Apache Storm 是一个免费的,开源的,分布式的实时计算系统. 官方文档: http://storm.apache.org 中文文档: http://storm.apachecn.org ...
- CentOS下Storm 1.0.0集群安装具体解释
本文环境例如以下: 操作系统:CentOS 6 32位 ZooKeeper版本号:3.4.8 Storm版本号:1.0.0 JDK版本号:1.8.0_77 32位 python版本号:2.6.6 集群 ...
- Spark1.0.0 学习路径
2014-05-30 Spark1.0.0 Relaease 经过11次RC后最终公布.尽管还有不少bug,还是非常令人振奋. 作为一个骨灰级的老IT,经过非常成一段时间的消沉,再次被点燃 ...
- Spark1.0.0 学习路线指导
转自:http://www.aboutyun.com/thread-8421-1-1.html 问题导读1.什么是spark?2.spark编程模型是什么?3.spark运维需要具有什么知识?4.sp ...
- Centos7.4 Storm2.0.0 + Zookeeper3.5.5 高可用集群搭建
想了下还是把kafka集群和storm集群分开比较好 集群规划: Nimbus Supervisor storm01 √ √ storm02 √(备份) √ storm03 √ 准备工作 老样子复制三 ...
- Apache Kafka分布式流处理平台及大厂面试宝典v3.0.0
概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Apache Kafka官网地址 http://kafka.apache.org/ 最新版本为 3.0.0 Apach ...
- Castle Core 4.0.0 alpha001发布
时隔一年多以后Castle 项目又开始活跃,最近刚发布了Castle Core 4.0.0 的alpha版本, https://github.com/castleproject/Core/releas ...
- ASP.NET Core: You must add a reference to assembly mscorlib, version=4.0.0.0
ASP.NET Core 引用外部程序包的时候,有时会出现下面的错误: The type 'Object' is defined in an assembly that is not referenc ...
随机推荐
- [转]【Android】9-patch图片以及例子说明
1.何为9-patch? NinePatch图片以*.9.png结尾,和普通图片(png图片)的区别是四周多了一个边框(如下图所示): 采用NinePatch图片做背景,可使背景随着内容的拉伸(缩小) ...
- SHELL 近期学习
由于项目中很少使用到shell脚本所以.只是偶尔自学一点.慢慢积累.下面就把近段时间积累的发出来.学习. #sort sort 按首字母排序 sort -n 按数字大小 从小到大排序 sort -rn ...
- SignalR + KnockoutJS + ASP.NET MVC 实现井字游戏
SignalR + KnockoutJS + ASP.NET MVC 实现井字游戏 1.1.1 摘要 今天,我们将使用SignalR + KnockoutJS + ASP.NET MVC实现一个实 ...
- MVC 5.1的遭遇:“已添加了具有相同键的项”
ASP.NET MVC 3升级至MVC 5.1的遭遇:“已添加了具有相同键的项” 最近将一个项目从ASP.NET MVC 3升级至刚刚发布的ASP.NET MVC 5.1,升级后发现一个ajax请 ...
- vector如何进行局部排序
对于vector的全体排序,我们知道sort(vv.begin(),vv.end())来进行的. 但是对于如果是局部排序的话,比如,vector有100个元素,但我只想对10-80之间的数进行排序,如 ...
- 安装xdebug后var_dump输出没有格式化的问题
在ubuntu10.04下面配置Apache2.2 + PHP5.3的开发环境,顺便装了一个xdebug扩展方便调试代码. 但是环境配置好了之后却发现xdebug加载成功了但是var_dump输出的内 ...
- windows服务1053错误排查
公司员工离职,接手他的任务,告诉我windows服务已经完成,没来得及测试.好吧,我接着做...... 服务生成后,运行bat文件.启动服务失败,提示错误编码1053.根据以往的经验,一般是三方面引起 ...
- 如何简单而优雅地升级Visual NMP中的PHP版本
需求:自己想测试下不同版本的PHP性能,就想升级下 Visual 这个集成环境中PHP的版本 网上: 升级PHP到5.6.11 1.下载新的nts版的PHP并解压缩到bin\PHP下,保留原文件夹的名 ...
- Easyui + asp.net MVC 系列教程 完成登录
Easyui + asp.net MVC 系列教程 第09-17 节 完成登录 高清录制 前面八节 在这里 Easyui + asp.net mvc + sqlite 开发教程(录屏)适合入门 在接下 ...
- 微信公众平台自定义菜单创建代码实现—java版
搞了两天的自定义菜单,终于搞定了,现在分享下心得,以便后来者少走弯路...... 好了,先看先微信官方的API 官方写的很详细,但是我看完后很茫然,不知道你们什么感觉. 我知道是post一个带参数的 ...