任务运行时的慢节点检测方法、装置、电子设备和介质与流程
未命名
10-25
阅读:130
评论:0
1.本公开涉及计算机技术领域,具体而言,涉及一种任务运行时的慢节点检测方法、装置、电子设备和介质。
背景技术:
2.随着业务的发展,流式数据的处理变得越来常见,flink引擎作为一种业界常用的大数据流式处理引擎,可以用于处理各种各样的flink任务。flink引擎管理有用于处理flink任务对应的子任务的多个计算节点,多个计算节点可以运行在服务集群中的不同机器中。但是,同一个机器中往往可以多个运行计算节点对应的多种类型的子任务,甚至还可以运行一些其他引擎对应的任务,因此伴随着各种任务的持续运行,可能会导致在机器中运行的某一子任务出现运行缓慢的情况,影响了任务执行效率。同时,针对该子任务而言,该机器就出现了慢节点问题。
3.因此,若是能及时检测出存在慢节点问题的机器并进行处理,将会大大提升flink任务的执行效率,但是常规的慢节点检测方案,往往存在检测结果准确性低、检测效果差的问题。
技术实现要素:
4.本公开实施例至少提供一种任务运行时的慢节点检测方法、装置电子设备和介质。
5.第一方面,本公开实施例提供了一种任务运行时的慢节点检测方法,包括:
6.获取流式数据处理任务的运行指标信息;所述流式数据处理任务包括多种算子类型的子任务;
7.根据各种算子类型之间的拓扑关系和所述运行指标信息指示的异常原因信息,确定出存在异常的目标算子类型;
8.从多种所述算子类型的子任务中筛选出所述目标算子类型的各个第一子任务,从所述运行指标信息中,确定各个所述第一子任务各自对应的待检测指标信息;
9.利用所述待检测指标信息,从所述第一子任务中确定出运行缓慢的第二子任务,根据执行所述第二子任务的计算节点所在的执行机器,确定慢节点机器。
10.在一种可能的实施方式中,在确定所述慢节点机器之后,还包括:
11.利用预先设置的服务迁移接口,根据所述慢节点机器中用于执行所述第二子任务的各个目标计算节点所需的资源量,预先为每个所述目标计算节点申请目标资源;
12.设置针对所述慢节点机器的屏蔽信息,所述屏蔽信息用于指示所述目标算子类型的新的子任务,无法被调度到所述慢节点机器中的计算节点执行;
13.利用申请的目标资源,创建用于替代所述目标计算节点的替代计算节点,并利用所述替代计算节点执行与所述目标计算节点相关的所述第二子任务。
14.在一种可能的实施方式中,根据执行所述第二子任务的计算节点所在的执行机
器,确定慢节点机器,包括:
15.在所述第二子任务的目标数量大于预设数量的情况下,根据执行各所述第二子任务的计算节点所在的执行机器,确定每个所述执行机器对应的任务数量;
16.根据各个所述执行机器对应的所述任务数量分别与所述目标数量的第一比值,确定所述慢节点机器。
17.在一种可能的实施方式中,根据各个所述执行机器对应的所述任务数量分别与所述目标数量的第一比值,确定所述慢节点机器,包括:
18.在存在大于或等于第一预设比值的目标比值的情况下,将目标比值对应的执行机器作为所述慢节点机器;或者,
19.在各个所述第一比值均小于所述第一预设比值的情况下,根据每个所述第二子任务的所述待检测指标信息指示的指标异常程度,将指标异常程度最大的第二子任务对应的执行机器作为所述慢节点机器。
20.在一种可能的实施方式中,根据执行各所述第二子任务的计算节点所在的执行机器,确定每个所述执行机器对应的任务数量,包括:
21.在所述目标算子类型属于数据消费类型的情况下,根据各所述第二子任务从消息队列中读取数据时依赖的各个数据分区,从所述第二子任务对应的待检测指标信息中,确定出每个所述数据分区对应的数据滞后时间;
22.根据所述数据滞后时间,从所述数据分区中筛选出多个目标数据分区;
23.根据每个所述目标数据分区所属的数据管理服务器,确定各个所述数据管理服务器对应的数据分区数量;
24.在各个所述数据管理服务器对应的所述数据分区数量分别与所述目标数据分区的第一数量之间的第二比值,均小于第二预设比值的情况下,根据执行各所述第二子任务的计算节点所在的执行机器,确定每个所述执行机器对应的所述任务数量。
25.在一种可能的实施方式中,利用所述待检测指标信息,从所述第一子任务中确定出运行缓慢的第二子任务,包括:
26.在所述目标算子类型属于数据消费类型的情况下,根据每个所述第一子任务从消息队列中读取数据时依赖的各个数据分区,从所述第一子任务对应的待检测指标信息中,确定出每个所述数据分区对应的数据滞后时间;
27.根据所述数据滞后时间,确定数据滞后时间大于预设时间的数据分区的第二数量;
28.在所述第二数量与分区总数量之间的第三比值小于第三预设比值的情况下,根据各个所述数据分区对应的所述数据滞后时间,从所述第一子任务中确定出所述第二子任务;所述分区总数量为各所述第一子任务依赖的数据分区的总数量。
29.在一种可能的实施方式中,所述根据各个所述数据分区对应的所述数据滞后时间,从所述第一子任务中确定出所述第二子任务,包括:
30.根据各个所述数据分区对应的所述数据滞后时间,判断各个所述数据分区中,是否存在数据滞后时间符合第一异常条件的待过滤数据分区;
31.若是,根据依赖所述待过滤数据分区的所述第一子任务的每秒查询率,确定所述第二子任务。
32.在一种可能的实施方式中,利用所述待检测指标信息,从所述第一子任务中确定出运行缓慢的第二子任务,包括:
33.在所述目标算子类型属于除数据消费类型以外的其他算子类型的情况下,根据各个所述第一子任务的所述待检测指标信息指示的任务空闲程度,判断是否存在任务空闲程度符合第二异常条件的第三子任务;
34.若是,则根据所述第三子任务的每秒查询率以及预设查询率,确定所述第二子任务。
35.第二方面,本公开实施例还提供一种任务运行时的慢节点检测装置,包括:
36.获取模块,用于获取流式数据处理任务的运行指标信息;所述流式数据处理任务包括多种算子类型的子任务;
37.第一确定模块,用于根据各种算子类型之间的拓扑关系和所述运行指标信息指示的异常原因信息,确定出存在异常的目标算子类型;
38.第二确定模块,用于从多种所述算子类型的子任务中筛选出所述目标算子类型的各个第一子任务,从所述运行指标信息中,确定各个所述第一子任务各自对应的待检测指标信息;
39.第三确定模块,用于利用所述待检测指标信息,从所述第一子任务中确定出运行缓慢的第二子任务,根据执行所述第二子任务的计算节点所在的执行机器,确定慢节点机器。
40.第三方面,本公开可选实现方式还提供一种电子设备,处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
41.第四方面,本公开可选实现方式还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
42.关于上述任务运行时的慢节点检测装置、电子设备、及计算机可读存储介质的效果描述参见上述任务运行时的慢节点检测方法的说明,这里不再赘述。
43.本公开实施例提供的任务运行时的慢节点检测方法、装置、电子设备和存储介质,由于运行指标信息可以包括在执行流式数据处理任务的过程中,与每种算子类型的每个子任务相关的指标信息,所以利用获取的运行指标信息进行慢节点检测,可以实现对各种指标信息的全面分析和检测,提高确定出的慢节点机器的准确性。根据算子类型之间的拓扑结构和异常原因信息,能够准确地判断出算子类型下任务异常是否是由其他算子类型的任务异常引起的,进而能够从多个算子类型,准确地筛选出可能存在慢节点问题的目标算子类型。由于不同算子类型的子任务在分析是否存在慢节点问题时需要使用的指标信息不同,所以在确定出目标算子类型之后,可以从运行指标信息中,筛选出各个第一子任务各自对应的待检测指标信息,再利用待检测指标信息进行慢节点检测,可以准确地从各个第一子任务中确定出运行缓慢的第二子任务。继而,由于子任务可以由服务集群包括的机器中的计算节点执行,所以在确定出第二子任务之后,根据执行第二子任务的计算节点所在的执行机器,可以准确地确定出存在慢节点问题的慢节点机器,从而实现对慢节点问题的准
确检测。并且,由于运行指标信息可以由执行机器在执行流式数据处理任务的过程中实时上传,所以可以对运行指标信息进行实时获取,进而可以实现利用运行指标信息对慢节点问题进行实时检测,提高了检测的实时性。
44.为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
45.为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
46.图1示出了本公开实施例所提供的一种任务运行时的慢节点检测方法的流程图;
47.图2示出了本公开实施例所提供的一种确定运行缓慢的第二子任务的具体流程图;
48.图3示出了本公开实施例所提供的一种确定慢节点机器的具体流程图;
49.图4示出了本公开实施例所提供的一种慢节点检测方法的交互示意图;
50.图5示出了本公开实施例所提供的一种任务运行时的慢节点检测装置的示意图;
51.图6示出了本公开实施例所提供的一种电子设备的结构示意图。
具体实施方式
52.为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
53.另外,本公开实施例中的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。
54.在本文中提及的“多个或者若干个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
55.经研究发现,针对流式数据处理场景下的慢节点检测,常用的检测方式可以为利用一些机器监管服务对机器的核心指标进行检测,例如对机器的中央处理器(central processing unit,cpu)的使用率进行检测,当使用率达到阈值的情况下,即认为机器存在慢节点问题。这种方式虽然能够实现对慢节点问题的检测,但通常存在检测不准确的问题。
例如,在一般情况下,均需要设置一个保守的阈值,但流式数据处理任务对延迟十分敏感,且不同类型的流式数据处理任务的敏感性不同,因此一个保守的阈值,难以覆盖全部类型的流式数据处理任务,影响了检测的准确性。并且,该方式还不具备监管集群运行环境的能力,例如在出现某网段的机器网络突发波动或延迟的情况下,该方式无法实现对这种情况下甄别,导致检测结果出现偏差。
56.基于上述研究,本公开提供了一种任务运行时的慢节点检测方法、装置、电子设备和存储介质,由于运行指标信息可以包括在执行流式数据处理任务的过程中,与每种算子类型的每个子任务相关的指标信息,所以利用获取的运行指标信息进行慢节点检测,可以实现对各种指标信息的全面分析和检测,提高确定出的慢节点机器的准确性。根据算子类型之间的拓扑结构和异常原因信息,能够准确地判断出算子类型下任务异常是否是由其他算子类型的任务异常引起的,进而能够从多个算子类型,准确地筛选出可能存在慢节点问题的目标算子类型。由于不同算子类型的子任务在分析是否存在慢节点问题时需要使用的指标信息不同,所以在确定出目标算子类型之后,可以从运行指标信息中,筛选出各个第一子任务各自对应的待检测指标信息,再利用待检测指标信息进行慢节点检测,可以准确地从各个第一子任务中确定出运行缓慢的第二子任务。继而,由于子任务可以由服务集群包括的机器中的计算节点执行,所以在确定出第二子任务之后,根据执行第二子任务的计算节点所在的执行机器,可以准确地确定出存在慢节点问题的慢节点机器,从而实现对慢节点问题的准确检测。并且,由于运行指标信息可以由执行机器在执行流式数据处理任务的过程中实时上传,所以可以对运行指标信息进行实时获取,进而可以实现利用运行指标信息对慢节点问题进行实时检测,提高了检测的实时性。
57.针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
58.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
59.可以理解的是,在使用本公开各实施例公开的技术方案之前,均应当依据相关法律法规通过恰当的方式对本公开所涉及个人信息的类型、使用范围、使用场景等告知用户并获得用户的授权。
60.需要说明的是,本公开实施例中所提到的特定名词包括:
61.flink:中文名称弗林克,由一种开源流处理框架,其核心是用java和scala编写的分布式流数据流引擎,flink以数据并行和流水线方式执行任意流数据程序;
62.kubernetes,简称k8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,kubernetes的目标是让分布式部署容器化的服务集群简单并且高效;
63.yarn:它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度。
64.为便于对本实施例进行理解,首先对本公开实施例所公开的一种任务运行时的慢节点检测方法进行详细介绍,本公开实施例所提供的任务运行时的慢节点检测方法的执行主体一般为具有一定计算能力的终端设备或其他处理设备,其中终端设备可以为用户设备(user equipment,ue)、移动设备、用户终端、终端、个人数字助理设备(personal digital assistant,pda)、手持设备、电子设备等;在一些可能的实现方式中,该任务运行时的慢节
点检测方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
65.下面以执行主体为电子设备为例对本公开实施例提供的任务运行时的慢节点检测方法加以说明。
66.如图1所示,为本公开实施例提供的一种任务运行时的慢节点检测方法的流程图,可以包括以下步骤:
67.s101:获取流式数据处理任务的运行指标信息;流式数据处理任务包括多种算子类型的子任务。
68.这里,流式数据处理任务可以为利用flink引擎按照数据处理需求,对源源不断的流式数据进行数据处理的任务。在流式数据处理场景下,往往可以包括多种类型的流式数据处理任务,不同类型的流式数据处理任务对应于不同的数据处理需求。一种类型的流式数据处理任务可以称为一种类型flink任务,后文中的flink任务均指流式数据处理任务。本公开实施例提供的任务运行时的慢节点检测方法,可以用于对任一类型的流式数据处理任务进行慢节点检测。示例性的,flink任务例如可以为榜单计算任务、订单数计算任务、互动信息计算任务、信息推荐任务等。
69.针对流式数据处理任务而言,可以包括多种算子类型的子任务,每个算子类型的子任务可以包括至少一个,各算子类型的子任务的数量,可以根据该算子类型对应的任务并行度确定。每个子任务可以由服务集群包括的机器中的计算节点执行,一个服务集群可以包括至少一个机器,一个机器中可以包括至少一个计算节点。一种flink任务可以由至少一个服务集群执行,每个flink集群可以部署有一个flink引擎,一个flink引擎可以对应于一个作业管理器(jobmanager,简称jm)和多个任务管理器(taskmanager,简称tm),一个tm即为机器中的一个计算节点,一个tm可以运行至少一个子任务,jm用于管理各个tm并为tm调度需要执行的子任务。
70.不同算子类型的子任务往往可以具有不同的算力和不同的数据处理功能,用于对流式数据进行不同地处理。示例性的,算子类型例如可以包括数据消费类型的资源source算子、数据输出类型的下沉sink算子、数据迭代类型的集合map算子、数据同步类型的同步sync算子等。不同算子类型的子任务之间具有通讯功能,不同算子类型之间具有拓扑关系,拓扑关系用于指示各种算子类型的子任务之间的通信关系和执行顺序,例如,拓扑关系可以为source算子—》sync算子—》sink算子,该拓扑关系指示的通信关系为:source算子类型的子任务与sync算子的子任务之间具有通信关系,sync算子的子任务与sink算子的子任务之间具有通信关系;指示的执行顺序为:在执行source算子类型的子任务后,执行sync算子的子任务;在执行sync算子的子任务后,执行sink算子类型的子任务。
71.可选的,针对一种算子类型而言,其还可以细分为多个子类型,各个子类型下均包括具有该子类型的子任务。例如,针对数据输出类型的下沉sink算子而言,其可以包括三种子类型,即数据输出类型1对应的sink1算子、数据输出类型2对应的sink2算子、数据输出类型3对应的sink3算子。这种情况下,算子类型之间的拓扑关系可以为各种算子类型和子类型之间拓扑关系。例如,拓扑关系可以为source算子—》sync算子—》sink1算子—》sink2算子—》sink3算子,其中,sync算子之后除可以连接sink1算子,还可以连接有sink3算子。
72.运行指标信息为用于判断是否存在慢节点问题的指标信息,能够指示在执行流式数据处理任务的过程中,与流式数据处理任务相关的各个flink引擎的各种类型的引擎指
标信息,具体可以包括在执行流式数据处理任务的过程中,与每种算子类型的每个子任务相关的指标信息、以及与整体流式数据处理任务相关的一些指标信息。便于理解的,一种flink任务的运行指标信息例如可以包括与整体flink任务相关的一些指标信息、以及与运行在各个tm中的子任务相关的指标信息。
73.示例性的,运行指标信息可以包括flink任务的数据滞后时间、flink任务包括的各个子任务的数据滞后指标(即滞后时间lagtime指标)、各种算子类型的异常原因指标(即反压backpressured指标)、各个子任务的空闲程度指标(即忙碌busy指标),其中,数据滞后指标用于指示任务的数据滞后时间,异常原因指标用于指示各种算子类型的反压程度,在某一算子类型的backpressured指标对应的反压程度大于反压阈值的情况下,即可说明该算子类型的子任务被具有拓扑关系的其他算子类型的子任务反压,因此,异常原因指标可以用于表征各种算子类型的异常原因信息,空闲程度指标用于表征任务的忙碌程度。
74.具体实施时,与flink任务相关的各个服务集群中的机器,可以将在执行flink任务的过程中产生的运行指标信息上传至指标数据库。其中,指标数据库可以是一个独立于慢节点自动检测服务所在的机器和各个服务集群的外部存储系统,用于动态维护各个服务集群在执行flink任务时产生的运行指标信息。在确定需要针对运行flink任务的服务集群进行慢节点检测时,可以从指标数据库中,获取服务集群在对应的执行时间内产生的运行指标信息。这里,执行时间可以为预设时间段,例如过去15分钟、过去30分钟等,也可以为服务集群已经执行flink任务的持续时长。
75.需要说明的是,本公开实施例提供的任务运行时的慢节点检测方法,可以以慢节点自动检测服务的形式部署在机器中,在需要检测的流式数据处理任务为大规模甚至超大规模的任务的情况下,可以将慢节点自动检测服务分布式地部署在至少一个服务集群中。当需要执行针对任一类型的flink任务的慢节点检测时,可以按照负载均衡的策略从服务集群中确定出任一空闲的机器,利用该机器根据部署的慢节点自动检测服务,按照本公开实施例提供的任务运行时的慢节点检测方法,对该flink任务进行慢节点检测。例如,可以预先设定一个检测周期,并按照预设的检测周期,对flink任务对应的服务集群进行慢节点检测。检测出的慢节点具体可以为服务集群中的一个或多个机器。
76.s102:根据各种算子类型之间的拓扑关系和运行指标信息指示的异常原因信息,确定出存在异常的目标算子类型。
77.这里,拓扑关系用于指示各个算子类型的任务之间的通信关系和执行顺序。异常原因信息用于指示某一算子类型的任务异常与其他算子类型的任务异常的关联关系,该关联关系能够反映某一算子类型的任务异常是否由其他算子类型的任务异常导致。异常原因信息可以为运行指标信息中,各种算子类型的反压指标所指示的信息,在算子类型的反压指标对应的反压程度大于反压阈值时,则可以指示算子类型的子任务的异常,是否是由于被具有拓扑关系的其他算子类型的子任务的异常反压引起的,因此,反压指标指示的异常原因信息可以用于指示算子类型下的任务异常,是否与具有拓扑关系的其他算子类型下的任务异常相关。
78.一个算子类型可以对应于一个异常原因信息,由该算子类型的反压指标指示的反压程度确定。
79.示例性的,拓扑关系可以为source算子—》sync算子—》sink1算子—》sink2算子,
在source算子和sync算子对应的反压指标均大于反压阈值,且sink1算子的反压指标指示的反压程度小于反压阈值时,则可以确定source算子类型下子任务的异常是由于被sync算子类型下子任务的异常反压导致的,sync算子类型下子任务的异常是由于被sink1算子类型下子任务的异常反压导致的。因此,source算子类型对应的异常原因信息可以为是、sync算子也可以为是,sink1算子类型和sink2算子类型对应的异常原因信息均为否。
80.具体实施时,在获取到flink任务的运行指标信息之后,可以根据运行指标信息中与flink任务相关的数据滞后指标,确定flink任务对应的任务滞后时间。在任务滞后时间小于或等于任务滞后时间阈值的情况下,则可以确定不存在慢节点问题。反之,在任务滞后时间大于任务滞后时间阈值的情况下,则可以确定flink任务存在高滞后的问题,进而可以利用flink引擎的空闲应用程序接口(application programming interface,简称api),根据运行指标信息中与各种算子类型对应的反压指标指示的反压程度,确定各种算子类型对应的异常原因信息。
81.然后,根据各种算子类型对应的异常原因信息,确定各个算子类型下的子任务是否存在反压,也即确定各种算子类型对应的异常原因信息中,是否存在指示某一算子类型的任务异常与其他算子类型的任务异常相关的异常原因信息。若是,则可以确定存在子任务的反压,然后根据各种算子类型之间的拓扑关系,从多个算子类型中确定出引起反压的根类型,将该类型作为目标算子类型。例如,若拓扑关系为source算子—》sync算子—》sink1算子—》sink2算子—》sink3算子,若source算子类型、sync算子对应的异常原因信息均指示被反压,sink1算子类型、sink2算子类型和sink3算子类型对应的异常原因信息均指示未被反压,则可以确定根类型为sink1算子类型,也即可以确定sink1算子类型为目标算子类型。目标算子类型对应的异常用于指示该算子类型下的子任务存在异常。
82.若在确定各个算子类型的异常原因信息均指示未被反压的情况下,也即在确定各种算子类型下子任务均不存在反压的情况下,则可以确定目标算子类型为数据消费类型(即source算子类型)。
83.s103:从多种算子类型的子任务中筛选出目标算子类型的各个第一子任务,从运行指标信息中,确定各个第一子任务各自对应的待检测指标信息。
84.这里,第一子任务即为具有目标算子类型的子任务。待检测指标信息可以为运行指标信息中,用于判断目标算子类型的第一子任务是否存在慢节点问题的指标信息。
85.不同算子类型的子任务,需要使用的慢节点指标信息不同,也即在检测不同算子类型的子任务是否存在慢节点问题时,使用的运行指标信息不同。例如,在目标算子类型为source算子类型的情况下,可以使用数据滞后指标指示的数据滞后时间进行判断,在目标算子类型为除了source算子类型以外的其他算子类型的情况下,可以使用空闲程度指标指示的任务空闲程度进行判断。
86.示例性的,在目标算子类型为source算子类型的情况下,可以从运行指标信息中,获取source算子类型的各个第一子任务分别对应的数据滞后指标;在目标算子类型为除了source算子类型以外的其他算子类型的情况下,从运行指标信息中,获取各个第一子任务分别对应的空闲程度指标。
87.s104:利用待检测指标信息,从第一子任务中确定出运行缓慢的第二子任务,根据执行第二子任务的计算节点所在的执行机器,确定慢节点机器。
88.这里,第二子任务可以为在tm中运行缓慢的第一子任务,执行机器即为执行第二子任务的tm所位于的机器。慢节点机器可以为执行flink任务的各个服务集群包括的机器中,存在慢节点问题的一个机器。
89.具体实施时,针对每个第一子任务,可以判断第一子任务的待检测指标信息是否存在异常,若是,则可以将该第一子任务作为一个第二子任务,若否,则可以确定该第一子任务运行正常。或者,针对每个第一子任务,可以根据第一子任务的目标算子类型,确定该目标算子类型的慢节点检测方式,利用慢节点检测方式,对第一子任务的待检测指标信息进行检测,以确定第一子任务是否可以作为第二子任务。其中,关于各种目标算子类型对应的慢节点检测方式,将在后文进行详细介绍。
90.在确定出第二子任务之后,可以先确定用于执行第二子任务的tm所在的执行机器,然后可以将执行机器直接作为慢节点机器。或者,在确定出执行第二子任务的tm所在的执行机器之后,可以利用待检测指标对执行机器进行进一步的检测,以确定执行机器是否存在慢节点问题,从而确定出准确的慢节点机器。
91.可选的,若flink本身不存在慢节点问题,则确定出的第二子任务的数量可以为0个,慢节点机器也可以为0个。
92.在一种实施例中,针对s104中“确定第二子任务”的步骤,在目标算子类型不同的情况下,可以使用不同的慢节点检测方式完成。具体的,在目标算子类型为数据消费类型的情况下,可以按照如下s104-1~s104-3所示的慢节点检测方式,实现第二子任务的确定:
93.s104-1:在目标算子类型属于数据消费类型的情况下,根据每个第一子任务从消息队列中读取数据时依赖的各个数据分区,从第一子任务对应的待检测指标信息中,确定出每个数据分区对应的数据滞后时间。
94.这里,source算子类型的第一子任务用于从消息队列(message queue,简称mq)中读取数据,消息队列中可以存在多个数据分区,不同的数据分区用于存储不同主题的流式数据。消息队列可以为现有技术中的任一类型的消息队列,例如兔子消息队列(rabbitmq)、火箭消息队列(rocketmq)、活动消息队列(activemq)、卡夫卡消息队列(kafka)等。后文以消息队列为kafka队列为例进行说明,数据分区可以为kafka队列中的各个partition。
95.一个子任务可以在消息队列的至少一个数据分区中进行数据读取和消费,不同的子任务从消息队列中读取数据时依赖的数据分区不同。
96.在目标算子类型属于source算子类型的情况下,待检测指标信息可以包括各个第一子任务依赖的各个数据分区分别对应的数据滞后指标,数据滞后指标能够指示数据分区对应的数据滞后时间,数据分区的数据滞后时间可以使用分区滞后partition lag表示。
97.具体实施时,在目标算子类型为source算子类型的情况下,可以先确定source算子类型下的每个第一子任务在从kafka队列中读取流式数据时所使用各个数据分区。其中,一个子任务对应于至少一个数据分区。然后,针对每个第一子任务,可以从该第一子任务的待检测指标信息中,确定出该第一子任务使用的各个数据分区分别对应的数据滞后指标,然后可以根据数据滞后指标,确定各个数据分区对应的数据滞后时间,即确定各个partition的partition lag。
98.s104-2:根据数据滞后时间,确定数据滞后时间大于预设时间的数据分区的第二数量。
99.这里,预设时间可以根据经验设置,本公开实施例不进行具体限定。示例性的,预设时间可以为0。第二数量即partition lag大于预设时间的数据分区的数量。
100.具体实施时,在得到各个第一子任务对应的各个数据分区的partition lag之后,可以判断是否存在partition lag大于预设时间的数据分区,也即,判断是否存在滞后数据分区。若否,则可以确定各个第一子任务均运行正常,不存在运行缓慢的问题。若是,则可以确定partition lag大于预设时间的数据分区的第二数量。
101.s104-3:在第二数量与分区总数量之间的第三比值小于第三预设比值的情况下,根据各个数据分区对应的数据滞后时间,从第一子任务中确定出第二子任务;分区总数量为各第一子任务依赖的数据分区的总数量。
102.这里,分区总数量为各个第一子任务分别依赖的数据分区的数量之和。第三预设比值可以根据经验设置,本公开实施例也不进行具体限定。示例性的,第三预设比值可以为1/5。
103.具体实施时,在确定出第二数量之后,判断第二数量与分区总数量之间的第三比值,是否小于第三预设比值。若否,则可以确定是flink任务出现大范围的滞后,与机器无关,继而可以确定第一子任务中不存在第二子任务。若是,则可以确定第二数量的数据分区的数据滞后,可能是由于运行第一子任务的机器引起的,则可以根据各个第一子任务对应的数据分区的partition lag,从第一子任务中筛选出第二子任务。例如,可以将partition lag大于预设分区时间的数据分区对应的第一子任务,作为筛选出的第二子任务。
104.在一种实施例中,针对s104-3中“根据各个数据分区对应的数据滞后时间,从第一子任务中确定出第二子任务”的步骤,可以按照以下步骤实施:
105.s104-3-1:根据各个数据分区对应的数据滞后时间,判断各个数据分区中,是否存在数据滞后时间符合第一异常条件的待过滤数据分区。
106.这里,第一异常条件用于从各个数据分区的数据滞后时间中,筛选出异常的滞后时间。示例性的,第一异常条件可以为数据滞后时间大于第一指定时间、或者与各个数据分区的数据滞后时间中的中位数之差大于第二指定时间等。在具体实施时,第一异常条件可以根据经验设置,本公开实施例不进行具体限定。
107.具体实施时,可以利用异常值筛选算法对各个数据分区对应的数据滞后时间进行异常筛选,确定是否存在符合第一异常条件的目标滞后时间。若是,则可以将目标滞后时间对应的数据分区,作为待过滤数据分区,并执行那个下述s104-3-2。其中,确定的待过滤数据分区的数量可以为一个或多个。若否,则可以认为是第一子任务的日常滞后,不存在运行缓慢的问题。
108.示例性的,在数据分区1~10分别对应的数据滞后时间为10、10、10、100、1000、10000的情况下,可以确定目标滞后时间为100、1000、10000,将这三个目标滞后时间分别对应的数据分区作为待过滤数据分区。
109.s104-3-2:若是,根据依赖待过滤数据分区的第一子任务的每秒查询率,确定第二子任务。
110.这里,每秒查询率:queries-per-second,简称qps,用于指示执行任务的机器在1秒内所处理任务流量的多少。
111.具体实施时,在确定存在数据滞后时间存在异常的待过滤数据分区之后,可以确
定使用待过滤数据分区的流式数据的第一子任务的入流qps,然后,可以判断入流qps,是否大于等于第一子任务的平均qps的预设倍。若否,则将具有该入流qps的第一子任务作为第二子任务;若是,则可以确定具有该入流qps的第一子任务的partition lag,是由于数据不均衡引起的,即使进行机器迁移也无法解决滞后问题,因此可以确定该第一子任务作为正常运行的子任务,不进行处理。
112.这样,基于对数据滞后时间中的异常值进行筛选,可以确定出滞后较大的子任务,基于滞后较大的子任务,可以准确确定出存在慢节点问题的慢节点机器。
113.在另一种实施例中,针对s104中“确定第二子任务”的步骤,在目标算子类型属于除数据消费类型以外的其他算子类型的情况下,可以按照如下步骤一和步骤二所示的慢节点检测方式,实现第二子任务的确定:
114.步骤一、在目标算子类型属于除数据消费类型以外的其他算子类型的情况下,根据各个第一子任务的待检测指标信息指示的任务空闲程度,判断是否存在任务空闲程度符合第二异常条件的第三子任务。
115.这里,在目标算子类型不属于source算子类型的情况下,无论目标算子类型属于除source算子类型以外的其他算子类型中的哪一种算子类型,第一子任务的待检测指标信息均可以为各个第一子任务的空闲程度指标。
116.第二异常条件用于从第一子任务中,筛选出异常忙碌的第三子任务,示例性的,第二异常条件可以为任务空闲程度小于第一预设程度、或者与各个第一子任务的任务空闲程度中的中位数之差大于第二预设程度等。在具体实施时,第二异常条件可以根据经验设置,本公开实施例不进行具体限定。
117.具体实施时,在目标算子类型不属于source算子类型的情况下,可以利用异常值筛选算法,根据各个第一子任务的待检测指标信息指示的任务空闲程度,确定是否存在任务空闲程度符合第二异常条件的第三子任务。若是,则可以确定存在异常忙碌的第三子任务,进而可以基于确定出的第三子任务,执行下述步骤二。
118.若否,则可以各个第一子任务均为较为空闲的第一子任务,各个子任务的反压为正常范围内的反压,进而可以将各个第一子任务作为正常运行的子任务,不存在慢节点问题,因此可以不进行处理。
119.步骤二、若是,则根据第三子任务的每秒查询率以及预设查询率,确定第二子任务。
120.这里,预设查询率可以为第三子任务的平均qps的预设倍,预设倍可以根据经验设置,此处不进行具体限定。示例性的,预设倍可以为1.5倍。
121.具体实施时,在确定出存在异常忙碌的第三子任务之后,可以第三子任务的入流qps,并判断入流qps,是否大于等于预设查询率。若是,则可以确定第三子任务的忙碌是由于数据倾斜导致的,即使进行机器迁移也无法解决滞后问题,因此可以确定该第三子任务作为正常运行的子任务,不进行处理;若否,则可以将第三子任务确定为运行缓慢的第二子任务。
122.这样,基于对任务空闲程度中的异常值进行筛选,可以确定出异常忙碌的第三子任务,基于第三子任务,可以准确确定出存在慢节点问题的慢节点机器。
123.如图2所示,为本公开实施例提供的一种确定运行缓慢的第二子任务的具体流程
图,可以包括以下步骤:
124.s201:根据flink任务的数据滞后指标,判断flink任务是否存在高滞后。
125.若否,则可以确定不存在慢节点问题;若是,则执行下述s202及后续步骤。
126.s202:判断各个算子类型下的子任务是否存在反压。
127.若否,则执行s203~s205;若是,则执行s206~s208。
128.s203:判断滞后的数据分区与分区总数量的比值,是否小于第三预设比值。
129.若否,则可以确定是第一子任务的大范围滞后,不存在慢节点问题;若是,则执行下述s204。
130.s204:判断是否存在数据滞后时间异常的待过滤数据分区。
131.若否,则可以确定是第一子任务的日常滞后,不存在慢节点问题;若是,则执行下述s205。
132.s205:判断待过滤数据分区对应的第一子任务的每秒查询率qps,是否大于等于平均qps的预设倍。
133.若否,则可以确定第一子任务为运行缓慢的第二子任务;若是,则可以确定是由于数据不均衡引起的滞后,不进行处理。
134.关于上述s203~s205的具体实施步骤,可以参照上述s104-1~s104-3,此处不再赘述。
135.s206:根据各种算子类型之间的拓扑关系,确定目标算子类型的第一子任务。
136.本步骤的具体实施过程,可以参照s102,此处不再赘述。
137.s207:判断第一子任务中是否存在异常忙碌的第三子任务。
138.若否,则可以确定是第一子任务的日常反压,不进行处理;若是,则执行下述s208。
139.s208:判断第三子任务的每秒查询率qps,是否大于等于平均qps的预设倍。
140.若是,则可以确定存在数据倾斜,不进行处理;若否,将第三子任务确定为运行缓慢的第二子任务。
141.关于上述s207~s208的具体实施步骤,可以参照上述步骤一和步骤二,此处不再赘述。
142.在一种实施例中,针对s104中的“确定存在慢节点问题的慢节点机器”的步骤,可以按照以下步骤实施:
143.s1:在第二子任务的目标数量大于预设数量的情况下,根据执行各第二子任务的计算节点所在的执行机器,确定每个执行机器对应的任务数量。
144.这里,目标数量即为确定出的第二子任务的总数量。预设数量可以根据经验设置,本公开实施例不进行具体限定。示例性的,预设数量可以为1。一个执行机器对应的任务数量,即为该执行机器执行的第二子任务的总数量。
145.具体实施时,在确定出第二子任务之后,可以先判断第二子任务的数量是否大于1,若否,则可以直接将执行该第二子任务的计算节点所在的执行机器,作为慢节点机器。若是,则可以根据执行多个第二子任务中的每个第二子任务的计算节点所在的执行机器,确定每个执行机器对应的任务数量。
146.可选的,在第二子任务的数量等于1的情况下,还可以进一步确定是否设置了无聚合性迁移功能,该功能用于指示在第二子任务数量为1时,对唯一的第二子任务所对应的机
器进行迁移,或者,在第二子任务数量为多个的情况下,即使确定出的第二子任务不大量出现在一个机器中,也会对机器进行迁移。若配置了无聚合性迁移功能,则可以确定执行该唯一的第二子任务的tm所在的执行机器为慢节点机器。若未配置无聚合性迁移功能,则可以确定不存在慢节点机器,不对运行缓慢的第二子任务进行处理。
147.s2:根据各个执行机器对应的任务数量分别与目标数量的第一比值,确定慢节点机器。
148.具体实施时,针对每个用于执行第二子任务的执行机器,可以确定该执行机器对应的任务数量与目标数量的第一比值。在得到各个执行机器分别对应的第一比值之后,可以根据各个第一比值,确定出慢节点机器。例如,可以将最大的第一比值对应的执行机器作为慢节点机器。
149.在一种实施例中,在得到各个执行机器分别对应的第一比值之后,可以确定第一比值和第一预设比值之间的大小关系,按照不同的方式进行慢节点机器的确定。其中,第一预设比值可以根据经验设置,本公开实施例不进行具体限定。示例性的,第一预设比值可以为2/3。
150.具体的,在存在大于或等于第一预设比值的目标比值的情况下,将目标比值对应的执行机器作为慢节点机器。
151.这里,目标比值可以为大于或等于第一预设比值的第一比值。在存在目标比值的情况下,可以将对应于目标比值的执行机器作为慢节点机器。这样,由于目标比值大于或等于第一预设比值,所以对应于目标比值的执行机器,为存在大量运行缓慢的第二子任务的一个机器,通过将该机器作为慢节点机器并利用后文的步骤进行迁移,可以提高机器迁移的合理性和多个第二子任务的执行效率。
152.或者,在各个第一比值均小于第一预设比值的情况下,根据每个第二子任务的待检测指标信息指示的指标异常程度,将指标异常程度最大的第二子任务对应的执行机器作为慢节点机器。
153.这里,指标异常程度可以为待检测指标信息中的指标值的异常程度。例如,在目标算子类型为source算子类型的情况下,待检测指标信息指示的指标异常程度,可以反映各个数据分区对应的数据滞后时间的时间长度;在目标算子类型不属于source算子类型的情况下,待检测指标信息指示的指标异常程度,可以反映各个第一子任务的任务空闲程度的高低。
154.具体实施时,在各个第一比值均小于第一预设比值的情况下,也即在不存在大于或等于第一预设比值的第一比值的情况下,可以说明目标数量的第二子任务中没有机器聚合性(即目标数量的第二子任务,没有出现大量聚集在同一个机器中的情况)。这种情况下,可以根据每个第二子任务的待检测指标信息指示的指标异常程度,将指标异常程度最大的第二子任务对应的执行机器作为慢节点机器。例如,在第二子任务为source算子类型的子任务的情况下,可以将数据滞后时间最长的数据分区对应的第二子任务所在的执行机器,作为慢节点机器。在在第二子任务不属于source算子类型的子任务的情况下,可以将任务空闲程度最低的第二子任务所在的执行机器,作为慢节点机器。这样,通过机器聚合性和异常值筛选算法,可以实现对非机器引擎的运行缓慢情况的过滤,提高确定出的运行缓慢的第二子任务的准确性。
155.可选的,在各个第一比值均小于第一预设比值的情况下,也可以确定是否设置了无聚合性迁移功能,若是,则可以将指标异常程度最大的第二子任务对应的执行机器作为慢节点机器;若否,则可以确定在第二子任务没有大量聚合在同一个机器的情况下,出现的任务运行缓慢是在合理范围内的,因此可以确定不存在慢节点机器,不对运行缓慢的各个第二子任务进行处理。
156.在一种实施例中,s1可以按照以下步骤实施:
157.s1-1:在目标算子类型属于数据消费类型的情况下,根据各第二子任务从消息队列中读取数据时依赖的各个数据分区,从第二子任务对应的待检测指标信息中,确定出每个数据分区对应的数据滞后时间。
158.具体实施时,在执行s1之前,还可以先判断目标算子类型是否属于数据消费类型,若是,则可以先依次执行s1-1~s1-4再执行s2;若否,可以直接执行s1和s2,此时的s1不包括s1-1~s1-4。
159.针对s1-1的具体实施过程,与上述s104-1的执行过程类似,此处不再赘述。示例性的,在目标算子类型属于source算子类型的情况下,可以从待检测指标信息中,获取每个第二子任务依赖的数据分区对应的partition lag。
160.s1-2:根据数据滞后时间,从数据分区中筛选出多个目标数据分区。
161.具体实施时,可以利用各个数据分区的partition lag,按照时间从长到短的顺序,对各个数据分区进行排序,得到每个数据分区的排序次序。然后,可以将排序次序小于预设次序的数据分区作为目标数据分区。这样,可以从数据分区中,筛选出partition lag较长的多个分区。例如,预设次序可以为11,也即,可以筛选出partition lag排序前十的各个数据分区。
162.可理解的,在数据分区的总数量小于预设次序对应的数值的情况下,可以将各个数据分区均作为目标数据分区。
163.s1-3:根据每个目标数据分区所属的数据管理服务器,确定各个数据管理服务器对应的数据分区数量。
164.这里,不同的数据分区可以由不同的数据管理服务器进行管理,数据管理服务器即为消息队列对应的各个broker。数据分区数量即为每个broker管理的目标数据分区的数量。
165.具体实施时,在筛选出各个目标数据分区之后,可以确定每个目标数据分区所属的数据管理服务器,然后,可以进一步确定每个数据管理服务器所管理的目标数据分区的数量(即数据分区数量)。
166.s1-4:在各个数据管理服务器对应的数据分区数量分别与目标数据分区的第一数量之间的第二比值,均小于第二预设比值的情况下,根据执行各第二子任务的计算节点所在的执行机器,确定每个执行机器对应的任务数量。
167.这里,第二预设比值可以根据经验设置,本公开实施例不进行具体限定。示例性的,第二预设比值可以为2/3。第一数量即为目标数据分区的数量。
168.具体实施时,可以根据各个数据管理服务器对应的数据分区数量与第一数量,确定每个数据管理服务器对应的第二比值。然后,判断是否存在大于第二预设比值的第二比值,若是,则可以确定flink任务运行慢的原因可能是由于大于或等于第二预设比值的第二
比值所对应的数据管理服务器本身存在问题导致的,而不是由于机器导致的,因此可以确定不存在慢节点机器,也不对第二子任务进行处理。若否,也即各个第二比值均小于第二预设比值,可以说明此时flink任务运行慢的原因不是由数据管理服务器本身存在问题导致的,而由于机器导致的,因此可以根据各个执行机器对应的任务数量分别与目标数量的第一比值,以及第一比值与第一预设比值大小关系,确定慢节点机器。
169.这样,利用数据管理服务器对应的第二比值,可以过滤掉由于数据管理服务器自身存在问题而导致任务运行缓慢的问题,提高确定出慢节点的准确性。
170.如图3所示,为本公开实施例提供的一种确定慢节点机器的具体流程图,可以包括以下步骤:
171.s301:判断第二子任务的数量是否大于1。
172.若否,则执行s302;若是,则执行s303。
173.s302:判断是否设置了无聚合性迁移功能。
174.若是,则将第二子任务所在的执行机器作为慢节点机器;若否,则确定不存在慢节点机器,不进行处理。
175.s303:判断目标算子类型是否属于数据消费类型。
176.若是,在执行s304~s306;若否,则执行s307。
177.s304:从各第二子任务依赖的数据分区中筛选出多个目标数据分区。
178.本步骤的具体实施过程,可以参照上述s1-1和s1-2。
179.s305:判断同一个数据管理服务器关联的目标数据分区的第二比值,是否大于等于第二预设比值。
180.若是,则确定不存在慢节点机器,不进行处理;若否,则执行s306。
181.本步骤的具体实施过程,可以参照s1-1和s1-4。
182.s306:判断同一个执行机器执行的第二子任务的数量的第一比值,是否大于等于第一预设比值。
183.若是,则确定存在机器聚合性,将聚合了大量第二子任务的执行机器作为慢节点机器;若否;如果设置了无聚合性迁移功能,将数据滞后时间最久的第二子任务对应的执行机器作为慢节点机器。
184.s307:判断同一个执行机器执行的第二子任务的数量的第一比值,是否大于等于第一预设比值。
185.若是,则确定存在机器聚合性,将聚合了大量第二子任务的执行机器作为慢节点机器;若否;如果设置了无聚合性迁移功能,将任务空闲程度最低的第二子任务对应的执行机器作为慢节点机器。
186.关于上述s301~s307的具体实施步骤,可以参照上述各实施例,此处不再赘述。
187.在一种实施例中,在确定慢节点机器之后,还可以对慢节点机器进行迁移,以实现对慢节点问题的解决。具体的,可以按照如下步骤进行机器迁移:
188.p1:利用预先设置的服务迁移接口,根据慢节点机器中用于执行第二子任务的各个目标计算节点所需的资源量,预先为每个目标计算节点申请目标资源。
189.这里,服务迁移接口可以是预先在flink引擎内部开发的一个api,具有调用机器迁移功能的能力。机器迁移功能能够实现将运行第二子任务的tm迁移至新的机器,也即可
以实现将存在慢节点问题的慢节点机器中运行缓慢的第二子任务,迁移至新的机器上执行。
190.需要说明的是,机器迁移功能不是现有技术中已经存在的功能,而是针对慢节点问题专门开发的一个功能,不仅能够实现机器迁移,还可以具备“拉黑+资源预申请”等优化功能,以实现对迁移工作的优化。其中,拉黑即后文中的设置屏蔽信息,资源预申请即预先申请目标资源。
191.目标计算节点即为慢节点机器中,用于执行运行缓慢的第二子任务的计算节点,也即慢节点机器中的用于执行第二子任务的tm。
192.目标计算节点所需的资源量即为运行一个目标计算节点所需的容器资源,例如,k8s中的pod容器资源、container容器资源等,目标资源即为预申请得到的容器资源。
193.具体实施时,可以通过服务迁移接口调用机器迁移功能,先确定每个目标计算节点所需的资源量,然后根据资源量,在k8s中,为各个目标计算节点预先申请对应资源量的容器资源。
194.p2:设置针对慢节点机器的屏蔽信息,屏蔽信息用于指示具有目标算子类型的新的子任务,无法被调度到慢节点机器中的计算节点执行。
195.这里,新的子任务可以在确定设置屏蔽信息后,新生成具有目标算子类型的子任务。例如,新的source算子类型的子任务、新的sink算子类型下的子任务。屏蔽信息指示具有目标算子类型的新的子任务,无法被调度到慢节点机器中的计算节点执行。也即,屏蔽信息用于指示对慢节点机器进行针对flink任务下的目标算子类型的子任务的拉黑,以保证后续在产生了新的目标算子类型的子任务之后,不会被调度到慢节点机器,以及进行慢节点检测的flink任务也不会被调用到慢节点机器上。
196.可选的,屏蔽信息中可以包括一个屏蔽时长,以保证在屏蔽时长内,目标算子类型的新的子任务,无法被调度到慢节点机器中的计算节点执行。在超过屏蔽时长后,目标算子类型的新的子任务可以被再度调度到慢节点机器中的计算节点执行。
197.具体实施时,在确定慢节点机器之后,可以利用调用的机器迁移功能,针对慢节点机器设置针对当前进行慢节点检测的flink任务、以及针对该flink任务下目标算子类型的新的子任务的屏蔽信息。如此,在检测出flink任务对应的慢节点机器之后,可以实现针对慢节点机器的拉黑,以保证慢节点机器在屏蔽时长内不会再被调用执行该flink任务。
198.可理解的,上述p1和p2不存在严格的执行顺序,可以同步执行,也可以异步执行。
199.需要说明的是,针对慢节点机器而言,除了屏蔽信息相关的任务不会被调度到慢节点机器执行,慢节点机器中运行缓慢的第二子任务会被迁移到替代计算节点中执行,慢节点机器已经在执行的其他引擎类型的任务(除了第二子任务以外的任务)不会被影响,在慢节点机器下线前依旧可以被慢节点机器执行。
200.p3:利用申请的目标资源,创建用于替代目标计算节点的替代计算节点,并利用替代计算节点执行与目标计算节点相关的第二子任务。
201.具体实施时,在目标资源预申请成功之后,可以利用调用的机器迁移功能,在新的机器上线时,利用申请的目标资源,在新上线的机器中创建用于替代各个目标计算节点的各个替代计算节点。并且,可以基于flink引擎的故障转移(failover)机制,利用替代计算节点恢复执行与目标计算节点相关的第二子任务,同时还可以利用替代计算节点,执行具
有目标算子类型的新的子任务。此外,还可以对慢节点机器中的各个目标计算节点进行释放,具体的释放步骤可以为,利用在目标计算节点(tm或container)上开发的资源释放接口,请求管理tm的jm端,由jm实现对目标计算节点的资源释放。
202.这样,不仅可以实现整个机器迁移的过程都是利用服务迁移接口在服务集群异步执行的,还可以利用预申请目标资源的方式,实现对需要迁移的机器中的tm资源的预先申请,最后基于failover机制和预申请的目标资源,进行机器迁移的速度通常可以是秒级的,大大提高了慢节点迁移的速度和稳定性、以及提高慢节点问题解决的效率。
203.可选的,在利用服务迁移接口调用机器迁移功能后,也可以不设置屏蔽信息以及不进行资源预申请,而直接进行机器迁移工作,以实现将运行缓慢的第二子任务,迁移到新的机器上运行。具体过程可以为,在新的机器上线时,利用机器迁移功能在新的机器中进行目标资源的申请,并基于申请的目标资源创建替代执行节点,然后基于failover机制,实现对与目标计算节点相关的第二子任务的恢复执行,以及执行具有目标算子类型的新的子任务。同时,在机器迁移完成后,可以利用资源释放接口,请求管理tm的jm端,由jm实现对目标计算节点的资源释放。这样,在不借助设置屏蔽信息和资源预申请的技术手段的情况下,利用机器迁移功能即可实现将慢节点机器运行的第二子任务迁移至新的机器上执行,从而解决慢节点问题。同时,若在利用机器迁移功能进行机器迁移的过程中,使用设置屏蔽信息和资源预申请作为辅助手段,可以进一步提高迁移效率、提升迁移效果。
204.如图4所示,为本公开实施提供的一种慢节点检测方法的交互示意图,在图4中,示出了三种不同类型的flink任务,资源集群可以为k8s集群或yarn集群。各个flink任务的服务集群,可以将在执行flink任务过程中产生的运行指标信息,上报至指标数据库进行存储。具体的,慢节点自动检测服务可以从指标数据库中,获取待检测的flink任务的运行指标信息。然后,可以基于运行指标信息进行慢节点分析,确定出存在慢节点问题的慢节点机器。其中,慢节点分析可以包括1、利用异常值筛选算法,确定出运行缓慢的第二子任务;2、基于机器聚合性,确定出慢节点机器。关于慢节点分析步骤的具体实施过程,可以参展上述各实施例。在得到慢节点机器之后,可以执行屏蔽和迁移操作,其中,屏蔽操作可以为生成针对慢节点机器的屏蔽信息,迁移操作可以基于预申请目标资源和故障转移(failover)机制,完成对慢节点机器的迁移。其中,屏蔽操作用于保证flink任务在短时间内不会被调用到慢节点机器执行;预申请目标资源用于对迁移工作的优化,以提高迁移速度。可选的,也不可以在不预申请目标资源的情况下,和/或,不设置屏蔽信息的情况下,实现对慢节点机器的迁移。关于屏蔽和迁移操作的具体实施过程,可以参照上述p1~p3,此处也不再赘述。
205.本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
206.基于同一发明构思,本公开实施例中还提供了与任务运行时的慢节点检测方法对应的任务运行时的慢节点检测装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述任务运行时的慢节点检测方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
207.如图5所示,为本公开实施例提供的一种任务运行时的慢节点检测装置的示意图,包括:
208.获取模块501,用于获取流式数据处理任务的运行指标信息;所述流式数据处理任务包括多种算子类型的子任务;
209.第一确定模块502,用于根据各种算子类型之间的拓扑关系和所述运行指标信息指示的异常原因信息,确定出存在异常的目标算子类型;
210.第二确定模块503,用于从多种所述算子类型的子任务中筛选出所述目标算子类型的各个第一子任务,从所述运行指标信息中,确定各个所述第一子任务各自对应的待检测指标信息;
211.第三确定模块504,用于利用所述待检测指标信息,从所述第一子任务中确定出运行缓慢的第二子任务,根据执行所述第二子任务的计算节点所在的执行机器,确定慢节点机器。
212.在一种可能的实施方式中,所述装置还包括:
213.迁移模块505,在确定所述慢节点机器之后,用于:
214.利用预先设置的服务迁移接口,根据所述慢节点机器中用于执行所述第二子任务的各个目标计算节点所需的资源量,预先为每个所述目标计算节点申请目标资源;
215.设置针对所述慢节点机器的屏蔽信息,所述屏蔽信息用于指示所述目标算子类型的新的子任务,无法被调度到所述慢节点机器中的计算节点执行;
216.利用申请的目标资源,创建用于替代所述目标计算节点的替代计算节点,并利用所述替代计算节点执行与所述目标计算节点相关的所述第二子任务。
217.在一种可能的实施方式中,所述第三确定模块504,在根据执行所述第二子任务的计算节点所在的执行机器,确定慢节点机器时,用于:
218.在所述第二子任务的目标数量大于预设数量的情况下,根据执行各所述第二子任务的计算节点所在的执行机器,确定每个所述执行机器对应的任务数量;
219.根据各个所述执行机器对应的所述任务数量分别与所述目标数量的第一比值,确定所述慢节点机器。
220.在一种可能的实施方式中,所述第三确定模块504,在根据各个所述执行机器对应的所述任务数量分别与所述目标数量的第一比值,确定所述慢节点机器时,用于:
221.在存在大于或等于第一预设比值的目标比值的情况下,将目标比值对应的执行机器作为所述慢节点机器;或者,
222.在各个所述第一比值均小于所述第一预设比值的情况下,根据每个所述第二子任务的所述待检测指标信息指示的指标异常程度,将指标异常程度最大的第二子任务对应的执行机器作为所述慢节点机器。
223.在一种可能的实施方式中,所述第三确定模块504,在根据执行各所述第二子任务的计算节点所在的执行机器,确定每个所述执行机器对应的任务数量时,用于:
224.在所述目标算子类型属于数据消费类型的情况下,根据各所述第二子任务从消息队列中读取数据时依赖的各个数据分区,从所述第二子任务对应的待检测指标信息中,确定出每个所述数据分区对应的数据滞后时间;
225.根据所述数据滞后时间,从所述数据分区中筛选出多个目标数据分区;
226.根据每个所述目标数据分区所属的数据管理服务器,确定各个所述数据管理服务器对应的数据分区数量;
227.在各个所述数据管理服务器对应的所述数据分区数量分别与所述目标数据分区的第一数量之间的第二比值,均小于第二预设比值的情况下,根据执行各所述第二子任务的计算节点所在的执行机器,确定每个所述执行机器对应的所述任务数量。
228.在一种可能的实施方式中,所述第三确定模块504,在利用所述待检测指标信息,从所述第一子任务中确定出运行缓慢的第二子任务时,用于:
229.在所述目标算子类型属于数据消费类型的情况下,根据每个所述第一子任务从消息队列中读取数据时依赖的各个数据分区,从所述第一子任务对应的待检测指标信息中,确定出每个所述数据分区对应的数据滞后时间;
230.根据所述数据滞后时间,确定数据滞后时间大于预设时间的数据分区的第二数量;
231.在所述第二数量与分区总数量之间的第三比值小于第三预设比值的情况下,根据各个所述数据分区对应的所述数据滞后时间,从所述第一子任务中确定出所述第二子任务;所述分区总数量为各所述第一子任务依赖的数据分区的总数量。
232.在一种可能的实施方式中,所述第三确定模块504,在所述根据各个所述数据分区对应的所述数据滞后时间,从所述第一子任务中确定出所述第二子任务时,用于:
233.根据各个所述数据分区对应的所述数据滞后时间,判断各个所述数据分区中,是否存在数据滞后时间符合第一异常条件的待过滤数据分区;
234.若是,根据依赖所述待过滤数据分区的所述第一子任务的每秒查询率,确定所述第二子任务。
235.在一种可能的实施方式中,所述第三确定模块504,在利用所述待检测指标信息,从所述第一子任务中确定出运行缓慢的第二子任务时,用于:
236.在所述目标算子类型属于除数据消费类型以外的其他算子类型的情况下,根据各个所述第一子任务的所述待检测指标信息指示的任务空闲程度,判断是否存在任务空闲程度符合第二异常条件的第三子任务;
237.若是,则根据所述第三子任务的每秒查询率以及预设查询率,确定所述第二子任务。
238.关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
239.基于同一技术构思,本技术实施例还提供了一种电子设备。参照图6所示,为本技术实施例提供的一种电子设备的结构示意图,包括:
240.处理器601、存储器602和总线603。其中,存储器602存储有处理器601可执行的机器可读指令,处理器601用于执行存储器602中存储的机器可读指令,所述机器可读指令被处理器601执行时,处理器601执行下述步骤:s101:获取流式数据处理任务的运行指标信息;流式数据处理任务包括多种算子类型的子任务;s102:根据各种算子类型之间的拓扑关系和运行指标信息指示的异常原因信息,确定出存在异常的目标算子类型;s103:从多种算子类型的子任务中筛选出目标算子类型的各个第一子任务,从运行指标信息中,确定各个第一子任务各自对应的待检测指标信息以及s104:利用待检测指标信息,从第一子任务中确定出运行缓慢的第二子任务,根据执行第二子任务的计算节点所在的执行机器,确定慢节点机器。
241.上述存储器602包括内存6021和外部存储器6022;这里的内存6021也称内存储器,用于暂时存放处理器601中的运算数据,以及与硬盘等外部存储器6022交换的数据,处理器601通过内存6021与外部存储器6022进行数据交换,当电子设备运行时,处理器601与存储器602之间通过总线603通信,使得处理器601在执行上述方法实施例中所提及的执行指令。
242.本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的任务运行时的慢节点检测方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
243.本公开实施例所提供的任务运行时的慢节点检测方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的任务运行时的慢节点检测方法的步骤,具体可参见上述方法实施例,在此不再赘述。
244.该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(software development kit,sdk)等等。
245.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
246.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
247.另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
248.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
249.若本技术技术方案涉及个人信息,应用本技术技术方案的产品在处理个人信息前,已明确告知个人信息处理规则,并取得个人自主同意。若本技术技术方案涉及敏感个人信息,应用本技术技术方案的产品在处理敏感个人信息前,已取得个人单独同意,并且同时
满足“明示同意”的要求。例如,在摄像头等个人信息采集装置处,设置明确显著的标识告知已进入个人信息采集范围,将会对个人信息进行采集,若个人自愿进入采集范围即视为同意对其个人信息进行采集;或者在个人信息处理的装置上,利用明显的标识/信息告知个人信息处理规则的情况下,通过弹窗信息或请个人自行上传其个人信息等方式获得个人授权;其中,个人信息处理规则可包括个人信息处理者、个人信息处理目的、处理方式、处理的个人信息种类等信息。
250.最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。
技术特征:
1.一种任务运行时的慢节点检测方法,其特征在于,包括:获取流式数据处理任务的运行指标信息;所述流式数据处理任务包括多种算子类型的子任务;根据各种算子类型之间的拓扑关系和所述运行指标信息指示的异常原因信息,确定出存在异常的目标算子类型;从多种所述算子类型的子任务中筛选出所述目标算子类型的各个第一子任务,从所述运行指标信息中,确定各个所述第一子任务各自对应的待检测指标信息;利用所述待检测指标信息,从所述第一子任务中确定出运行缓慢的第二子任务,根据执行所述第二子任务的计算节点所在的执行机器,确定慢节点机器。2.根据权利要求1所述的方法,其特征在于,在确定所述慢节点机器之后,还包括:利用预先设置的服务迁移接口,根据所述慢节点机器中用于执行所述第二子任务的各个目标计算节点所需的资源量,预先为每个所述目标计算节点申请目标资源;设置针对所述慢节点机器的屏蔽信息,所述屏蔽信息用于指示所述目标算子类型的新的子任务,无法被调度到所述慢节点机器中的计算节点执行;利用申请的目标资源,创建用于替代所述目标计算节点的替代计算节点,并利用所述替代计算节点执行与所述目标计算节点相关的所述第二子任务。3.根据权利要求1所述的方法,其特征在于,根据执行所述第二子任务的计算节点所在的执行机器,确定慢节点机器,包括:在所述第二子任务的目标数量大于预设数量的情况下,根据执行各所述第二子任务的计算节点所在的执行机器,确定每个所述执行机器对应的任务数量;根据各个所述执行机器对应的所述任务数量分别与所述目标数量的第一比值,确定所述慢节点机器。4.根据权利要求3所述的方法,其特征在于,根据各个所述执行机器对应的所述任务数量分别与所述目标数量的第一比值,确定所述慢节点机器,包括:在存在大于或等于第一预设比值的目标比值的情况下,将目标比值对应的执行机器作为所述慢节点机器;或者,在各个所述第一比值均小于所述第一预设比值的情况下,根据每个所述第二子任务的所述待检测指标信息指示的指标异常程度,将指标异常程度最大的第二子任务对应的执行机器作为所述慢节点机器。5.根据权利要求3所述的方法,其特征在于,根据执行各所述第二子任务的计算节点所在的执行机器,确定每个所述执行机器对应的任务数量,包括:在所述目标算子类型属于数据消费类型的情况下,根据各所述第二子任务从消息队列中读取数据时依赖的各个数据分区,从所述第二子任务对应的待检测指标信息中,确定出每个所述数据分区对应的数据滞后时间;根据所述数据滞后时间,从所述数据分区中筛选出多个目标数据分区;根据每个所述目标数据分区所属的数据管理服务器,确定各个所述数据管理服务器对应的数据分区数量;在各个所述数据管理服务器对应的所述数据分区数量分别与所述目标数据分区的第一数量之间的第二比值,均小于第二预设比值的情况下,根据执行各所述第二子任务的计
算节点所在的执行机器,确定每个所述执行机器对应的所述任务数量。6.根据权利要求1所述的方法,其特征在于,利用所述待检测指标信息,从所述第一子任务中确定出运行缓慢的第二子任务,包括:在所述目标算子类型属于数据消费类型的情况下,根据每个所述第一子任务从消息队列中读取数据时依赖的各个数据分区,从所述第一子任务对应的待检测指标信息中,确定出每个所述数据分区对应的数据滞后时间;根据所述数据滞后时间,确定数据滞后时间大于预设时间的数据分区的第二数量;在所述第二数量与分区总数量之间的第三比值小于第三预设比值的情况下,根据各个所述数据分区对应的所述数据滞后时间,从所述第一子任务中确定出所述第二子任务;所述分区总数量为各所述第一子任务依赖的数据分区的总数量。7.根据权利要求6所述的方法,其特征在于,所述根据各个所述数据分区对应的所述数据滞后时间,从所述第一子任务中确定出所述第二子任务,包括:根据各个所述数据分区对应的所述数据滞后时间,判断各个所述数据分区中,是否存在数据滞后时间符合第一异常条件的待过滤数据分区;若是,根据依赖所述待过滤数据分区的所述第一子任务的每秒查询率,确定所述第二子任务。8.根据权利要求1所述的方法,其特征在于,利用所述待检测指标信息,从所述第一子任务中确定出运行缓慢的第二子任务,包括:在所述目标算子类型属于除数据消费类型以外的其他算子类型的情况下,根据各个所述第一子任务的所述待检测指标信息指示的任务空闲程度,判断是否存在任务空闲程度符合第二异常条件的第三子任务;若是,则根据所述第三子任务的每秒查询率以及预设查询率,确定所述第二子任务。9.一种任务运行时的慢节点检测装置,其特征在于,包括:获取模块,用于获取流式数据处理任务的运行指标信息;所述流式数据处理任务包括多种算子类型的子任务;第一确定模块,用于根据各种算子类型之间的拓扑关系和所述运行指标信息指示的异常原因信息,确定出存在异常的目标算子类型;第二确定模块,用于从多种所述算子类型的子任务中筛选出所述目标算子类型的各个第一子任务,从所述运行指标信息中,确定各个所述第一子任务各自对应的待检测指标信息;第三确定模块,用于利用所述待检测指标信息,从所述第一子任务中确定出运行缓慢的第二子任务,根据执行所述第二子任务的计算节点所在的执行机器,确定慢节点机器。10.一种电子设备,其特征在于,包括:处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述处理器执行如权利要求1至8任意一项所述的任务运行时的慢节点检测方法的步骤。11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被电子设备运行时,所述电子设备执行如权利要求1至8任意一项所述的任务运行时的慢节点检测方法的步骤。
技术总结
本公开提供了一种任务运行时的慢节点检测方法、装置、电子设备和存储介质,其中,该方法包括:获取流式数据处理任务的运行指标信息;所述流式数据处理任务包括多种算子类型的子任务;根据各种算子类型之间的拓扑关系和所述运行指标信息指示的异常原因信息,确定出存在异常的目标算子类型;从多种所述算子类型的子任务中筛选出所述目标算子类型的各个第一子任务,从所述运行指标信息中,确定各个所述第一子任务各自对应的待检测指标信息;利用所述待检测指标信息,从所述第一子任务中确定出运行缓慢的第二子任务,根据执行所述第二子任务的计算节点所在的执行机器,确定慢节点机器。器。器。
技术研发人员:张一凡 陈张昊 王蒙 张光辉 方勇 师锐 马天白 毛言粲
受保护的技术使用者:北京火山引擎科技有限公司
技术研发日:2023.08.04
技术公布日:2023/10/20
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
