CN110912949B - 位点提交方法和装置 - Google Patents

位点提交方法和装置 Download PDF

Info

Publication number
CN110912949B
CN110912949B CN201811073744.0A CN201811073744A CN110912949B CN 110912949 B CN110912949 B CN 110912949B CN 201811073744 A CN201811073744 A CN 201811073744A CN 110912949 B CN110912949 B CN 110912949B
Authority
CN
China
Prior art keywords
message
consumption
instance
partition
consumed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201811073744.0A
Other languages
English (en)
Other versions
CN110912949A (zh
Inventor
方琪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Jingdong Shangke Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN201811073744.0A priority Critical patent/CN110912949B/zh
Publication of CN110912949A publication Critical patent/CN110912949A/zh
Application granted granted Critical
Publication of CN110912949B publication Critical patent/CN110912949B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/2866Architectures; Arrangements
    • H04L67/30Profiles
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/51Discovery or management thereof, e.g. service location protocol [SLP] or web services

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Transfer Between Computers (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种位点提交方法和装置,涉及计算机技术领域。其中,该方法包括:步骤1:对于分配给消费实例的每个分区,将该分区中被所述消费实例最新消费的消息的描述信息进行保存;所述消息的描述信息包括:消息的位点、消息的进入时间;步骤2:在位点提交事件被触发后,判断该分区中被所述消费实例最新消费的消息的进入时间与当前时间的差值绝对值是否不超过超时时间阈值;步骤3:若是,则将该分区中被所述消费实例最新消费的消息的位点提交至服务端。通过以上步骤,能够在批量消费后再手动提交一次位点的情况下,既能保证服务端中各个分区的位点不会出现深度重置的情况,又能保证客户端正常消费消息。

Description

位点提交方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种位点提交方法和装置。
背景技术
在计算机技术领域,消息队列已经成为一种常用的技术手段。作为消息队列中的代表,Kafka的应用更加广泛。
Kafka是一种高吞吐量的分布式发布订阅消息系统,其通过位点提交的机制保证单分区内的消息消费顺序。所述位点,可理解为一个用于定位分区中的每一个消息的序列号。所述位点提交,可理解为作为消费实例将其对消息的消费进度情况汇报给服务端。所述消费实例是指用于消费消息的客户端的实例(instance),也可称为用于消费消息的应用程序实例(instance)。通常,一台机器可以部署一个或多个消费实例。
Kafka的位点提交方式主要有两种:自动提交位点和手动提交位点。自动提交位点,是指消费实例按照Kafka的配置情况,自动将位点报告给服务端。手动提交位点,是指消费实例通过代码将位点报告给服务端。在手动提交位点方式中,具体什么时候报告、报告什么值,都由消费实例决定。
Kafka可通过Zookeeper进行负载均衡管理。在消费实例数量发生动态变化(比如有的消费实例崩溃,或者有新的消费实例加入集群) 时,会触发再均衡(rebalance)功能,进而可能产生分区漂移现象。所谓分区漂移,是指一个分区原本是在一个消费实例上消费,后来飘移到另一消费实例上消费的情况。分区飘移可能导致服务端中的位点被往前重置很多,即深度重置的情况出现。例如,假设Topic1有四个分区“Partition[0]至Partition[3]”,对应这四个分区,有四个消费实例“消费实例[0]至消费实例[3]”。在刚开始启动消费的时候,由于消费实例启动的先后顺序,Partition[3]中的消息先被消费实例[2]消费,消费实例[2]会把消费的Partition[3]中的消息的位点123记录起来。在四个消费实例都启动后,Partition[3]飘移到了消费实例[3]中,四个分区的分配结果为:将Partition[0]分配给消费实例[0]、Partition[1]分配给消费实例[1]、Partition[2]分配给消费实例[2]、Partition[3]分配给消费实例[3]。在消费消息一段时间后,由于Partition[3]一直被消费实例[3]消费,假设消费实例[3]提交的Partition[3]中的消息位点达到42342。由于某种原因,消费集群需要停止消费。假设消费实例[2]在停止之前正好需要提交一次位点,在本次提交位点时,其除了会提交Partition[2]中的消息的位点,还会把曾经消费过的Partition[3]中的消息的位点123提交至服务端,从而服务端中Partition[3]的消息位点从42342被重置到123。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:在对消息进行批量消费并手动提交位点的情况下,由于Kafka的分区飘移,可能导致位点提交错误,使得服务端中的位点被往前重置很多,即深度重置的情况出现,这个问题会给消费消息的客户端(简称“消费端”)带来很大的困扰和麻烦。
发明内容
有鉴于此,本发明提供一种位点提交方法和装置,能够在批量消费后再手动提交一次位点的情况下,既能保证服务端中各个分区的位点不会出现深度重置的情况,又能保证客户端正常消费消息。
为实现上述目的,根据本发明的一个方面,提供了一种位点提交方法。
本发明的位点提交方法包括:步骤1:对于分配给消费实例的每个分区,将该分区中被所述消费实例最新消费的消息的描述信息进行保存;所述消费实例为用于消费消息的客户端的实例;所述消息的描述信息包括:消息的位点、消息的进入时间;步骤2:在位点提交事件被触发后,判断该分区中被所述消费实例最新消费的消息的进入时间与当前时间的差值绝对值是否不超过超时时间阈值;步骤3:若是,则将该分区中被所述消费实例最新消费的消息的位点提交至服务端。
可选地,所述方法还包括:对所述消费实例消费的消息数量进行计数,并在计数值达到预设阈值时触发所述位点提交事件。
可选地,所述方法还包括:根据消费实例在运行周期内消费的消息量动态调整所述超时时间阈值。
可选地,所述根据消费实例在运行周期内消费的消息总数动态调整所述超时时间阈值的步骤包括:对消费实例在上一运行周期内消费的消息量进行统计,以得到消息量统计值;查询预设的消息量与超时时间阈值的对应关系,以得到与所述消息量统计值对应的超时时间阈值,并将其作为下一运行周期内的超时时间阈值。
可选地,所述方法还包括:确定消费实例数量与分区数量的比值,并在所述比值小于1的情况下执行所述步骤1至步骤3。
可选地,所述方法还包括:在所述比值大于或等于1的情况下,将所述消费实例最新消费的消息的位点进行保存;在位点提交事件触发后,将所述消费实例最新消费的消息的位点提交至服务端。
为实现上述目的,根据本发明的另一方面,提供了一种位点提交装置。
本发明的位点提交装置包括:保存模块,用于对于分配给消费实例的每个分区,将该分区中被所述消费实例最新消费的消息的描述信息进行保存;所述消费实例为用于消费消息的客户端的实例;所述消息的描述信息包括:消息的位点、消息的进入时间;判断模块,用于在位点提交事件被触发后,判断该分区中被所述消费实例最新消费的消息的进入时间与当前时间的差值绝对值是否不超过超时时间阈值;提交模块,用于在所述差值绝对值不超过超时时间阈值的情况下,将该分区中最新消费的消息的位点提交至服务端。
可选地,所述装置还包括:计数模块,用于对所述消费实例消费的消息数量进行计数,并在计数值达到预设阈值时触发所述位点提交事件。
可选地,所述装置还包括:调整模块,用于根据消费实例在运行周期内消费的消息量动态调整所述超时时间阈值。
可选地,所述调整模块根据消费实例在运行周期内消费的消息量动态调整所述超时时间阈值包括:所述调整模块对消费实例在上一运行周期内消费的消息量进行统计,以得到消息量统计值;所述调整模块查询预设的消息量与超时时间阈值的对应关系,以得到与所述消息量统计值对应的超时时间阈值,并将其作为下一运行周期内的超时时间阈值。
为实现上述目的,根据本发明的再一个方面,提供了一种电子设备。
本发明的电子设备,包括:一个或多个处理器;以及,存储装置,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明的位点提交方法。
为实现上述目的,根据本发明的又一个方面,提供了一种计算机可读介质。
本发明的计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明的位点提交方法。
上述发明中的一个实施例具有如下优点或有益效果:通过对每个分区中被所述消费实例最新消费的消息的位点以及进入时间进行保存,在位点提交事件被触发后,判断每个分区中被所述消费实例最新消费的消息的进入时间与当前时间的差值绝对值是否不超过超时时间阈值,并将所述差值绝对值不超过超时时间阈值的消息的位点提交至服务端这些步骤,能够在批量消费后再手动提交一次位点的情况下,既能保证服务端中各个分区的位点不会出现深度重置的情况,又能保证客户端正常消费消息。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明一个实施例的位点提交方法的主要步骤示意图;
图2是根据本发明另一实施例的位点提交方法的主要步骤示意图;
图3是根据本发明一个实施例的位点提交装置的主要模块示意图;
图4是根据本发明另一实施例的位点提交装置的主要模块示意图;
图5是本发明实施例可以应用于其中的示例性系统架构图之一;
图6是本发明实施例可以应用于其中的示例性系统架构图之二;
图7是适于用来实现本发明实施例的电子设备的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
需要指出的是,在不冲突的情况下,本发明中的实施例以及实施例中的特征可以相互组合。另外,需要指出的是,本发明中的实施例不仅适用于Kafka,也适用于从Kafka衍生出来的消息队列。
在详细介绍本发明实施例之前,首先对本发明实施例涉及的部分技术术语进行说明。
应用程序实例:可理解为一个运行起来的应用程序。将应用程序实例化,即可得到应用程序实例。
主题:英文名为“Topic”。每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。
分区:英文名为“Partition”,一个Topic可以分为多个Partition,每个Partition是一个有序的队列。Partition中的每条消息都会被分配一个有序的标识,即Offset。
Docker:是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux 机器上,也可以实现虚拟化。
图1是根据本发明一个实施例的位点提交方法的主要步骤示意图。如图1所示,本发明实施例的位点提交方法包括:
步骤S101、对于分配给消费实例的每个分区,将该分区中被所述消费实例最新消费的消息的描述信息进行保存。
其中,所述消费实例为用于消费消息的客户端的实例(instance),也可称为用于消费消息的应用程序实例(instance)。通常,一台机器可以部署一个或多个消费实例。当在机器上部署Docker时,一个Docker 对应一个消费实例,因此,在该情况下,“分配给消费实例的每个分区”也可以被替换成“分配给Docker的每个分区”。
其中,所述消息的描述信息包括:消息的位点、消息的进入时间。所述位点可理解为一个用于定位分区中的每一个消息的序列号;所述消息的进入时间可理解为消息进入消费实例的时间。
例如,假设分配给消费实例A两个分区,分别分区1和分区2,并且分区1中被消费实例A最新消费的消息为message100,分区2中被消费实例A最新消费的消息为message200,则可将messge100的描述信息“位点123、进入时间10:00:00”、以及messge200的描述信息“位点456、进入时间10:20:00”保存在内存中。
步骤S102、在位点提交事件被触发后,判断该分区中被所述消费实例最新消费的消息的进入时间与当前时间的差值绝对值是否不超过超时时间阈值。
其中,所述超时时间阈值可根据客户端消费消息的实际情况灵活设置。比如,当客户端消费的消息量较大时,可将超时时间阈值设定小一些,比如设为10分钟、5分钟等;当客户端消费的消息量较小时,可将超时时间阈值设定地大一些,比如30分钟、1小时等。
步骤S103、若是,则将该分区中被所述消费实例最新消费的消息的位点提交至服务端。
进一步,本发明实施例的方法还包括:若所述差值绝对值超过超时时间阈值,则不将该分区中被所述消费实例最新消费的消息提交至服务端。
例如,假设超时时间阈值为30分钟,当前时间为10:40:00,消费实例A的内存中保存了:分区1中被消费实例A最新消费的消息 message100的描述信息“位点123、进入时间10:00:00”、分区2中被消费实例A最新消费的消息messge200的描述信息“位点456、进入时间10:20:00”。对于分区1中的message100来说,进入时间与当前时间的差值绝对值为40分钟,大于超时时间阈值30分钟;对于分区2 中的messge200来说,进入时间与当前时间的差值绝对值为20分钟,小于超时时间阈值30分钟。因此,只将分区2中的message200的位点提交至服务端。
在本发明实施例中,通过以上步骤能够在批量消费后再手动提交一次位点的情况下,保证只提交不超过超时时间阈值的消息的位点,而超过超时时间阈值的消息的位点不会被提交,既能避免服务端中各个分区的位点出现深度重置的情况,又能保证客户端正常消费消息。
图2是根据本发明另一实施例的位点提交方法的主要步骤示意图。如图2所示,本发明实施例的位点提交方法包括:
步骤S201、确定消费实例数量与分区数量的比值。
当在机器上部署Docker,一个Docker对应一个消费实例,因此,在该情况下,“消费实例数量”也可以被替换成“Docker数量”。进而,在消费某个Topic的消息时,可根据消费端的Docker数量与Topic 中分区数量的比值不同,采用不同的处理流程。具体来说,在所述比值小于1的情况下,执行步骤S202至步骤S206中的部分流程;在所述比值大于或等于1的情况下,执行步骤S207至步骤S209的流程。
步骤S202、对于分配给消费实例的每个分区,将该分区中被所述消费实例最新消费的消息的描述信息进行保存。
在该步骤中,可将各个分区中被所述消费实例最新消费的消息的描述信息以java对象的格式保存在内存中。在一可选实施方式中,步骤S202包括:在分区中的一条消息消费完后,记录该条消息的描述信息;然后在该分区的下条消息消费完后,记录该条消息的描述信息并覆盖前一条消息的描述信息。通过以上可选实施方式,使得只需保存各分区中被所述消费实例最新消费的消息的描述信息,而不用保存各分区被所述消费实例消费的所有消息的描述信息,从而减少了对内存的消耗。
其中,所述消费实例为用于消费消息的客户端的实例(instance),也可称为用于消费消息的应用程序实例(instance)。通常,一台机器可以部署一个或多个消费实例。当在机器上部署Docker时,一个Docker 对应一个消费实例,因此,在该情况下,“分配给消费实例的每个分区”也可以被替换成“分配给Docker的每个分区”。所述消息的描述信息包括:消息的位点、消息的进入时间。
例如,假设分配给消费实例A两个分区,分别分区1和分区2,并且分区1中被消费实例A最新消费的消息为message100,分区2中被消费实例A最新消费的消息为message200,则可将messge100的描述信息“位点123、进入时间10:00:00”、以及messge200的描述信息“位点456、进入时间10:20:00”保存在内存中。
步骤S203、对所述消费实例消费的消息数量进行计数,并在计数值达到预设阈值时触发位点提交事件。
其中,所述预设阈值可根据实际情况灵活设置。比如,所述预设阈值可设为500,即消费实例每处理500条消息触发一次位点提交事件。
步骤S204、在位点提交事件被触发后,计算该分区中被所述消费实例最新消费的消息的进入时间与当前时间的差值绝对值。
在所述差值绝对值不超过超时时间阈值的情况下,执行步骤S205;在所述差值绝对值超过超时时间阈值的情况下,执行步骤S206。
步骤S205、将该分区中被所述消费实例最新消费的消息的位点提交至服务端。
步骤S206、不将该分区中被所述消费实例最新消费的消息的位点提交至服务端。
例如,假设超时时间阈值为30分钟,当前时间为10:40:00,消费实例A的内存中保存了:分区1中被消费实例A最新消费的消息 message100的描述信息“位点123、进入时间10:00:00”、分区2中被消费实例A最新消费的消息messge200的描述信息“位点456、进入时间10:20:00”。对于分区1中的message100来说,进入时间与当前时间的差值绝对值为40分钟,大于超时时间阈值30分钟;对于分区2 中的messge200来说,进入时间与当前时间的差值绝对值为20分钟,小于超时时间阈值30分钟。因此,只将分区2中的message200的位点提交至服务端。
步骤S207、将所述消费实例最新消费的消息的位点进行保存。
在该步骤中,可将所述消费实例最新消费的消息的描述信息以java 对象的格式保存在内存中。
在一可选实施方式中,步骤S207包括:在一条消息消费完后,记录该条消息的位点;然后在下条消息消费完后,记录该条消息的位点并覆盖前一条消息的位点。通过以上可选实施方式,使得只需保存所述消费实例最新消费的消息的位点,而不用保存所述消费实例消费的所有消息的位点,从而减少了对内存的消耗。
步骤S208、对所述消费实例消费的消息数量进行计数,并在计数值达到预设阈值时触发位点提交事件。
步骤S209、在位点提交事件触发后,将所述消费实例最新消费的消息的位点提交至服务端。
在步骤S209中,假设消费实例最新消费的消息为分区2中的 message200,则只需将message200提交至服务端。
进一步,在消费实例数量与分区数量的比值小于1的情况下,其对应处理流程还可包括以下步骤:根据消费实例在运行周期内消费的消息量动态调整所述超时时间阈值。
在一可选实施方式中,所述根据消费实例在运行周期内消费的消息量动态调整所述超时时间阈值的步骤具体包括:对消费实例在上一运行周期内消费的消息量进行统计,以得到消息量统计值;查询预设的消息量与超时时间阈值的对应关系,以得到与所述消息量统计值对应的超时时间阈值,并将其作为下一运行周期内的超时时间阈值。具体实施时,所述运行周期可根据实际需求灵活设置,比如可设置为1 天。另外,在具体实施时,可将所述消息量与超时时间阈值的对应关系存在配置文件中,或者存在系统的元数据表中。
关于所述消息量与超时时间阈值的对应关系的具体示例,可参见表1。
表1
消息量/天 超时时间阈值
1000~9999 3小时
1万~10万 1小时
10万~100万 30分钟
100万~500万 20分钟
500万~1000万 10分钟
1000万~5000万 5分钟
5000万~1亿 3分钟
1亿以上 2分钟
在本发明实施例中,通过以上步骤能够针对Docker数量与分区数量比值大于等于1、或比值小于1的情况,采用两种不同的位点提交流程,从而更有针对性地解决分区飘移所导致的位点深度重置问题。另外,通过动态调整超时时间阈值,能够进一步优化位点提交方法的效果。
图3是根据本发明一个实施例的位点提交装置的主要模块示意图。如图3所示,本发明实施例的位点提交装置300包括:保存模块301、判断模块302、提交模块303。
保存模块301,用于对于分配给消费实例的每个分区,将该分区中被所述消费实例最新消费的消息的描述信息进行保存。
其中,所述消费实例为用于消费消息的客户端的实例(instance),也可称为用于消费消息的应用程序实例(instance)。通常,一台机器可以部署一个或多个消费实例。当在机器上部署Docker时,一个Docker 对应一个消费实例,因此,在该情况下,“分配给消费实例的每个分区”也可以被替换成“分配给Docker的每个分区”。
其中,所述消息的描述信息包括:消息的位点、消息的进入时间。所述位点可理解为一个用于定位分区中的每一个消息的序列号;所述消息的进入时间可理解为消息进入消费实例的时间。
例如,假设分配给消费实例A两个分区,分别分区1和分区2,并且分区1中被消费实例A最新消费的消息为message100,分区2中被消费实例A最新消费的消息为message200,则可将messge100的描述信息“位点123、进入时间10:00:00”、以及messge200的描述信息“位点456、进入时间10:20:00”保存在内存中。
判断模块302,用于在位点提交事件被触发后,判断该分区中被所述消费实例最新消费的消息的进入时间与当前时间的差值绝对值是否不超过超时时间阈值。
其中,所述超时时间阈值可根据客户端消费消息的实际情况灵活设置。比如,当客户端消费的消息量较大时,可将超时时间阈值设定小一些,比如设为10分钟、5分钟等;当客户端消费的消息量较小时,可将超时时间阈值设定地大一些,比如30分钟、1小时等。
提交模块303,用于在所述差值绝对值不超过超时时间阈值的情况下,将该分区中最新消费的消息的位点提交至服务端;在所述差值绝对值超过超时时间阈值的情况下,不将该分区中被所述消费实例最新消费的消息的位点提交至服务端。
例如,假设超时时间阈值为30分钟,当前时间为10:40:00,消费实例A的内存中保存了:分区1中被消费实例A最新消费的消息 message100的描述信息“位点123、进入时间10:00:00”、分区2中被消费实例A最新消费的消息messge200的描述信息“位点456、进入时间10:20:00”。对于分区1中的message100来说,进入时间与当前时间的差值绝对值为40分钟,大于超时时间阈值30分钟;对于分区2 中的messge200来说,进入时间与当前时间的差值绝对值为20分钟,小于超时时间阈值30分钟。因此,只将分区2中的message200的位点提交至服务端。
在本发明实施例中,通过以上装置能够在批量消费后再手动提交一次位点的情况下,保证只提交不超过超时时间阈值的消息的位点,而超过超时时间阈值的消息的位点不会被提交,既能避免服务端中各个分区的位点出现深度重置的情况,又能保证客户端正常消费消息。
图4是根据本发明另一实施例的位点提交装置的主要模块示意图。如图4所示,本发明实施例的位点提交装置400包括:保存模块401、计数模块402、判断模块403、提交模块404、调整模块405。
保存模块401,用于对于分配给消费实例的每个分区,将该分区中被所述消费实例最新消费的消息的描述信息进行保存。
具体来说,保存模块401可将各个分区中被所述消费实例最新消费的消息的描述信息以java对象的格式保存在内存中。在一可选实施方式中,保存模块401将该分区中被所述消费实例最新消费的消息的描述信息进行保存包括:在分区中的一条消息消费完后,保存模块401 记录该条消息的描述信息;然后在该分区的下条消息消费完后,保存模块401记录该条消息的描述信息并覆盖前一条消息的描述信息。通过以上可选实施方式,使得只需保存各分区中被所述消费实例最新消费的消息的描述信息,而不用保存各分区被所述消费实例消费的所有消息的描述信息,从而减少了对内存的消耗。
其中,所述消费实例为用于消费消息的客户端的实例(instance),也可称为用于消费消息的应用程序实例(instance)。通常,一台机器可以部署一个或多个消费实例。当在机器上部署Docker时,一个Docker 对应一个消费实例,因此,在该情况下,“分配给消费实例的每个分区”也可以被替换成“分配给Docker的每个分区”。所述消息的描述信息包括:消息的位点、消息的进入时间。
例如,假设分配给消费实例A两个分区,分别分区1和分区2,并且分区1中被消费实例A最新消费的消息为message100,分区2中被消费实例A最新消费的消息为message200,则可将messge100的描述信息“位点123、进入时间10:00:00”、以及messge200的描述信息“位点456、进入时间10:20:00”保存在内存中。
计数模块402,用于对所述消费实例消费的消息数量进行计数,并在计数值达到预设阈值时触发位点提交事件。其中,所述预设阈值可根据实际情况灵活设置。比如,所述预设阈值可设为500,即消费实例每处理500条消息触发一次位点提交事件。
判断模块403,用于在位点提交事件被触发后,判断该分区中被所述消费实例最新消费的消息的进入时间与当前时间的差值绝对值是否不超过超时时间阈值。
提交模块404,用于在所述差值绝对值不超过超时时间阈值的情况下,将该分区中最新消费的消息的位点提交至服务端;在所述差值绝对值超过超时时间阈值的情况下,不将该分区中被所述消费实例最新消费的消息的位点提交至服务端。
例如,假设超时时间阈值为30分钟,当前时间为10:40:00,消费实例A的内存中保存了:分区1中被消费实例A最新消费的消息 message100的描述信息“位点123、进入时间10:00:00”、分区2中被消费实例A最新消费的消息messge200的描述信息“位点456、进入时间10:20:00”。对于分区1中的message100来说,进入时间与当前时间的差值绝对值为40分钟,大于超时时间阈值30分钟;对于分区2 中的messge200来说,进入时间与当前时间的差值绝对值为20分钟,小于超时时间阈值30分钟。因此,只将分区2中的message200的位点提交至服务端。
调整模块405,用于根据消费实例在运行周期内消费的消息量动态调整所述超时时间阈值。
在一可选实施方式中,调整模块405根据消费实例在运行周期内消费的消息量动态调整所述超时时间阈值具体包括:调整模块405对消费实例在上一运行周期内消费的消息量进行统计,以得到消息量统计值;调整模块405查询预设的消息量与超时时间阈值的对应关系,以得到与所述消息量统计值对应的超时时间阈值,并将其作为下一运行周期内的超时时间阈值。具体实施时,所述运行周期可根据实际需求灵活设置,比如可设置为1天。另外,在具体实施时,可将所述消息量与超时时间阈值的对应关系存在配置文件中,或者存在系统的元数据表中。
在本发明实施例中,通过保存模块记录每个分区中被消费实例最新消费的消息的描述信息,并通过判断模块在需要进行位点提交时判断每个分区中被消费实例最新消费的消息的进入时间与当前时间的差值绝对值是否不超过超时时间阈值,并通过提交模块将不超过超时时间阈值的消息进行提交,可以很好地解决分区飘移所导致的位点深度重置问题,保证客户端正常消费消息。另外,通过动态调整超时时间阈值,能够进一步优化位点提交方法的效果。
图5是本发明实施例可以应用于其中的示例性系统架构图之一。如图5所示,系统架构500可以包括Kafka服务端501和客户端502。
Kafka服务端501,可部署在一台或多条服务器上。在Kafka服务端501中,一个Topic被分成多个分区,如图中的分区1、分区2、分区3……分区n。
客户端502,具体为用于消费消息的客户端,其可包括多个消费实例,比如消费实例1、消费实例2、消费实例3……消费实例m。客户端端502或者说客户端中的各个消费实例,可主动从Kafka服务端501 拉取消息、对消息进行消费、以及向Kafka服务端501提交位点等。
需要说明的是,本发明实施例所提供的位点提交方法一般由客户端502执行,相应地,位点提交装置一般设置于客户端502中。
图6示出了可以应用本发明实施例的位点提交方法或位点提交装置的示例性系统架构600。
如图6所示,系统架构600可以包括终端设备601、602、603,网络604和服务器605。网络604用以在终端设备601、602、603和服务器605之间提供通信链路的介质。网络604可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备601、602、603通过网络604与服务器605 交互,以接收或发送消息等。终端设备601、602、603上可以安装有各种用于消费消息的应用程序。
终端设备601、602、603可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器605可以是提供各种服务的服务器,例如对终端设备601、 602、603所提交的位点进行保存的后台管理服务器。后台管理服务器可以对接收到的位点查询请求等进行分析等处理,并将处理结果(例如目位点查询结果)反馈给终端设备。
需要说明的是,本发明实施例所提供的位点提交方法一般由终端设备执行,相应地,位点提交装置一般设置于终端设备中。
应该理解,图6中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
图7示出了适于用来实现本发明实施例的电子设备的计算机系统 700的结构示意图。图7示出的系统仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图7所示,计算机系统700包括中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708 加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM 703中,还存储有系统700操作所需的各种程序和数据。CPU 701、ROM 702以及RAM 703通过总线704彼此相连。输入/ 输出(I/O)接口705也连接至总线704。
以下部件连接至I/O接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元 (CPU)701执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括保存模块、判断模块、提交模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,保存模块还可以被描述为“对于分配给消费实例的每个分区,将该分区中被所述消费实例最新消费的消息的描述信息进行保存的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备执行以下流程:步骤1:对于分配给消费实例的每个分区,将该分区中被所述消费实例最新消费的消息的描述信息进行保存;所述消息的描述信息包括:消息的位点、消息的进入时间;步骤2:在位点提交事件被触发后,判断该分区中被所述消费实例最新消费的消息的进入时间与当前时间的差值绝对值是否不超过超时时间阈值;步骤3:若是,则将该分区中被所述消费实例最新消费的消息的位点提交至服务端。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (9)

1.一种位点提交方法,其特征在于,所述方法包括:
确定消费实例数量与分区数量的比值,在所述比值小于1的情况下,执行如下步骤1至步骤3:
步骤1:对于分配给消费实例的每个分区,将该分区中被所述消费实例最新消费的消息的描述信息进行保存;所述消费实例为用于消费消息的客户端的实例;所述消息的描述信息包括:消息的位点、消息的进入时间;
步骤2:在位点提交事件被触发后,判断该分区中被所述消费实例最新消费的消息的进入时间与当前时间的差值绝对值是否不超过超时时间阈值;
步骤3:若是,则将该分区中被所述消费实例最新消费的消息的位点提交至服务端;
根据消费实例在运行周期内消费的消息量动态调整所述超时时间阈值。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
对所述消费实例消费的消息数量进行计数,并在计数值达到预设阈值时触发所述位点提交事件。
3.根据权利要求1所述的方法,其特征在于,所述根据消费实例在运行周期内消费的消息总数动态调整所述超时时间阈值的步骤包括:
对消费实例在上一运行周期内消费的消息量进行统计,以得到消息量统计值;查询预设的消息量与超时时间阈值的对应关系,以得到与所述消息量统计值对应的超时时间阈值,并将其作为下一运行周期内的超时时间阈值。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述比值大于或等于1的情况下,将所述消费实例最新消费的消息的位点进行保存;在位点提交事件触发后,将所述消费实例最新消费的消息的位点提交至服务端。
5.一种位点提交装置,其特征在于,所述装置包括:
保存模块,用于对于分配给消费实例的每个分区,将该分区中被所述消费实例最新消费的消息的描述信息进行保存;所述消费实例为用于消费消息的客户端的实例;所述消息的描述信息包括:消息的位点、消息的进入时间;
判断模块,用于在位点提交事件被触发后,判断该分区中被所述消费实例最新消费的消息的进入时间与当前时间的差值绝对值是否不超过超时时间阈值;
提交模块,用于在所述差值绝对值不超过超时时间阈值的情况下,将该分区中最新消费的消息的位点提交至服务端;
调整模块,用于确定消费实例数量与分区数量的比值,在所述比值小于1的情况下,触发所述保存模块;在所述提交模块将该分区中被所述消费实例最新消费的消息的位点提交至服务端后,根据消费实例在运行周期内消费的消息量动态调整所述超时时间阈值。
6.根据权利要求5所述的装置,其特征在于,所述装置还包括:
计数模块,用于对所述消费实例消费的消息数量进行计数,并在计数值达到预设阈值时触发所述位点提交事件。
7.根据权利要求5所述的装置,其特征在于,所述调整模块根据消费实例在运行周期内消费的消息量动态调整所述超时时间阈值包括:
所述调整模块对消费实例在上一运行周期内消费的消息量进行统计,以得到消息量统计值;所述调整模块查询预设的消息量与超时时间阈值的对应关系,以得到与所述消息量统计值对应的超时时间阈值,并将其作为下一运行周期内的超时时间阈值。
8.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1至4中任一所述的方法。
9.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1至4中任一所述的方法。
CN201811073744.0A 2018-09-14 2018-09-14 位点提交方法和装置 Active CN110912949B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811073744.0A CN110912949B (zh) 2018-09-14 2018-09-14 位点提交方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811073744.0A CN110912949B (zh) 2018-09-14 2018-09-14 位点提交方法和装置

Publications (2)

Publication Number Publication Date
CN110912949A CN110912949A (zh) 2020-03-24
CN110912949B true CN110912949B (zh) 2022-11-08

Family

ID=69813267

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811073744.0A Active CN110912949B (zh) 2018-09-14 2018-09-14 位点提交方法和装置

Country Status (1)

Country Link
CN (1) CN110912949B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111586129A (zh) * 2020-04-28 2020-08-25 北京奇艺世纪科技有限公司 针对数据同步的报警方法、装置、电子设备及存储介质
CN116132395A (zh) * 2022-11-15 2023-05-16 马上消费金融股份有限公司 消息处理方法、电子设备及计算机可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106657349A (zh) * 2016-12-29 2017-05-10 上海理想信息产业(集团)有限公司 一种消息订阅处理装置、系统及方法
CN106776855A (zh) * 2016-11-29 2017-05-31 上海轻维软件有限公司 基于Spark Streaming读取Kafka数据的处理方法
CN107423141A (zh) * 2017-06-20 2017-12-01 北京小度信息科技有限公司 信息处理方法及装置
CN107577717A (zh) * 2017-08-09 2018-01-12 阿里巴巴集团控股有限公司 一种保障数据一致性的处理方法、装置及服务器

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10262032B2 (en) * 2016-02-24 2019-04-16 Salesforce.Com, Inc. Cache based efficient access scheduling for super scaled stream processing systems

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106776855A (zh) * 2016-11-29 2017-05-31 上海轻维软件有限公司 基于Spark Streaming读取Kafka数据的处理方法
CN106657349A (zh) * 2016-12-29 2017-05-10 上海理想信息产业(集团)有限公司 一种消息订阅处理装置、系统及方法
CN107423141A (zh) * 2017-06-20 2017-12-01 北京小度信息科技有限公司 信息处理方法及装置
CN107577717A (zh) * 2017-08-09 2018-01-12 阿里巴巴集团控股有限公司 一种保障数据一致性的处理方法、装置及服务器

Also Published As

Publication number Publication date
CN110912949A (zh) 2020-03-24

Similar Documents

Publication Publication Date Title
US20170255496A1 (en) Method for scheduling data flow task and apparatus
US8893133B2 (en) Dynamic test scheduling by ordering tasks for performance based on similarities between the tasks
CN111950988B (zh) 分布式工作流调度方法、装置、存储介质及电子设备
CN112650576B (zh) 资源调度方法、装置、设备、存储介质及计算机程序产品
US8185624B2 (en) Efficient on-demand provisioning of servers for specific software sets
CN109152061B (zh) 通道调配方法、装置、服务器及存储介质
CN109766172B (zh) 一种异步任务调度方法以及装置
CN108632106B (zh) 监控服务设备的系统
EP3935503B1 (en) Capacity management in a cloud computing system using virtual machine series modeling
CN112579692B (zh) 一种数据同步方法、装置、系统、设备及存储介质
CN110750592A (zh) 数据同步的方法、装置和终端设备
CN110912949B (zh) 位点提交方法和装置
CN112052133A (zh) 一种基于Kubernetes的业务系统监控方法和装置
CN110008187B (zh) 文件传输调度方法、装置、设备及计算机可读存储介质
CN112529488A (zh) 一种确定补货量的方法和装置
CN113760982A (zh) 一种数据处理方法和装置
CN112559179A (zh) 一种作业处理方法和装置
CN113760522A (zh) 一种任务处理方法和装置
CN112817687A (zh) 一种数据同步方法和装置
CN112035460A (zh) 一种标识分配方法、装置、设备和存储介质
CN116661960A (zh) 一种批量任务处理方法、装置、设备以及存储介质
CN112099937A (zh) 一种资源治理方法和装置
CN107301125B (zh) 一种寻找根源错误的方法、装置及电子设备
KR102464688B1 (ko) 모니터링 결과의 이벤트 등급 결정 방법 및 장치
CN114064403A (zh) 一种任务延迟分析处理方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant