一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于flink任务指标监控实现任务资源弹性伸缩系统及方法与流程

2022-11-13 12:33:38 来源:中国专利 TAG:


1.本发明涉及计算机、网络通信技术及大数据处理领域,具体涉一种基于flink任务指标监控实现任务资源弹性伸缩系统及方法。


背景技术:

2.近年来,企业数据对数据不再满足离线数据,越来越多的业务场景需要用到实时计算来满足;实时计算已经成为数据中台中必不可缺少的一部分。其中apcahe flink是当下最为热门的实时计算平台;apache flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支持流处理和批处理两种类型应用的功能。它能够为业务开发人员屏蔽大数据底层复杂的分布式计算编程框架,提供sql的方言并且对于负责的任务还可通过scala和java的api去实现。同时flink通过gelly支持了图操作,还有机器学习的flinkml,以及集成hudi或者iceberg实时数据入湖。
3.flink特点:现有的开源计算方案,会把流处理和批处理作为两种不同的应用类型:流处理一般需要支持低延迟、exactly-once保证,而批处理需要支持高吞吐、高效处理。flink是完全支持流处理,也就是说作为流处理看待时输入数据流是无界的;批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。
4.flink除了能处理消息队列中的流式数据,还可以将关系型数据中的数据通过cdc的方式将关系数据库作为流处理。同时也支持自定义的开发支持各种各样的数据源。
5.flink是一个分布式系统,需要计算资源才能执行应用程序;部署的方式也是支持多样化,本身可以搭建分布式计算集群,并且支持与所有常见的集权资源管理器(如hadoop yarn,mesos和kubernetes)集成;flink旨在与前面列出的每个资源管理器兼容。这是通过特定于资源管理器的部署模式实现的,该模式允许flink惯用方式与每个资源管理器进行交互。部署flink应用程序时,flink会根据应用程序配置的并行性自动识别所需的资源,并向资源管理器请求它们。如果发生故障,flink会通过请求新资源来替换发生故障的容器。提交或控制应用程序的所有通信均通过rest调用进行。简化了flink在许多环境中的集成。
6.flink 通过 task slots 来定义执行资源。每个 taskmanager 有一到多个 task slot,每个 task slot 可以运行一条由多个并行 task 组成的流水线。 这样一条流水线由多个连续的 task 组成,比如并行度为 n 的 mapfunction 和 并行度为 n 的 reducefunction。需要注意的是 flink 经常并发执行连续的 task,不仅在流式作业中到处都是,在批量作业中也很常见。
7.apache flink 中,可以通过手动停止 job,然后从停止时创建的 savepoint 恢复,最后重新指定并行度的方式来重新扩缩容 job。flink 自动调整并行度的选项。
8.reactive 模式:在 reactive 模式下,job 会使用集群中所有的资源。当增加 taskmanager 时,job 会自动扩容。当删除时,就会自动缩容。flink 会管理 job 的并行度,始终会尽可能地使用最大值。当发生扩缩容时,job 会被重启,并且会从最新的 checkpoint 中恢复。这就意味着不需要花费额外的开销去创建 savepoint。当然,所需要
重新处理的数据量取决于 checkpoint 的间隔时长,而恢复的时间取决于状态的大小。借助 reactive 模式,flink 用户可以通过一些外部的监控服务产生的指标,例如:消费延迟、cpu 利用率汇总、吞吐量、延迟等,实现一个强大的自动扩缩容机制。当上述的这些指标超出或者低于一定的阈值时,增加或者减少 taskmanager 的数量。在 kubernetes 中,可以通过改变 deployment 的副本数(replica factor) 实现。而在 aws 中,可以通过改变 auto scaling 组 来实现。这类外部服务只需要负责资源的分配以及回收,而 flink 则负责在这些资源上运行 job。
9.局限性:仅支持 standalone 部署模式。其他主动的部署模式实现(例如:原生的 kubernetes 以及 yarn)都明确不支持。session 模式也同样不支持。仅支持单 job 的部署。
10.adaptive调度器:adaptive 调度器可以基于现有的 slot 调整 job 的并行度。它会在 slot 数目不足时,自动减少并行度。这种情况包括在提交时资源不够,或者在 job 运行时 taskmanager 不可用。当有新的 slot 加入时,job 将会自动扩容至配置的并行度。 在 reactive 模式下(详见上文),并行度配置会被忽略,即无限大,使得 job 尽可能地使用资源。 你也可以不使用 reactive 模式而仅使用 adaptive 调度器。
11.局限性:只支持流式 job:adaptive 调度器的第一个版本仅支持流式 job。当提交的是一个批处理 job 时,会自动换回默认调度器。
12.不支持本地恢复:本地恢复是将 task 调度到状态尽可能的被重用的机器上的功能。不支持这个功能意味着 adaptive 调度器需要每次从 checkpoint 的存储中下载整个 state。
13.不支持部分故障恢复: 部分故障恢复意味着调度器可以只重启失败 job 其中某一部分(在 flink 的内部结构中被称之为 region)而不是重启整个 job。这个限制只会影响那些独立并行(embarrassingly parallel)job的恢复时长,默认的调度器可以重启失败的部分,然而 adaptive 将需要重启整个 job。
14.与 flink web ui 的集成受限: adaptive 调度器会在 job 的生命周期中改变它的并行度。web ui 上只显示 job 当前的并行度。
15.job 的指标受限: 除了 numrestarts 外,job作用域下所有的可用性和 checkpoint 指标都不准确。
16.空闲 slot: 如果 slot 共享组的最大并行度不相等,提供给 adaptive 调度器所使用的的 slot 可能不会被使用。
17.扩缩容事件会触发 job 和 task 重启,task重试的次数也会增加。
18.综上,flink的强大的特性已经成为数据中台优先考虑采用的实时计算引擎,并且也支持多种资源调度;但是本身都存在缺陷,无法在生产环境中使用,且只能做到横向的调整并发度来实现对资源的伸缩,无法做到纵向对task 内存使用的伸缩。
19.目前已有的弹性伸缩的方案中;reactive 模式仅支持 standalone 部署模式,adaptive调度器的局限1)只支持流式job,2)不支持本地恢复,3)不支持部分故障恢复,4)与flinkweb ui的集成受限,5)job 的指标受限,6)空闲 slot;这两种方案的局限性导致目前无法使用在生产环境中;只能通过经验来设置任务的并行度以及任务所使用的内存。本发明是通过采集任务运行时的内存指标与task反压指标,通过外部启停任务来达到对任务
资源伸缩的目的。


