消费者的消费延迟时间确定方法和装置
文献发布时间:2023-06-19 19:16:40
技术领域
本申请涉及计算机领域,特别是涉及一种消费者的消费延迟时间确定方法、装置、计算机设备和存储介质。
背景技术
目前,在度量kafka中的Consumer在消费Topic中的消息时的延迟时间时,传统做法是根据话题中各分区的延迟消息量的数量来进行统计,然而,这种度量方式获取到的是消费者在消费时的延迟消息数量,并不能准确知道延迟的时间,导致延迟度量非常抽象不直观。研发人员或运维人员无法基于延迟消息数量这一维度去度量生产问题,也无法给延迟设置分类分级告警,难以进行准确的告警订阅,进而给系统留下风险隐患。
发明内容
本申请针对上述不足或缺点,提供了一种消费者的消费延迟时间确定方法、装置、计算机设备和存储介质,本申请实施例能够更加直观准确地确定出消费者在消费目标话题中的消息时对应的消费延迟时间。
本申请根据第一方面提供了一种消费者的消费延迟时间确定方法,在一个实施例中,该方法包括:
获取消费者在消费目标话题中的消息时,目标话题的每个分区对应的延迟消息量和每秒消息量;
根据每个分区对应的延迟消息量和每秒消息量确定每个分区对应的延迟时间;
根据每个分区对应的延迟时间确定消费者在消费目标话题中的消息时对应的消费延迟时间。
在一个实施例中,获取每个分区对应的延迟消息量,包括:
获取每个分区对应的消息最高点位值和下一消息点位值;
将每个分区对应的消息最高点位值减去下一消息点位值,得到每个分区对应的延迟消息量。
在一个实施例中,获取每个分区对应的每秒消息量,包括:
获取每个分区对应的第一消息最高点位值和第二消息最高点位值;第一消息最高点位值指第一时刻对应的消息最高点位值,第二消息最高点位值指第二时刻对应的消息最高点位值,第一时刻和第二时刻的时间间隔为1秒;
将每个分区对应的第一消息最高点位值和第二消息最高点位值间的差值作为每个分区对应的每秒消息量。
在一个实施例中,得到每个分区对应的延迟消息量之后,上述方法还包括:
将每个分区对应的分区标号以及延迟消息量存至第一哈希映射对象;
得到每个分区对应的每秒消息量之后,上述方法还包括:
将每个分区对应的分区标号以及每秒消息量存至第二哈希映射对象。
在一个实施例中,根据每个分区对应的延迟消息量和每秒消息量确定每个分区对应的延迟时间,包括:
将每个分区对应的延迟消息量除以每个分区对应的每秒消息量,得到每个分区对应的延迟时间。
在一个实施例中,根据每个分区对应的延迟消息量和每秒消息量确定每个分区对应的延迟时间之前,上述方法还包括:
遍历第一哈希映射对象,以获取每个分区对应的延迟消息量;
遍历第二哈希映射对象,以获取每个分区对应的每秒消息量
在一个实施例中,根据每个分区对应的延迟时间确定消费者在消费目标话题中的消息时对应的消费延迟时间,包括:
依次遍历每个分区对应的延迟时间,以确定各分区对应的延迟时间中的最大延迟时间;
将上述最大延迟时间确定为消费者在消费目标话题中的消息时对应的消费延迟时间。
本申请根据第二方面提供了一种消费者的消费延迟时间确定装置,在一个实施例中,该装置包括:
获取模块,用于获取消费者在消费目标话题中的消息时,目标话题的每个分区对应的延迟消息量和每秒消息量;
第一确定模块,用于根据每个分区对应的延迟消息量和每秒消息量确定每个分区对应的延迟时间;
第二确定模块,用于根据每个分区对应的延迟时间确定消费者在消费目标话题中的消息时对应的消费延迟时间。
本申请根据第三方面提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任一方法的实施例的步骤。
本申请根据第四方面提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述任一方法的实施例的步骤。
在本申请实施例中,通过获取消费者在消费目标话题中的消息时,目标话题的每个分区对应的延迟消息量和每秒消息量,然后根据每个分区对应的延迟消息量和每秒消息量确定每个分区对应的延迟时间,最后根据每个分区对应的延迟时间确定消费者在消费目标话题中的消息时对应的消费延迟时间。相比现有技术,本申请实施例将消费延迟时间的度量方式从基于抽象的数量来进行度量转换为基于直观的时间维度来进行度量,从而能够更加直观准确地确定出消费者在消费目标话题中的消息时对应的消费延迟时间,进而能够辅助研发人员或运维人员去度量生产问题,给延迟设置分类分级告警,以及进行准确的告警订阅,从而不会给系统留下风险隐患。
附图说明
图1为一个实施例中一种消费者的消费延迟时间确定方法的应用环境图;
图2为一个实施例中一种消费者的消费延迟时间确定方法的流程示意图;
图3为一个实施例中一种消费者的消费延迟时间确定装置的结构框图;
图4为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本申请,并不用于限定本申请。
本申请提供了一种消费者的消费延迟时间确定方法。在一个实施例中,本实施例提供的一种消费者的消费延迟时间确定方法包括如图1所示的步骤,即步骤S110-S130,下面对上述各步骤进行说明。
S110:获取消费者在消费目标话题中的消息时,目标话题的每个分区对应的延迟消息量和每秒消息量。
本申请实施例提供的方法用于确定kafka(中文名称通常是卡夫卡)中的Consumer(本申请实施例将其称为消费者)在消费Topic(本申请实施例将其称为话题)的消息时所对应的消费延迟时间。上述的Kafka是Apache(阿帕奇)旗下的一款分布式流媒体平台,其是一种高吞吐量、持久性、分布式的发布订阅的消息队列系统。Kafka集群会将记录流存储在称为话题(即Topic)的类别中,消费者可以主动到已订阅的话题中拉取消息并消费。进一步地,每个话题包含多个分区(即Partition),每个分区都是一个有序的记录序列(不可变),分区中的每个消息(也可称为记录)都会被按顺序分配一个在整个分区中具有唯一性的ID号(可称为偏移量)。
其中,上述消费者可以是任意一个消费者,上述的目标话题可以是消费者订阅的任意一个话题。本申请实施例对此不进行限制。上述延迟消息量是指未提交的消息的数量,可以记为Lag,上述每条消息量是指每秒产生的消息量,可以记为TPS。
可选的,获取消费者在消费目标话题中的消息时,目标话题的每个分区对应的延迟消息量和每秒消息量,包括:获取消费者在消费目标话题中的消息时,目标话题的每个分区对应的延迟消息量;以及,通过异步线程获取消费者在消费目标话题中的消息时,目标话题的每个分区对应的每秒消息量。
进一步地,获取每个分区对应的延迟消息量的操作可以包括:获取每个分区对应的消息最高点位值和下一消息点位值,以及分别将每个分区对应的消息最高点位值减去下一消息点位值,得到每个分区对应的延迟消息量。
获取每个分区对应的每秒消息量的操作可以包括:获取每个分区对应的第一消息最高点位值和第二消息最高点位值;以及将每个分区对应的第一消息最高点位值和第二消息最高点位值间的差值作为每个分区对应的每秒消息量。其中,第一消息最高点位值指第一时刻对应的消息最高点位值,第二消息最高点位值指第二时刻对应的消息最高点位值,第一时刻和第二时刻的时间间隔为1秒。
进一步地,在得到每个分区对应的延迟消息量之后,上述方法还可以包括:将每个分区对应的分区标号以及延迟消息量存至第一哈希映射对象;而在得到每个分区对应的每秒消息量之后,上述方法还包括:将每个分区对应的分区标号以及每秒消息量存至第二哈希映射对象。其中,哈希映射对象是指HashMap对象。
S120:根据每个分区对应的延迟消息量和每秒消息量确定每个分区对应的延迟时间。
在一种实施方式中,根据每个分区对应的延迟消息量和每秒消息量确定每个分区对应的延迟时间的操作,可以包括:将每个分区对应的延迟消息量除以每个分区对应的每秒消息量,得到每个分区对应的延迟时间。
进一步地,根据每个分区对应的延迟消息量和每秒消息量确定每个分区对应的延迟时间之前,上述方法还包括:遍历第一哈希映射对象,以获取每个分区对应的延迟消息量;以及遍历第二哈希映射对象,以获取每个分区对应的每秒消息量。
S130:根据每个分区对应的延迟时间确定消费者在消费目标话题中的消息时对应的消费延迟时间。
其中,根据每个分区对应的延迟时间确定消费者在消费目标话题中的消息时对应的消费延迟时间的操作,可以包括:依次遍历每个分区对应的延迟时间,以确定各分区对应的延迟时间中的最大延迟时间;以及将上述最大延迟时间确定为消费者在消费目标话题中的消息时对应的消费延迟时间。
本申请实施例将消费延迟时间的度量方式从基于抽象的数量来进行度量转换为基于直观的时间维度来进行度量,从而能够更加直观准确地确定出消费者在消费目标话题中的消息时对应的消费延迟时间,进而能够辅助研发人员或运维人员去度量生产问题,给延迟设置分类分级告警,以及进行准确的告警订阅,从而不会给系统留下风险隐患。
本申请还提供了一个应用例以更详细说明上述实施例提供的消费者的消费延迟时间确定方法。
请参见图2,确定消费延迟时间的操作可以包括三个步骤:
步骤一:获取consumer在消费Topic中的消息时,Topic的每个分区对应的延迟消息量
具体操作可以是:
1.1获取consumer消费Topic对应的单个分区的消息最高点位值(即OffsetNewest);
1.2.获取consumer消费Topic对应的单个分区的下一消息点位值(即NextOffset);
1.3.基于以下公式计算各分区对应的延迟消息量(即Lag);
Lag=OffsetNewest-NextOffset
1.4.将consumer消费的Topic的分区编号及其对应的Lag存储到一个HashMap对象中。其中,分区编号作为key,分区编号对应的Lag作为value。
步骤二:通过异步线程实时获取consumer在消费目标话题中的消息时,目标话题的每个分区对应的每秒消息量
具体操作可以是:
2.1.获取consumer消费Topic对应的单个分区的第一消息最高点位值(即OffsetNewest_V1)
2.2.等待1秒再次执行过程【2.1】,以获取第二消息最高点位值(即OffsetNewest_V2);
2.3.基于以下公式计算各分区对应的每秒消息量(即TPS);
生产消息量TPS=OffsetNewest_V2-OffsetNewest_V1
2.4.将consumer消费的Topic的分区编号及其对应的TPS存储到另一个HashMap对象中。其中,分区编号作为key,分区编号对应的TPS作为value。
步骤三:根据每个分区对应的延迟时间确定consumer在消费Topic中的消息时对应的消费延迟时间
具体操作可以是:
3.1依次循环遍历步骤【1】保存的HashMap对象,依次取出分区编号及其对应的Lag,同时根据分区编号去取步骤【2】保存的HashMap中对应的TPS,并基于以下公式计算获得每个分区对应的延迟时间;
单个分区对应的延迟时间=Lag/TPS
3.2将循环遍历所有分区后得到的最大延迟时间作为准确的消费延迟时间。
图1为一个实施例中消费者的消费延迟时间确定方法的流程示意图。应该理解的是,虽然图1的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
基于相同的发明构思,本申请还提供了一种消费者的消费延迟时间确定装置。在本实施例中,如图3所示,该消费者的消费延迟时间确定装置包括以下模块:
获取模块110,用于获取消费者在消费目标话题中的消息时,目标话题的每个分区对应的延迟消息量和每秒消息量;
第一确定模块120,用于根据每个分区对应的延迟消息量和每秒消息量确定每个分区对应的延迟时间;
第二确定模块130,用于根据每个分区对应的延迟时间确定消费者在消费目标话题中的消息时对应的消费延迟时间。
在一个实施例中,获取模块110在获取每个分区对应的延迟消息量时,具体用于获取每个分区对应的消息最高点位值和下一消息点位值;以及将每个分区对应的消息最高点位值减去下一消息点位值,得到每个分区对应的延迟消息量。
在一个实施例中,获取模块110在获取每个分区对应的每秒消息量时,具体用于获取每个分区对应的第一消息最高点位值和第二消息最高点位值;以及将每个分区对应的第一消息最高点位值和第二消息最高点位值间的差值作为每个分区对应的每秒消息量。其中,第一消息最高点位值指第一时刻对应的消息最高点位值,第二消息最高点位值指第二时刻对应的消息最高点位值,第一时刻和第二时刻的时间间隔为1秒。
在一个实施例中,上述装置还包括存储模块。存储模块,用于在得到每个分区对应的延迟消息量之后,将每个分区对应的分区标号以及延迟消息量存至第一哈希映射对象;以及在得到每个分区对应的每秒消息量之后,将每个分区对应的分区标号以及每秒消息量存至第二哈希映射对象。
在一个实施例中,第一确定模块120根据每个分区对应的延迟消息量和每秒消息量确定每个分区对应的延迟时间时,具体用于将每个分区对应的延迟消息量除以每个分区对应的每秒消息量,得到每个分区对应的延迟时间。
在一个实施例中,上述装置还包括遍历模块。遍历模块,用于在根据每个分区对应的延迟消息量和每秒消息量确定每个分区对应的延迟时间之前,遍历第一哈希映射对象,以获取每个分区对应的延迟消息量;以及遍历第二哈希映射对象,以获取每个分区对应的每秒消息量
在一个实施例中,第一确定模块120根据每个分区对应的延迟时间确定消费者在消费目标话题中的消息时对应的消费延迟时间时,具体用于依次遍历每个分区对应的延迟时间,以确定各分区对应的延迟时间中的最大延迟时间;以及将上述最大延迟时间确定为消费者在消费目标话题中的消息时对应的消费延迟时间。
关于消费者的消费延迟时间确定装置的具体限定可以参见上文中对于消费者的消费延迟时间确定方法的限定,在此不再赘述。上述消费者的消费延迟时间确定装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,其内部结构图可以如图4所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储每个分区对应的延迟消息量和每秒消息量等数据,具体存储的数据还可以参见上述方法实施例中的限定。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种消费者的消费延迟时间确定方法。
本领域技术人员可以理解,图4中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上述任一方法实施例中提供的方法中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如上述任一方法实施例中提供的方法中的步骤。
本领域普通技术人员可以理解实现上述方法实施例中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
- 消费者VNF的实例化方法及装置
- 一种基于区块链技术的商场消费者购物推荐方法及装置
- 消费者VNF的实例化方法及装置
- 消费者VNF的实例化方法及装置
- 一种消费者用户画像标签的确定方法
- 用于确定重放互通性的消费者权利的方法和系统