论文部分内容阅读
日志来源于用户上网行为、应用系统、操作系统、网络设备等,具有体量大、异构、价值密度低的特点。日志系统在各种应用系统中均作为基础组件存在,产生的日志数据蕴含着丰富的内涵和价值,是学术研究、商业开发的重要数据源。日志的存在形式有两种:日志文件中的日志记录和日志流。日志流的无限性及其巨大的数据量导致传统单一节点的集中式处理方式已无法应对大数据时代的日志流分析,构建分布式日志流处理系统成为必然趋势。同时,日志分析对时效性要求很高,所以实时计算框架是日志流处理系统中不可或缺的重要组成部分。开源分布式实时流处理系统Storm是目前被广泛应用的一种实时计算框架,具有高性能、可扩展以及易用性等优势。但在对Storm的应用及研究中发现,它默认的调度器和提供的数据流分组方法会导致工作节点负载不均衡、集群性能不佳等问题。所以,设计实现一种应用于流处理系统的任务调度机制和适应元组分布倾斜的流划分策略具有重要的研究价值和意义。本文完成了以下三方面的工作。 针对分布式流处理系统中当输入数据的键值呈现倾斜分布时工作节点负载不均衡的问题,提出一种适应元组分布倾斜的流划分策略。该策略使用lossy counting算法计算键值出现的频率,以区分热键和非热键,同时,在数据源节点上维护一个多维向量,记录每个工作节点的负载信息。当一个流元组到达后,依据其键值选择若干个候选工作节点,并查询负载向量表,把该元组发送至当前负载最小的节点进行处理。实验表明,与按键值划分的策略相比,该算法具有更好的负载均衡性,使系统的吞吐量提升40%,与随机划分相比,内存开销降低55%。 针对Storm使用的默认调度器采用轮询机制进行作业分配,未考虑工作节点的负载信息以及task之间的通信模型,影响数据处理延迟、系统吞吐量等性能指标的问题,提出一种高效的任务调度算法。算法的核心思想是:首先根据应用的负载计算该拓扑需要使用的工作节点个数,之后采用两阶段图划分算法把task分发至相应的工作节点,确保通信频繁的task在同一个工作节点的同一个JVM进程中进行计算,减少了进程间、节点间的通信开销。相比于默认的调度算法,元组的平均处理延时降低了20%。 设计实现了一个分布式日志流处理系统,主要包括日志采集模块、日志传输模块和日志统计模块。该系统支持多源日志采集、近实时的在线统计和海量日志的离线统计,具备高可靠、可扩展、高性能、负载均衡等特性。