技术实现要素:

20.针对现有技术存在的问题,本发明的目的在于提供一种基于flink任务指标监控实现任务资源弹性伸缩系统及方法,用于解决上述存在的问题,实现对任务资源的横向和纵向弹性伸缩。
21.为实现上述目的,本发明提供一种基于flink任务指标监控实现任务资源弹性伸缩系统,所述系统包括内存指标纵向伸缩模块和算子反压横向伸缩模块;所述内存指标纵向伸缩模块通过计算内存使用占比判定是否需要调整内存,若为否则不做处理,若为是则停止任务,修改任务内存,再启动任务,若启动成功则扩缩容成功;所述算子反压横向伸缩模块计算内存使用占比的同时通过计算任务反压情况判定是否调整并发,若为否则不做处理,若为是则停止任务,修改任务内存,再启动任务,若启动成功则扩缩容成功。
22.进一步,所述内存指标纵向伸缩模块每分钟采集flink任务taskmanager的内存使用情况,所述内存包含jvm heap、off-heap memory、jvm metaspace和jvm overheap。
23.进一步,所述算子反压横向伸缩模块采集flink任务每个算子的反压;其中,反压等级如下:(1)ok:0% 《= 反压占比 《= 10%,(2)low:10% 《 反压占比 《= 50%,(3)high:50% 《 反压占比 《= 100%。
24.进一步,所述内存指标纵向伸缩模块通过采集到的指标计算最近n次taskmanager堆内存的使用情况来减少或者增减内存;占比小于30%降低内存,占比超过80%增加内存;所述调整内存配置具体为调整任务taskmanager的内存配置;调整内存的范围是大于等于1g内存且小于等于集群单个服务器最大内存。
25.进一步,所述算子反压横向伸缩模块通过计算采集flink任务每个算子计算最近n次反压指标为high的情况;所述调整并发具体为调整任务taskmanager的solt的个数与任务并发数。
26.另一方面,本发明提供一种基于flink任务指标监控实现任务资源弹性伸缩方法,所述方法包括如下步骤:s1. 同过监控任务采集flink任务指标,所述flink任务指标包括内存运行指标和任务反压指标;s2a.内存指标纵向伸缩模块根据内存运行指标计算内存使用占比,判定是否调整内存,若为否,不做处理,若为是,调整内存配置,然后进入步骤s3;s2b.与步骤s2a并行,算子反压横向伸缩模块根据任务反压指标计算任务反压情况,判定是否调整并发,若为否,不做处理,若为是,调整并发,然后进入步骤s3;s3.停止任务并保存任务savepoint;s4.重新启动任务,启动成功则提示扩缩容成功,重启3次失败则提示告警。
27.进一步,步骤s2a中,根据内存运行指标计算内存使用占比的步骤如下:s201. 根据最近n次内存使用占比;内存使用占比=(堆内存使用内存1 堆内存使用内存2 ..... 堆内存使用内存n 元空间使用内存1 元空间使用内存2 .... 元空间使用内存n)/((堆内存 元空间)
×
n)s202.计算调整后的新内存;
在占比小于30%的情况下,调整后的新内存计算公式为:新内存= 总进程内存-总进程内存
×
内存使用占比-总进程内存
×
0.3;在占比大于80%的情况下,新内存计算公式为:新内存= 总进程内存 总进程内存-总进程内存
×
内存使用占比。
28.所述调整内存配置具体为调整任务taskmanager的内存配置;调整内存的范围是大于等于1g内存且小于等于集群单个服务器最大内存。
29.进一步,步骤s2b中,通过计算采集flink任务每个算子计算最近n次反压指标为high的情况;所述调整并发具体为调整任务taskmanager的solt的个数与任务并发数。
30.计算任务反压情况,调整并发的具体步骤如下:s203.首先计算反压指标平均值,计算公式如下:反压指标平均值=(反压占比1 反压占比2 ....... 反压占比n)/ns204.根据计算结果判断反压指标平均值所处等级,根据所处等级确定调整策略,计算公式为:并发=当前并发 当前并发
×
反压指标平均值。
31.本发明提出基于flink任务指标监控实现任务资源弹性伸缩方案,以不侵入flink计算引擎与部署方式实现了能够横向的到达资源弹性的伸缩,也能纵向的达到资源弹性伸缩。
附图说明
32.图 1 为根据本发明实施例的一种基于flink任务指标监控实现任务资源弹性伸缩系统及方法的流程图;图 2 为根据本发明实施例的一种基于flink任务指标监控实现任务资源弹性伸缩系统及方法中内存模型结构图。
具体实施方式
33.下面将结合附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
34.在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
35.在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
36.以下结合图1、图2对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
37.图1为本发明的技术方案基于flink任务指标监控实现任务资源弹性伸缩系统及方法的设计流程图。本方案通过每分钟采集flink任务taskmanager的内存使用情况以及同时采集flink任务每个算子的反压,其中内存使用情况包含jvm heap、off-heap memory、jvm metaspace和jvm overheap内存,如图2taskmanager内存模型;其中,total process memory:总进程内存total flink memory:总flink内存jvm heap:堆内存framework heap:框架堆内存tak heap:任务堆内存off-heap memory:堆外内存managed memory:托管内存direct memory:直接内存framework off-heap:任务堆外内存task off-heap:框架堆外内存network:网络内存jvm metaspace:元空间内存采集flink任务每个算子的反压(反压等级:(1)ok:0% 《= 反压占比《= 10%,(2)low:10% 《 反压占比《= 50%,(3)high:50% 《 反压占比《= 100%)。任务资源弹性伸缩系统包括内存指标纵向伸缩模块和算子反压横向伸缩模块;所述内存指标纵向伸缩模块通过计算内存使用占比判定是否调整内存,若为否则不做处理,若为是则停止任务,修改任务内存,再启动任务,若启动成功则扩缩容成功;所述算子反压横向伸缩模块计算内存使用占比的同时通过计算任务反压情况判定是否调整并发,若为否则不做处理,若为是则停止任务,修改任务内存,再启动任务,若启动成功则扩缩容成功。
38.所述任务资源弹性伸缩流程包括以下步骤:s1. 同过监控任务采集flink任务指标,所述flink任务指标包括内存运行指标和任务反压指标;s2a.内存指标纵向伸缩模块根据内存运行指标计算内存使用占比,判定是否调整内存,若为否,不做处理,若为是,调整内存配置,然后进入步骤s3;s2b.与步骤s2a并行,算子反压横向伸缩模块根据任务反压指标计算任务反压情况,判定是否调整并发,若为否,不做处理,若为是,调整并发,然后进入步骤s3;s3.停止任务并保存任务savepoint;其中savepoint:保存点(savepoint)是事务过程中的一个逻辑点,用于取消部分事务,当结束事务时,会自动的删除该事务中所定义的所有保存点。当执行rollback时,通过指定保存点可以回退到指定的点。
39.s4.重新启动任务,启动成功则提示扩缩容成功,重启3次失败则提示告警。
40.其中,步骤s2a中,通过采集到的指标计算最近n次(几次可以调整,指标每分钟获取一次)taskmanager堆内存的使用情况来降低或者增加内存;占比小于30%降低内存,占比超过80%增加内存;所述调整内存配置具体为调整任务taskmanager的内存配置;调整内存
的范围是大于等于1g内存且小于等于集群单个服务器最大内存;n次的优选范围分别是5,10,15,30;采集的具体指标;示例:任务配置了4096mb(单位:兆)在一个实施例中,各个内存分配如下表格:采集样例数据如下表所示:
其中,步骤s2a中,根据内存运行指标计算内存使用占比的步骤如下:s201. 根据最近n次内存使用占比(当采集到的托管内存全是0mb,在计算的过程中应将托管总内存排除在外)内存使用占比=(堆内存使用内存1 堆内存使用内存2 ..... 堆内存使用内存n 元空间使用内存1 元空间使用内存2 .... 元空间使用内存n)/((堆内存 元空间)
×
n)在本实施例中,共采样30次,根据最近30次内存使用占比,内存使用占比=(堆内存使用内存1 堆内存使用内存2 ..... 堆内存使用内存30 元空间使用内存1 元空间使用内存2 .... 元空间使用内存30)/((堆内存 元空间)
×
30),由此计算出内存使用占比=11019/55290=0.19929,即占比为19.929%,小于30%。
41.s202.计算调整后的新内存;在占比小于30%的情况下,新内存计算公式为:新内存= 总进程内存-总进程内存
×
内存使用占比-总进程内存
×
0.3;本实施例中,新内存=4096-4096*19.929%-4096*0.3=2050.91;
在占比大于80%的情况下,新内存计算公式为:新内存= 总进程内存 总进程内存-总进程内存
×
内存使用占比。
42.其中,步骤s2b中,通过计算采集flink任务每个算子计算最近n次反压指标为high的情况;所述调整并发具体为调整任务taskmanager的solt的个数与任务并发数。
43.在一个具体实施例中,根据反压占比(ratio(占比))对反压状态的阈值设定如下:ok级: 0 《= ratio(占比) 《= 0.10low级: 0.10 《 ratio(占比) 《= 0.5high级: 0.5 《 ratio(占比) 《= 1采集样例数据如下表所示:
计算任务反压情况,调整并发的具体步骤如下:s203.首先计算反压指标平均值,计算公式如下:反压指标平均值=(反压占比1 反压占比2 ....... 反压占比n)/n在本实施例中,反压指标平均值=(反压占比1 反压占比2 ....... 反压占比30)/30=0.7647s204.根据计算结果判断反压指标平均值所处等级,根据所处等级确定调整策略。在本实施例中,可知反压指标平均值处于high级,所以此时新并发=当前并发 当前并发
×
反压指标平均值[向下取整]本实施例中,当前并发为3,新并发=3 3
×
0.7647=5.2941,向下取整为5,因此新并发的数值为5。
[0044]
本发明提出基于flink任务指标监控实现任务资源弹性伸缩方案,能够横向的达到资源弹性的伸缩,也能纵向的达到资源弹性伸缩。
[0045]
横向伸缩:能够对cpu与内存使用提高,当数据积压时提升并发能力以增加计算能力。
[0046]
纵向伸缩:在并发不变的情况下,在内存占用长时间使用率大于80%增加资源避免数据积压降低数据的延迟,在内存长时间使用率小于30%减少资源能有效的降低空闲资源占用。
[0047]
本发明有三大关键点:1)本发明通过对任务的积压监控达到对任务资源横向的弹性伸缩,2)通过监听任务的资源占用达到纵向的资源伸缩,3)本方案通过自研系统对任务的运行指标统一采集以及通过自研系统计算根据采集的指标计算来调整任务资源,因此不用侵入flink计算引擎与部署方式,通过采集任务运行中内存的使用情况判断任务资源占用情况,根据采集的指标计算出结果,先调整任务占用资源然后通过框架提供的启停功能来达到资源伸缩的效果。
[0048]
在本说明书的描述中,参考术语“实施例”、“示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。此外,本领域的技术人员可以在不产生矛盾的情况下,将本说明书中描述的不同实施例或示例以及其中的特征进行结合或组合。
[0049]
上述内容虽然已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型等更新操作。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献