1.简单介绍一下flink背景
随着科技的发展,大数据框架处理海量数据越来越流行。有状态流计算将会逐步成为企业作为构建数据平台的架构模式,而目前从社区来看,能够满足的只有Apache Flink。Flink通过实现Goolge Dataflow流式计算模型实现了高吞吐、低延迟、高性能兼具实时流式计算框架。同时Flink支持高度容错的状态管理,防止状态在计算过程中因为系统异常而出现丢失。Flink具有先进的架构理念,诸多的优秀特性,以及完善的编程接口,而Flink也在每一次的Release版本中,不断推出新的特性。在未来,Flink将不仅作为实时流式处理的框架,更多的可能会成为一套实时的状态存储引擎,让更多的用户从有状态计算的技术中获益。因此批流融合的Flink大数据处理框架越来越受欢迎。
Apache Flink是一个开放源码的分布式数据处理引擎,基于Google Dataflow模型。作为新型的大数据框架,Flink有许多对性能影响较大的配置参数。
2.flink1.7.2参数初步筛选
Flink1.7提供了300多项配置参数,主要分类为:核心,JobManager,TaskManager,分布式协调(通过Akka),REST,Blob服务器,心跳管理器,SSL设置,网络通讯(通过Netty),Web前端,文件系统,编译/优化,运行时算法,Resource Manager,YARN,Mesos,HA,Zookeeper安全。
详细的配置参数请参照官方翻译flink配置参数。
内容如下图:
为了更纯粹地分析Flink框架本身的特性,我们只关注那类直接影响Flink框架本身的配置,记作“native”configuration,因此过滤了Flink on mesos、Flink on yarn等托管于第三方的相关配置;在这类“native”configuration中,有许多与性能无关的配置如端口号设置,web UI配置等,也有50项与性能相关的配置。
具体初步筛选的配置参数如下:
3.筛选重要配置参数
修改flink的配置文件conf/flink-conf.yaml,将50个参数的默认值写到配置文件中。我们对这些配置进行了控制变量测试,即仅变换单一配置项的值观察workload的性能变化,运行Hibench的flink程序identity,获取程序运行过程中的CPU,内存,磁盘,和网络四个方面数据。主要包括进程的CUP利用率,进程的内存利用率,总的内存利用率,buffers,cached,进程io的write_bytes,磁盘io的read_bytes,write_time,网络io 的bytes_sent,共9个资源指标如下:
实验环境:
节点配置:
1个master和1个slave,其配置为Linux16.0.4系统、内核数为4,型号Inter®Core™i5-7500 CPU @ 3.40GHz、8GB的物理内存
软件环境:
hadoop2.7.7/flink1.7.2/Hibench7.0/kafka_2.11-2.3.0/zookeeper-3.4.8
实验过程:
- 对初步筛选的50个配置参数手动分配n个可取的波动值
- 每个参数的不同波动值及默认配置参数为一组,运行hibench程序的identity程序,在运行过程中获取资源指标
- 其它参数取默认值,变动组的参数不同波动值分别运行100次
- 计算每个参数不同波动值收集的各个计算资源的平均值,与默认参数平均值进行对比,筛选重要参数
注:本方法是采用的单一变量控制法,没有考虑配置参数之间的相互影响,在下一阶段会进一步考虑。
4.筛选参数实验结果
实验结果:通过实验发现,选取得9个计算资源指标中有四个在随着时间增加,其余5个指标在不断波动。有process_cpu%,process_memory%,buffers,cached,process_io_write_bytes。将50个配置参数得不同取值对应的计算资源的指标平均值与默认参数对应的计算资源的指标平均值进行对比,不同配置参数的不同取值对应的进程CPU利用率波动图如下图1,进程内存利用率如图2。
该散点图为初步筛选的50个配置参数,每个配置参数对应的不同取值,每个取值运行100次程序获取的进程的CPU利用率的平均值。黑点表示平均的CPU利用率,蓝线表示50组默认参数测的进程CPU利用率的平均值。
该散点图为初步筛选的50个配置参数测得的进程的内存利用率波动图。黑点表示不同参数不同取值对应的进程的内存利用率的平均值,红线表示50组默认参数测得的进程内存利用率的平均值。通过实验获取的不同配置参数的不同取值在运行100次程序过程中收集的计算资源指标,我们选取进程CPU利用率,进程内存利用率,总内存的buffers,总内存的cached,进程io的写字节数来作散点图(展示两个),观察配置参数的不同取值对计算资源的影响情况。我们筛选出来的重要配置参数共28项。
重要参数如下:
我们对50项初始筛选配置参数进行了控制变量测试,即仅变换单一配置项的值观察identity的性能变化,收集了process_cpu%,process_memory%,buffers,cached,process_io_write_bytes,memory%,disk_io_read_bytes,disk_io_write_time,snet_io_bytes_sent共9个计算资源指标,最终选择28个性能相关性较强的配置,这28个配置项可以分为3类,jobmanager、taskmanager和network。