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的更多相关文章

  1. Apache Storm 1.1.0 发布概览

    写在前面的话 本人长期关注数据挖掘与机器学习相关前沿研究.欢迎和我交流,私人微信:846731084 我自己测试了一下这个版本,总的来说更加稳定,新增的特性并没有一一测试,仅凭kafk-client来 ...

  2. Apache Storm 1.1.0 中文文档 | ApacheCN

    前言 Apache Storm 是一个免费的,开源的,分布式的实时计算系统. 官方文档: http://storm.apache.org 中文文档: http://storm.apachecn.org ...

  3. 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 集群 ...

  4. Spark1.0.0 学习路径

          2014-05-30 Spark1.0.0 Relaease 经过11次RC后最终公布.尽管还有不少bug,还是非常令人振奋. 作为一个骨灰级的老IT,经过非常成一段时间的消沉,再次被点燃 ...

  5. Spark1.0.0 学习路线指导

    转自:http://www.aboutyun.com/thread-8421-1-1.html 问题导读1.什么是spark?2.spark编程模型是什么?3.spark运维需要具有什么知识?4.sp ...

  6. Centos7.4 Storm2.0.0 + Zookeeper3.5.5 高可用集群搭建

    想了下还是把kafka集群和storm集群分开比较好 集群规划: Nimbus Supervisor storm01 √ √ storm02 √(备份) √ storm03 √ 准备工作 老样子复制三 ...

  7. Apache Kafka分布式流处理平台及大厂面试宝典v3.0.0

    概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Apache Kafka官网地址 http://kafka.apache.org/ 最新版本为 3.0.0 Apach ...

  8. Castle Core 4.0.0 alpha001发布

    时隔一年多以后Castle 项目又开始活跃,最近刚发布了Castle Core 4.0.0 的alpha版本, https://github.com/castleproject/Core/releas ...

  9. 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 ...

随机推荐

  1. C#:vs2010无法打开vs2012创建的项目

    vs低版本打开高版本创建的项目时会提示"选择的文件是解决方案文件,但是用此应用程序的较新版本创建的,无法打开" 解决办法: 写字板打开解决方案sln文件 将其改成你现在用的vs版本 ...

  2. 浅谈PHP在各系统平台下的换行符

    <?php echo 'aaa\n';//用于linux.unix平台C的换行也是如此 echo 'bbb\r';//用于mac平台 echo 'ccc\r\n';//用于windows平台 / ...

  3. SZU:A66 Plastic Digits

    Description There is a company that makes plastic digits which are primarily put on the front door o ...

  4. 细节MARK

    在刷vijos1046的时候遇到了一些细节,MARK一下 1.哲学之前有告诫我说,输出long long的数的时候,最好用cout,不然容易出现编译器的问题,今天算是领教了 2.对于数组赋值问题 me ...

  5. WCF从零学习之WCF概述(一)

    WCF从零学习之WCF概述(一) 一.WCF概述 我先了解了分布式应用程序开发,所谓分布式应用程序是指应用程序分布在不同计算机上,通过网络来共同完成一项任务.通常为服务器/客户端模式. 在WCF发布之 ...

  6. pydev去掉右边的预览栏minimap

    eclipse pydev: preferences > PyDev > Editor > Overview Ruler Minimap

  7. ios学习之路四(新建Sprite Kit 项目的时候出现apple LLVM 5.0 error)

    在新建sprite kit 项目的时候出现"apple LLVM 5.0 error" 解决方法 在网上搜索,stackoverflow 上是这么说的点击打开链接.按照他的我也没解 ...

  8. ibatis实战之一对多关联

    在实际开发中,我们常常遇到关联数据的情况,如User对象拥有若干Book对象 每个Book对象描述了归属于一个User信息,这种情况下,我们应该如何处理? 通过单独的Statement操作固然可以实现 ...

  9. 玩下Javascript

    玩下Javascript 前言 好久没有更新博客了,也蛮少捣弄javascript,今儿看到一个题目,关于给你一个面板,你可以随意的在上面画矩形,可以移动和删除任意一个你创建的矩形,心血来潮搞着玩哈, ...

  10. GC算法精解(五分钟教你终极算法---分代搜集算法)

    GC算法精解(五分钟教你终极算法---分代搜集算法) 引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极.说不定若干年以后,还会有新的终极算法,而且几乎是一定会有,因为LZ相信高人们 ...