当大量数据不断产生时,数据就像一股水流。包括应用程序、联网设备、服务器日志文件、各种在线活动和基于位置的数据在内的各种数据可以形成连续的数据流。我们把这种处理数据的形式称为流数据。
在流数据中,可以实时收集、管理、存储、分析各种类型的数据源并提供信息。对于大多数不断产生动态新数据的场景,采用流式数据处理是有益的,适用于大多数行业和大数据用例。
流数据处理系统用于分析流数据。已经有很多被企业广泛使用的流数据处理系统,比如ApacheFlink、ApacheStorm、SparkStreaming、ApacheHeron等。这些流数据处理应用程序的特点是部署量大,应用程序运行时间长(数月甚至数年),并且每个应用程序运行的数据不同,因此即使是很小的性能改进也能为公司带来显着的财务收益。
为了提高系统性能,需要调整资源配置参数以指定任务使用的CPU内核和内存等资源的数量。但是为流数据处理应用选择关键配置参数并找到它们的最佳值非常具有挑战性,并且手动调整这些参数非常耗时。
对于一个单一的未知应用,对流数据处理系统有深刻理解的性能工程师可能需要几天甚至几周的时间才能找到它的最佳资源配置。
为了解决上述问题,研究人员开始应用机器学习方法进行研究。一项研究发表在IntelligentComputing上。作者使用ApacheFlink程序作为实验性流数据处理应用程序。
机器学习方法用于自动高效地调整流数据处理应用程序的资源分配参数。它应用随机森林算法为流数据处理程序构建高精度性能模型,以输入数据的速度和关键配置参数为输入,输出应用程序的尾部延迟或吞吐量。此外,机器学习方法利用贝叶斯优化算法(BOA)迭代搜索高维资源配置空间以实现最佳性能。
实验表明,这种方法可以显着改善99%的尾部延迟和吞吐量。本研究提出的方法是一种独立于Flink系统的参数调优工具,可以集成到其他流处理系统中,如SparkStreaming和ApacheStorm。