优化赞弗林克实时任务资源的探索与实践 杭州证券

股票资讯  2021-03-06 14:03:18

原标题:优化Flink实时任务资源的探索与实践

介绍:目前,实时计算平台已经在探索Flink任务资源优化方面迈出了第一步。

随着Flink K8s和实时集群迁移的完成,越来越多的Flink实时任务在K8s集群上运行,备受赞誉。Flink K8s提高了大推广时实时集群的弹性扩容收缩能力,更好的降低了大推广时机器扩容收缩的成本。同时,由于K8s是由公司内部专门的团队维护的,Flink K8s也能更好的降低公司的运营维护成本。

但是目前Flink K8s任务资源是由用户在实时平台上配置的,用户本身对于实时任务配置多少资源的经验很少,所以存在用户配置了更多资源却无法实际使用的情况。比如一个Flink任务实际上有4个并发来满足业务处理需求,结果用户配置了16个并发,会导致实时计算资源的浪费,从而对实时集群资源水平和底层机器成本产生一定的影响。基于此背景,本文从Flink任务记忆和消息能力处理两个方面对Flink任务资源优化进行了探索和实践。

一、Flink计算资源类型及优化思路 1.1 Flink计算资源类型

我认为运行Flink任务所需的资源可以分为五类:

内存资源 本地磁盘(或云磁盘)存储 依赖的外部存储资源。例如,HDFS、S3等。(任务状态/数据)、HBase、MySQL、Redis等。(数据) 中央处理器资源 网卡资源

目前Flink任务使用的主要资源是内存和CPU资源,本地磁盘、依赖的外部存储资源和网卡资源一般不是瓶颈。因此,本文从内存和CPU资源两个方面对Flink实时任务资源进行了优化。

1.2 Flink实时任务资源优化思路

关于Flink实时任务资源的分析,我们认为主要包括两点:

首先是从任务内存和堆内存的角度分析实时任务。 另一方面从实时任务消息处理能力入手,保证满足业务端的数据处理需求,同时尽可能合理使用CPU资源。 然后结合实时任务内存分析得到的相关指标和实时任务并发的合理性,得到预设的实时任务资源值。在与业务方充分沟通后,对实时任务资源进行调整,最终达到实时任务资源合理化分配的目的,从而更好地降低机器使用成本。

■ 1.2.1任务记忆视角

那么如何分析Flink任务的堆内存呢?这里我们用Flink任务的GC日志来分析一下。垃圾收集日志包含每次垃圾收集堆不同区域内存的变化和使用情况。同时,根据垃圾收集日志,我们还可以得到一个任务管理器在每次垃圾收集完成后的剩余空间大小。可以说,获取实时任务的GC日志是我们分析实时任务内存的前提。

气相色谱日志内容分析,这里我们使用开源的气相色谱查看器工具进行具体分析,每次分析后,我们可以得到气相色谱相关的指标,以下是通过气相色谱查看器分析一次气相色谱日志的部分结果:

上面的分析显示了单个Flink Taskmanager的总堆大小、年轻一代和老年分配的内存空间、Full GC后老年的剩余大小等。当然还有很多其他的指标,相关指标的定义可以在Github中查看。

这里最重要的是满GC后老年剩余大小的指标。根据《Java性能优化权威指南》一书中的Java堆大小计算规则,如果Full GC后的老年剩余大小空间为m,那么堆大小建议为3 ~ 4倍m,新一代为1 ~ 1.5倍m,老年为2 ~ 3倍m。当然,对于真实的内存配置,可以根据实际情况调整相应的比例,以便

因此,通过Flink任务的GC日志,可以计算出实时任务的总推荐堆内存大小。当我们发现推荐的堆内存大小与实时任务的实际堆内存大小相差太大时,我们认为可以在业务端减少实时任务的内存配置,从而减少机器内存资源的使用。

■ 1.2.2从任务消息处理能力的角度

对于Flink任务消息处理能力的分析,我们主要看实时任务消耗的单位时间数据源的输入是否与实时任务的各个Operator/Task的消息处理能力相匹配。操作员是弗林克任务的操作员,任务是一个或多个操作员连锁在一起执行的物理载体。

我们内部一般用卡夫卡作为数据源。卡夫卡话题的单位时间输入可以通过调用卡夫卡经纪人JMX指标界面获得。当然也可以调用Flink Rest Monitoring API,获取卡夫卡源任务对于实时任务的所有单位时间输入,然后相加。然而,由于背压可能会影响源端的输入,这里我们直接使用卡夫卡经纪人指标JMX界面来获取卡夫卡话题单位时间输入。

