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。

Storm 1.0 新特性的更多相关文章

  1. 浅谈Tuple之C#4.0新特性那些事儿你还记得多少?

    来源:微信公众号CodeL 今天给大家分享的内容基于前几天收到的一条留言信息,留言内容是这样的: 看了这位网友的留言相信有不少刚接触开发的童鞋们也会有同样的困惑,除了用新建类作为桥梁之外还有什么好的办 ...

  2. Java基础和JDK5.0新特性

    Java基础 JDK5.0新特性 PS: JDK:Java Development KitsJRE: Java Runtime EvironmentJRE = JVM + ClassLibary JV ...

  3. Visual Studio 2015速递(1)——C#6.0新特性怎么用

    系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...

  4. atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性

    atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性   1.1. Servlet和JSP规范版本对应关系:1 1.2. Servlet2 ...

  5. 背水一战 Windows 10 (1) - C# 6.0 新特性

    [源码下载] 背水一战 Windows 10 (1) - C# 6.0 新特性 作者:webabcd 介绍背水一战 Windows 10 之 C# 6.0 新特性 介绍 C# 6.0 的新特性 示例1 ...

  6. C# 7.0 新特性2: 本地方法

    本文参考Roslyn项目中的Issue:#259. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...

  7. C# 7.0 新特性1: 基于Tuple的“多”返回值方法

    本文基于Roslyn项目中的Issue:#347 展开讨论. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: ...

  8. C# 7.0 新特性3: 模式匹配

    本文参考Roslyn项目Issue:#206,及Docs:#patterns. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# ...

  9. C# 7.0 新特性4: 返回引用

    本文参考Roslyn项目中的Issue:#118. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...

随机推荐

  1. mysql的安装、C++訪问mysql数据库、编码设置问题

    一.mysql的安装.这个相对简单,直接去官网下载mysql安装程序.就能够完毕安装过程,网上有非常多安装教程,这个没什么注意事项. 二.C++訪问mysql.主要是用到mysql定义的头文件,内部定 ...

  2. 怎样把多个Android Project打包成一个APK

    怎样把多个Android Project打包成一个APK(你的项目怎样引用其它项目). 怎样把多个android project 打包成一个apk呢,事实上原理是这种.一个主project引用其它的p ...

  3. Android Studio之Activity切换动画(三)

    1.上一篇文章"Android Studio之多个Activity的滑动切换(二)"中实现了多个activity之间的滑动切换,可是新切换出的activity大多是从右側进入 2. ...

  4. Codeforces 490F Treeland Tour 树上的最长上升子序列

    题目链接:点击打开链接 题意: 给定n个点的树. 以下n个数表示点权. 以下n-1行给出树. 找一条链,然后找出这条链中的点权组成的最长上升子序列. 求:最长上升子序列的长度. 思路: 首先是维护一条 ...

  5. do export method of oracle all database tables with dmp files.

    usually we need to export the database tables to backup and others use. So we must know what to do e ...

  6. oracle [union.minus.intersect]

    union 两张表的相同字段的数据[记录类型和列数要一致],合并,并且去重 can replace with "in" (但是如果是两个不同的表而且没什么关联的话必须要union了 ...

  7. Vue 资源

    一. 资源教程 综合类 vuejs 英文资料 Vue中文资料总汇 Vue.js 的一些资源索引 vue资料 入门类 vue 快速入门 Vue.js 中文系列视频教程 on Laravist 英文教程 ...

  8. toad for oracle中文显示乱码

    toad for oracle中文显示乱码 数据入库的时候中文显示正常,在toad for oracleclient和页面显示都是乱码!!! 原因:在数据入库时候出现的问题. 解决方式: 在系统变量中 ...

  9. mvc 发送QQ邮件

    试图部分代码: @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } ...

  10. EasyRTMP实现的rtmp推流的基本协议流程

    EasyRTMP介绍 EasyRTMP是结合了多种音视频缓存及网络技术的一个rtmp直播推流端,包括:圆形缓冲区(circular buffer).智能丢帧.自动重连.rtmp协议等等多种技术,能够非 ...