论文部分内容阅读
大数据正成为一个热点名词被广泛关注的同时,大规模的流数据处理也逐渐兴起,涌现出一批分布式流计算系统。然而流计算的复杂性和其应用场景的广泛性给该领域的基准测试带来很大的挑战。由于缺乏统一的基准测试标准,公正地衡量和比较这些系统困难重重。这篇论文涉足这个相对空白的领域。首先,论文指出了在该领域进行基准测试所需应对的挑战和所要满足的必要条件。在此基础上,该论文给出了自己的基准测试标准定义StreamBench。StreamBench是一个概念层面的不依赖具体系统的大规模流计算系统的基准测试标准,定义包含了数据生成方式规约,程序集选择,工作流集定义以及度量标准制定。在数据生成方式上,StreamBench提出在数据生成和数据消费中间利用一个消息系统作为中介的方式使得数据的生成和消费解耦。在程序集合的选择上,它由流计算场景中提取的七个小程序组成,涵盖了流计算中比较有代表性的操作。为了衡量除了性能外的诸如故障恢复能力和持续响应能力等其他指标,StreamBench构造了四套工作流集针对系统这些不同的方面进行测量,并且根据不同的工作流集制定了相应的度量标准。最后,笔者在不同大规模流计算框架上按照StreamBench的定义将其实现并进行实验。首先笔者对比了Apache Spark Streaming和Apache Storm上的各项指标的差异,在笔者的实验环境和配置下,Spark的吞吐量平均是Storm的5倍左右,但当平均每条记录长度增大时,两者吞吐量的差距会缩小。Spark的延迟一般在秒级,而Storm的延迟一般在十几毫秒以下,但也会随着程序复杂度和输入数量级迅速地提升甚至超过Spark。单节点故障对Spark没有明显的影响,但会导致Storm的吞吐量下降三分之一,延迟增加了四到五倍。两个系统都表现出良好的持续响应能力。另外,笔者还利用StreamBench证实了Storm版本0.9.3和版本0.9.1相比带来的性能提升,在笔者的实验环境中,吞吐量平均提升了26%,延迟平均降低了40%。此外,笔者还利用StreamBench测试出Apache Spark Streaming新开发的可靠Kafka数据获取这个功能相对与原先的数据获取方式带来的性能开销,笔者的实验环境中这个新功能使得吞吐量下降了40%–70%。