获取实时任务的卡夫卡话题单位时间输入后,下面是判断实时任务的消息处理能力与数据源输入是否匹配。实时任务的整体消息处理能力会受到最慢的操作员/任务的影响。比如Flink任务消耗的卡夫卡话题输入是20000 Record/S,但是有一个并发度为10的Map运算符。在地图操作器中,服务端调用Dubbo,一个Dubbo接口从请求到返回需要10 ms。地图操作员的处理能力为1000记录/秒(1000毫秒/10毫秒* 10),因此实时任务处理能力将降至1000记录/秒..

由于消息记录的处理将在任务中进行,我们试图找出实时任务中最慢的任务逻辑。如果源端和接收端都是链状的,我们将找出最慢的操作符的逻辑。在源代码层,我们为Flink Task和Operator添加了一个定制的单一记录处理时间的度量,然后这个度量可以通过Flink Rest API获得。我们将遍历一个Flink Task中的所有任务,查询最慢任务所在的JobVertex,然后得到job vertex中所有任务的总输出,最后与卡夫卡Topic的单位时间输入进行比较,判断实时任务消息处理能力是否合理。

设实时任务每单位时间卡夫卡话题的输入为S,最慢任务所代表的JobVertex的并发为P,最慢任务所在的JobVertex的输出为O,最慢任务的最大消息处理时间为T,则按以下逻辑分析:

当o等于s,1秒/T * P远大于s时,我们会考虑降低任务的并发性。 当o约为s,1秒/T * P约为s时,不考虑任务并发的调整。 当O远小于S,1秒/T * P远小于S时,我们会考虑增加任务的并发。 目前主要原因是1在CPU使用上不合理。当然,因为实时任务的流程在不同时间段是不同的,所以我们会有一个周期性检测的任务。如果检测到一个实时任务多次满足1,会自动提醒平台管理员优化调整资源。

下图从Flink任务的内存和消息处理能力分析了资源逻辑图:

二,福林克从记忆角度分析的实践 2.1 Flink任务垃圾收集器选择

Flink任务的本质还是Java任务,所以也涉及到了垃圾收集器的选择。选择垃圾收集器通常需要从两个角度进行参考:

吞吐量,也就是每单位时间的任务执行时间/(任务执行时间+垃圾收集时间),当然并不意味着减少GC暂停时间就能提高吞吐量,因为减少GC暂停时间会增加你的GC次数。 延迟。如果你的Java程序涉及到与外界的交互,延迟会影响外部请求体验。 Flink任务,我觉得还是一种强调吞吐量的Java任务,所以会更多的从吞吐量的角度考虑。当然也不是说完全不考虑延迟。毕竟作业管理器、任务管理器、资源管理器之间都有心跳,延迟太大,可能导致心跳超时的可能性。

目前我们的JDK版是内部1.8版,新一代的垃圾收集器使用Parallel cleave,所以老的垃圾收集器只能选择Serial Old或者Parallel Old。由于我们的Flink k8s任务中每个Pod的CPU限制是0.6-1 Core,最多只能用一个Core,所以我们以前用Serial Old作为垃圾收集器,多线程垃圾收集在单核之间,可能会消耗线程切换。

2.2实时任务GC日志采集

设置好垃圾收集器后,下一步是获取Flink任务的GC日志。一般Flink任务的组成是单个JobManager+多个任务管理器,需要获取任务管理器的GC日志进行分析。有必要收购所有TaskManager吗?这里我们按照TaskManager的Young GC次数排序,取前16位任务经理进行分析。YoungGC时间可以通过Flink Rest API获得。

直接点击TaskManager的日志链接就可以看到Flink对纱线实时任务的GC日志,然后通过HTTP访问,本地下载。Flink On k8s任务的GC日志会先写入Pod挂载的云盘,基于k8s hostpath卷挂载。我们在内部使用Filebeat来监控和收集日志文件的变化,最后输出到下游的卡夫卡话题。我们内部会有一个定制的日志服务器,它会消耗卡夫卡的日志记录,自动丢弃和管理,并向外部提供一个日志下载界面。待分析任务管理器的GC日志可以通过日志下载界面下载。

2.3基于GC查看器分析Flink任务内存

气相色谱查看器是一个开源的气相色谱日志分析工具。在使用GC Viewer之前,您需要在本地克隆GC Viewer项目代码,然后编译并打包它以使用其功能。

