1.0 版本是 Apache Storm 发展过程中一座重要的里程牌,负责 Apache Storm 项目的 Apache 软件基金会副总裁 P. Taylor Goetz 这样写道。该版本包含许多新特性和改进。尤其是,Goetz 声称它带来了3 到16 倍的性能提升。
Storm 是一个事件处理程序,可以对流数据进行分布式处理。一个 Storm 应用程序由“spouts”和“bolts”构成,它们被配置成一个有向无环图,用来表示信息源和数据处理程序。Storm 的主要特点是能处理实时数据,不像 Hadoop 那样允许批处理。
据 Goetz 介绍,与先前的版本相比,Storm 1.0 的性能最高提升了 16 倍,在大多数情况下预计都会有 3 倍的性能提升。特别地,性能的重大改善似乎来自下面的更改:
- 在
SpoutOutputCollector.emit()
调用中使用 Java重新实现了Clojurereduce
函数; - 在
DisruptorQueue
中引入批处理,代替 spout 层的批处理,这以增加延迟为代价大幅提升了吞吐量。
特别地,雅虎工程师所做的大量的基准测试表明,与其他两个流行的分布式处理框架 Apache Flink 和 Apache Spark 相比,性能历来是 Storm 的主要竞争优势之一。
此外,Storm 1.0 包含许多值得注意的新特性,例如:
- Pacemaker:一个处理工作进程心跳的心跳守护进程,它常驻内存,提供了比 ZooKeeper 更好的性能;
- 分布式缓存及相关 API:它允许在拓扑之间共享文件。文件可以随时更新,而不需要重新部署受影响的拓扑。这对于当前将资源文件包含在拓扑 jar 包中的做法是一种改进,这种做法更新文件时需要重新部署;
- 高可用 Nimbus:使用一个 Nimbus 节点的动态集群代替单个 Nimbus 实例,如果当前的群首节点出现故障,就会选出新的“群首”;
- 流窗口 API:新增窗口定义支持,这些窗口可以应用于数据处理,比如在最后一个小时里计算最热门的话题。以前,开发人员必须构建自己的窗口逻辑;
- 自动反压:当任务缓冲区的大小达到了指定的限制(以百分比表示),Storm 就会自动降低拓扑 spouts 的速度;
- 资源感知调度器:一种新的调度器实现,在将任务分配给最能满足特定需求的工作进程时考虑了集群中可用的内存和 CPU 资源;
- 动态工作进程性能分析:旨在让用户可以从 Storm UI 获取工作进程性能数据,比如堆转储文件、JStack 输出。
读者可以从 GitHub 上下载 Apache Storm 1.0,或者从 Storm 下载页面上获取各种打包格式。
查看英文原文: Apache Storm Reaches 1.0, Brings Improved Performance, Many New Features
评论