分析一个实时任务堆的内存时,先把Flink TaskManager的日志下载到本地,然后通过GC Viewer进行日志分析。如果觉得多个任务管理器的GC日志分析比较慢,可以使用多线程。上述所有操作都可以编码,以自动输出分析结果。以下是气相色谱查看器分析的命令行:

Java-jar gcviewer-1.37-SNASPING . jar GC . log summary . CSV

上面的参数gc.log表示一个Taskmanager的gc日志文件名,summary.csv表示日志分析结果。以下是我们平台上实时任务的内存分析结果:

下面是上面截图中一些参数的描述:

运行时间,弗林克任务的运行时间 YGSize,任务管理器新一代堆的最大内存分配,以兆字节为单位 YGUsePC,任务管理器新一代堆的最大利用率 OGSize,任务管理器旧版本中堆内存的最大分配,以兆字节为单位 OGUsePC,任务管理器旧代堆的最大利用率 年轻气盛的时代 青年时间,任务管理器青年垃圾收集的每个暂停时间,以秒为单位 FGCount,任务管理器完全垃圾收集的次数 FGAllTime,taskmanager fullgc的总时间,以秒为单位 吞吐量,任务管理器吞吐量 AVG点(分析结果反推参数),青少年每次向老年推广的平均对象大小 建议堆大小 推荐新生代矿堆大小 重新收集,推荐的旧堆大小 上面的大部分内存分析结果都可以通过GC Viewer分析得到,但是推荐的堆大小、推荐的新一代堆大小、推荐的老一代堆大小都是根据1.2.1小节中的内存优化规则设置的。

三、从信息处理的角度分析福林克的实践 3.1实时任务卡夫卡话题单位时间输入采集

要分析Flink任务的消息处理能力,第一步是获取实时任务的卡夫卡话题数据源。目前如果资料来源不是卡夫卡,我们就不分析了。Flink任务一般分为两类:Flink Jar任务和Flink SQL任务。Flink SQL任务获取卡夫卡数据源相对简单。直接解析Flink SQL代码,然后得到With后的参数。过滤掉Sink表后,如果SQLCreateTable的卷积器类型是卡夫卡,则可以通过SQLCreateTable后的参数用获得具体的卡夫卡主题。

获取Flink Jar任务的卡夫卡话题数据源比较繁琐。我们内部有一个实时任务血液分析服务,它自动为Flink Jar任务构建它的PackagedProgram,Flink Jar任务是Flink内部的一个类,我们可以得到一个Flink Jar任务的流图,它包含了源和宿的所有流节点。通过反射,我们可以在流节点中获得特定的源函数。如果是《卡夫卡源泉》的话,我们会得到它的《卡夫卡主题》。下面是StreamGraph类的屏幕截图:

获取了Flink任务的卡夫卡话题数据源后,接下来就是获取这个话题的单位时间的消息记录数,可以通过卡夫卡经纪人JMX公制界面获取,而我们可以通过内部卡夫卡管理平台提供的外部界面获取。

3.2自动检测弗林克消息处理最慢的任务

首先,我们在源代码层添加了Flink Task单条记录的处理时间的Metric,可以通过Flink Rest API获得。下一步是在Flink Rest API的帮助下遍历要分析的Flink任务的所有任务。弗林特斯特应用编程接口有这样一个接口:

base _ flink _ web _ ui _ URL/jobs/:jobid

这个接口可以得到一个任务的所有顶点,一个顶点可以简单理解为Flink任务的JobGraph中的一个JobVertex。JobVertex表示实时任务中的一段执行逻辑。

获取Flink Task的所有顶点后,下一步是获取每个顶点特定任务处理单个记录的度量,可以使用以下界面:

需要在上面的Rest API链接度量后添加?get =(metric),例如:metrics?Get=0。Filter.numRecordsOut,其中0表示顶点任务的id,Filter.numRecordsOut表示特定的指示器名称。我们在内部使用TaskOneRecordDealTime来表示单个记录的任务处理时间的度量,然后使用0.taskOneRecordDealTime来得到某个任务的单个记录的处理时间的索引。以上界面支持多指标查询,即get可以用逗号分隔。

最后,自动检测Flink消息处理中最慢的任务的总体步骤如下:

获取实时任务的所有顶点 遍历每个顶点,然后获取该顶点所有并发任务的任务记录时间,并记录其最大值 比较所有顶点记录的度量的最大值,找出处理时间最慢的顶点。 以下是我们实时平台对一个Flink实时任务的分析结果:

4.称赞Flink的实时任务资源优化实践 现在Flink任务的内存和分析消息处理能力的方式已经有了,接下来就是在实时平台上进行具体的实践。我们的实时平台每天定期扫描所有正在运行的Flink任务。在任务内存方面,我们可以根据内存优化规则计算Flink任务的推荐堆内存大小,并与Flink任务实际分配的堆内存进行比较。如果两者相差太大,我们认为Flink任务的内存配置是浪费的。接下来,我们将提醒平台管理员进行优化。

再次收到报警提示后,平台管理员也会判断实时任务消息能力是否合理。如果消息处理最慢的Vertex(一种实时逻辑),所有任务每单位时间处理的消息记录之和近似等于实时任务消耗的每单位时间的卡夫卡话题输入,但通过Vertex的并发性和单消息处理的度量,当Vertex每单位时间处理的消息记录数远大于卡夫卡话题的单位输入时,认为Flink任务可以适当降低并发性。具体调整金额将在与业务方沟通后进行调整。Flink任务资源优化总体操作流程如下:

动词 (verb的缩写)总结 目前,实时计算平台已经在探索Flink任务资源优化方面迈出了第一步。自动发现可以优化的实时任务,然后平台管理员介入分析,最终判断Flink任务的资源是否可以调整。在实时任务资源优化的整个环节,目前还不够自动化,因为后半部分需要人为因素。未来计划实现Flink任务资源的自动化优化,根据实时任务历史不同时期的资源使用情况,自动推测和调整实时任务的资源分配,从而提高整个实时集群的资源利用率。

同时,在未来,他们将在元数据平台上与学生合作,从更多方面分析实时任务中资源优化的可能性。他们在原有的离线任务资源中积累了大量的优化经验,可以在以后借鉴,应用于实时任务资源的优化。

当然,最理想的是实时任务的资源使用可以自动灵活的扩容、缩容。之前听到过社区学生在这方面的声音,欢迎大家和我探讨。

作者:沈磊

本文是阿里巴巴云的原创内容。未经允许不能转载回搜狐。查看更多

负责编辑:


以上就是优化赞弗林克实时任务资源的探索与实践杭州证券的全部内容了,喜欢我们网站的可以继续关注苑盛股票网其他的资讯!

相关推荐

中欧基金卢春清:研究即投资,为长期业绩奠定基础
左手拿着大红色的衬衫,左手拿着一个有着小尖耳朵的深红色卡通杯,右手拿着柔软可爱的泡泡玛特公仔——陆春青,狭窄的会客室顿时变得明亮...
回港新举措?好未来宣布融资15亿美元
11月16日,CapitalState获悉,美国上市公司TAL.US宣布,一家全球成长型投资公司已同意购买该公司新发行的总计约1...
原来看一辆新车,外观气质大变,汽车陈D60 PLUS成功变脸
东风汽车陈即将推出全新的D60PLUS车型,其实是基于D60的。动力配置也完全保留了原装日产HR161.6L发动机,搭配5速手动...
原创圣诞郊游,风光500/宝骏510年轻人最好的解决方案是谁?
曾经有人嘲讽说,下半年千万不要谈恋爱,因为中秋、国庆、圣诞节、元旦、春节都会让人吃不下钱包。不过,调侃是好玩的。在多元文化中长大...
数据规格不同寻常,从35万开始,台湾市场有独特的电气方面
日前,UCAR网友“电镀冷光”在我们的讨论区贴出了一张间谍照片,并拍到一辆绿色的Veryca,上面有测试车牌。经我们与中国汽车确...
传承千年的原厂1.6T,真的支撑不了DS9的豪华旗舰定位!
说起法国奢侈品牌,很多消费者可能并不熟悉。作为PSA旗下的奢侈品品牌,DS早在2011年就以合资方式进入中国。但由于法国车在中国...
吓人!广西一辆丰田剧烈相撞,血肉模糊的车身扭曲了B柱变形...车身的安全性引起了激烈的争论
昨日(14日)下午2时30分左右,一辆白色现代汽车在柳工大道杨娇文屯段与一辆丰田汽车发生激烈碰撞,造成两辆汽车严重损坏。在事故中...
原丰田海狮房车全新布局!2.0T 4AT堪比小户型,可容纳3人
你好!大家好!之前给你介绍过很多丰田海狮底盘的房车,有的设计成商务风格,有的设计成小巧清新。今天,我们为您带来这款配备丰田海狮底...
面对工作和生活的从容应对,图瑞·欧瑞享受非凡
社会上有一种神奇的存在叫“别人的!”别人的父母都是讲道理的其他家庭的孩子很优秀别人家的十项全能现在别人的老板都让人羡慕x这个视频...

友情链接