CN116821117B - 流式数据处理方法、系统、设备及存储介质 - Google Patents
流式数据处理方法、系统、设备及存储介质 Download PDFInfo
- Publication number
- CN116821117B CN116821117B CN202311103461.7A CN202311103461A CN116821117B CN 116821117 B CN116821117 B CN 116821117B CN 202311103461 A CN202311103461 A CN 202311103461A CN 116821117 B CN116821117 B CN 116821117B
- Authority
- CN
- China
- Prior art keywords
- consumption
- module
- displacement
- displacement value
- interval
- 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
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 19
- 238000006073 displacement reaction Methods 0.000 claims abstract description 511
- 238000005192 partition Methods 0.000 claims abstract description 143
- 238000012545 processing Methods 0.000 claims abstract description 81
- 238000000034 method Methods 0.000 claims abstract description 78
- 230000008569 process Effects 0.000 claims abstract description 37
- 238000012790 confirmation Methods 0.000 claims description 43
- 238000012795 verification Methods 0.000 claims description 43
- 230000004044 response Effects 0.000 claims description 9
- 238000013524 data verification Methods 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 16
- 230000000694 effects Effects 0.000 description 10
- 238000004590 computer program Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 239000003550 marker Substances 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请提供一种流式数据处理方法、系统、设备及存储介质,属于流式数据处理技术领域。该方法包括:响应于Kafka模块执行分区再平衡流程,消费模块获取消费线程对应的消费位移,其中消费位移与分区标识对应;消费模块从zookeeper模块中获取分区标识对应的至少一个位移区间,其中位移区间包括至少一个位移值;消费模块将最大位移值大于消费位移的位移区间确定为目标区间;消费模块根据消费位移及各目标区间的位移值,确定缺失位移值;消费模块从Kafka模块读取缺失位移值对应的目标数据;消费模块将目标数据添加至消息缓冲区。本申请的方法,解决了已经落盘但尚未提交的数据重复消费,产生垃圾数据的问题。
Description
技术领域
本申请涉及分布式数据库及流式数据处理技术领域,尤其涉及一种流式数据处理方法、系统、设备及存储介质。
背景技术
Kafka是当前广泛使用的流式数据处理平台,在Kafka中提交数据时,需要数据的序列号是连续的。
目前,现有技术中服务器运行时的网络波动、数据库异常、人为误操作等状况无可避免,为了防止Kafka数据丢失,会先将数据落盘,再通过提交数据的位移值进行数据消费的确认。样即使数据落盘失败,也会因为没有提交位移值可以再次从Kafka获取到该数据。
但是,发明人发现现有技术至少存在如下技术问题:如果在数据落盘后并没有进行数据提交步骤时出现故障,则会导致已经落盘但尚未提交的数据重复消费,产生垃圾数
发明内容
本申请提供一种流式数据处理方法、系统、设备及存储介质,用以解决已经落盘但尚未提交的数据重复消费,产生垃圾数据的问题。
第一方面,本申请提供一种数据处理方法,应用于流式数据处理系统,包括:Kafka模块、消费模块、zookeeper模块,其中消费模块包括至少一个消费线程;方法,包括:响应于Kafka模块执行分区再平衡流程,消费模块获取消费线程对应的消费位移,其中消费位移与分区标识对应;消费模块从zookeeper模块中获取分区标识对应的至少一个位移区间,其中位移区间包括至少一个位移值;消费模块将最大位移值大于消费位移的位移区间确定为目标区间;消费模块根据消费位移及各目标区间的位移值,确定缺失位移值;消费模块从Kafka模块读取缺失位移值对应的目标数据;消费模块将目标数据添加至消息缓冲区。
在一种可能的实现方式中,消费模块根据消费位移及各目标区间的位移值,确定缺失位移值,包括:若首个目标区间的最小位移值大于消费位移,则消费模块将消费位移至最小位移值之间的正整数确定为缺失位移值,其中首个目标区间为含有位移值最小的目标区间;若两个相邻的目标区间中,前序区间的最大位移值加1小于后序区间的最小位移值,则消费模块将前序区间中的最大位移值至后序区间的最小位移值之间的正整数确定为缺失位移值,其中前序区间为相邻的两个目标区间中位移值较小的位移区间,后序区间为相邻的两个目标区间中位移值较大的位移区间。
在一种可能的实现方式中,在消费模块将对应的进程标识为已写盘的位移区间确定为位移区间之后,还包括:消费模块读取各位移区间的最大位移值;若任一位移区间的最大位移值小于或等于消费位移,则将任一位移区间确定为待删除区间;删除zookeeper模块中待删除区间对应的节点。
在一种可能的实现方式中,在消费模块将目标数据添加至消息缓冲区之后,还包括:消费模块将消费位移变更为所有位移区间中最大的位移值加一。
在一种可能的实现方式中,系统还包括:消费确认提交模块及消息处理模块,其中消息处理模块包括至少一个消息处理线程;相应地,在响应于Kafka模块执行分区再平衡流程,消费模块获取消费线程对应的消费位移之前,方法,还包括: 消费模块采用消费线程获取消息块,并将消息块存入消息缓冲区;创建消息块对应的消费前的消费状态数据项,其中消费前的消费状态数据项包括消息块对应的分区标识、位移值及状态参数,状态参数为待处理;将消费前的消费状态数据项发送至消费确认提交模块;消息处理模块采用消息处理线程处理消息块并写盘,并将消息块对应的位移值区间写入zookeeper模块中对应的节点下;生成消息块对应的消费后的消费状态数据项,其中消费后的消费状态数据项包括分区标识、位移值及状态参数,消费后的消费状态数据项的状态参数为消费完成;将消费后的消费状态数据项发送至消费确认提交模块;消费确认提交模块响应于接收到消费后的消费状态数据项,根据消费前的消费状态数据项及消费后的消费状态数据项,确定核销信息,其中核销信息包括目标位移值及目标分区标识;将核销信息发送至Kafka模块;Kafka模块根据核销信息进行数据的核销。
在一种可能的实现方式中,消费确认提交模块根据消费前的消费状态数据项及消费后的消费状态数据项,确定核销信息,包括:将消费后的消费状态数据项中的位移值确定为标记位移值;将消费后的消费状态数据项中的分区标识确定为目标分区标识;将含有目标分区标识的各消费状态数据项中,位移值与标记位移值相等的消费状态数据项,确定为待修改消费状态数据项;将待修改消费状态数据项的状态参数设置为准备提交;查找各消费状态数据中状态参数为准备提交的目标消费状态数据项;将含有位移值最小且位移值连续的一组目标消费状态数据项,确定为目标数据项组;将目标数据项组中的最大位移值确定为目标位移值。
在一种可能的实现方式中,在将核销信息发送至Kafka模块之后,还包括:消费确认提交模块删除zookeeper模块中与核销信息对应的节点。
第二方面,本申请提供一种流式数据处理系统,包括:Kafka模块、消费模块、zookeeper模块,其中,消费模块包括至少一个消费线程;响应于Kafka模块执行分区再平衡流程,消费模块,用于获取消费线程对应的消费位移,其中消费位移与分区标识对应;消费模块,用于从zookeeper模块中获取分区标识对应的至少一个位移区间,其中位移区间包括至少一个位移值;消费模块,用于将最大位移值大于消费位移的位移区间确定为目标区间;消费模块,用于根据消费位移及各目标区间的位移值,确定缺失位移值;消费模块,用于从Kafka模块读取缺失位移值对应的目标数据;消费模块,用于将目标数据添加至消息缓冲区。
第三方面,本申请提供一种电子设备,包括:处理器和存储器;存储器存储计算机执行指令;处理器执行存储器存储的计算机执行指令,使得处理器执行如第一方面描述的流式数据处理方法。
第四方面,本申请提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现如第一方面描述的流式数据处理方法。
本申请提供的流式数据处理方法、系统、设备及存储介质,通过在zookeeper中存储分区标识及对应的位移区间,响应Kafka模块执行分区再平衡流程,消费模块读取消费线程对应的消费位移,从zookeeper中读取分区标识及对应的位移区间,将其中对应进程标识为已写盘的位移区间确定为位移区间,结合消费位移对位移区间进行筛选,得到位移区间中最大位移值大于消费位移的目标区间,并由目标区间的位移值和消费位移,找到缺失位移值,并从Kafka模块读取确实位移值对应的目标数据,将目标数据添加至消息缓冲区,实现在服务器或数据库故障后对缺失的已写盘数据进行补全,不再将其他已经消费过的已写盘数据再次消费,减少数据的处理过程,不产生垃圾数据。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请实施例提供的流式数据处理系统的结构示意图;
图2为本申请实施例提供的流式数据处理方法的流程示意图;
图3为本申请实施例提供的流式数据处理系统的简要数据处理流程示意图;
图4为本申请实施例提供的各模块简要功能示意图;
图5为本申请实施例提供的流式数据处理系统的结构示意图一;
图6为本申请实施例提供的流式数据处理系统的结构示意图二;
图7为本申请实施例提供的电子设备的结构示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
随着信息技术的不断发展,大量的业务可以在互联网进行,业务产生的信息通常采用Kafka处理,处理的整体流程为数据消费、解析、落盘、确认消费成功。在进行业务的过程中,有可能遇到网络波动、服务器故障、数据库异常、人为失误等情况,造成数据的丢失。为了防止数据的丢失,当前数据处理的过程中,会先将数据落盘,再通过提交数据的位移值进行数据的重新提交,完成数据的传输流程。
但是,通过提交位移值进行数据的重新提交,会导致落盘但未提交的数据再次消费,产生垃圾数据。
针对上述技术问题:发明人提出如下技术构思:在数据库出现故障后,响应Kafka的分区再平衡流程,获取Kafka当前的消费位移,并找到zookeeper中分区标识对应的位移区间,由消费位移的数值、各位移区间中位移值的数值,找到缺失的位移值,从Kafka读取缺失位移值对应的数据,将读取的数据添加至消息缓冲区,以进行后续处理。
图1为本申请实施例提供的数据处理系统的结构示意图。如图1所示,数据处理系统,包括:Kafka模块、消费模块、zookeeper模块,其中消费模块包括至少一个消费线程。
在具体实现过程中,Kafka模块可以是Kafka程序或Kafka数据库,用于存储数据。
zookeeper模块,用于存储或初始化一个全局可见的消息消费状态根节点在此根节点下,以树状形式保存各个主题的不同分区的消费进度,其中分区与分区标识对应。比如:“./主题1/分区1/[位移区间1,位移区间2,位移区间3,……]”,每一个位移区间表示一个位移值的范围:[最小位移值,最大位移值],最小位移值和最大位移值分别表示一个消息块的最小、最大位移值。
消费模块可以是工作人员预先编写的程序,还可以是与程序组合的硬件,可以属于分布式数据库节点实例,分布式数据库节点实例还可以包括消费确认提交模块、消息处理模块、消息缓冲区。消费模块用于在Kafka模块执行分区再平衡后获取Kafka模块中的消费位移及zookeeper模块中分区标识对应的位移区间,并根据找到的位移区间的位移值和消费位移确定缺失位移值,从Kafka模块读取缺失位移值对应的目标数据,将目标数据添加至消息缓冲区,填补缺失的本应已写盘的数据。
可以理解的是,本申请实施例示意的结构并不构成对流式数据处理方法的具体限定。在本申请另一些可行的实施方式中,上述架构可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置,具体可根据实际应用场景确定,在此不做限制。图1所示的部件可以由硬件,软件,或软件与硬件的组合实现。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图2为本申请实施例提供的数据处理方法的流程示意图。方法应用于数据处理系统,数据处理系统,包括:Kafka模块、消费模块、zookeeper模块,其中消费模块包括至少一个消费线程;如图2所示,方法,包括:
S201:响应于Kafka模块执行分区再平衡流程,消费模块获取消费线程对应的消费位移,其中消费位移与分区标识对应。
在本步骤中,Kafka模块执行分区再平衡流程也被称为分区再均衡流程,可以是在数据库出现故障、服务器出现故障等情况下执行的。获取消费线程对应的消费位移,可以是从Kafka模块读取消费线程对应的消费位移。消费位移,可以是需要被消费的下一条消息的位移值。各消费位移可以是整数,相邻的两消息块的位移值可以是连续的整数,在出现故障的情况下,也可以出现相邻的两消息块的位移值不连续的情况。分区再平衡流程例如在数据处理的过程中一个消费者故障,则将这一故障消费者对应的数据分配至其他的消费者。
例如,当前数据库出现故障后,Kafka执行分区再平衡流程,消费模块从Kafka模块读取消费线程1对应的分区1的消费位移、消费线程2对应的分区2的消费位移。
S202:消费模块从zookeeper模块中获取分区标识对应的至少一个位移区间,其中位移区间有对应的进程标识,且包括至少一个位移值。
在本步骤中,如图1文字举例,每个分区标识都可以对应至少一个位移区间,位移区间可以由至少一个位移值构成,位移值可以是连续的整数。
例如,某一分区标识对应的位移区间有三个,分别为“[2-5]、[6-9]、[10-13]”,另一分区标识对应的位移区间有4个,分别为“[1-4]、[5-8]、[9-12]、[13-16]”,本申请实施例对位移区间的范围不作具体限定。
S203:消费模块将最大位移值大于消费位移的位移区间确定为目标区间。
在本步骤中,由于位移区间是由位移值构成的范围,因此有最大值和最小值,最大值即最大位移值,最小值即最小位移值。
目标区间的确定方式,例如:当前消费位移为7,位移区间有3个,分别为“[1-4]、[9-12]、[13-16]”,其中12、16大于消费位移7,则目标区间,为“[9-12]、[13-16]”。又例如,当前消费位移为5,位移区间有3个,分别为“[1-4]、[7-10]、[11-14]”,其中10、14大于消费位移5,则目标区间,为“[7-10]、[11-14]”。
S204:消费模块根据消费位移及各目标区间的位移值,确定缺失位移值。
在本步骤中,缺失位移值的确定方式,可以包括找到与消费位移最近的目标区间,若这个位移区间的位移值与消费位移之间有空缺的整数,则将这个整数确定为缺失位移值;还可以包括找到相邻的两个位移区间,将其中含有位移值较小的位移区间作为前序区间,将其中含有位移值较大的位移区间作为后序区间,若前序区间的最大位移值和后序区间的最小位移值之间有空缺的整数,则将这个或这些整数确定为缺失位移值。
S205:消费模块从Kafka模块读取缺失位移值对应的目标数据。
在本步骤中,从Kafka模块读取缺失位移值对应的目标数据的方法,可以是在Kafka模块查找分区标识对应分区内,缺失位移值对应的数据或消息块,并读取。其中缺失位移值由于是一个分区标识对应分区内的位移值,因此与分区标识对应。
从Kafka模块读取缺失位移值对应的目标数据,例如当前处理的是分区标识为分区1的分区中的位移区间,缺失位移值为5,则读取Kafka模块中分区标识为分区1的分区中位移值为5的数据;又例如,当前处理的是分区标识为分区3的分区中的位移区间,缺失位移值为10,则读取Kafka模块中分区标识为分区3的分区中位移值为10的数据。
S206:消费模块将目标数据添加至消息缓冲区。
在本步骤中,将目标数据添加至消息缓冲区,可以是将目标数据存储至预设的存储位置或缓存中的预设区域。
从上述实施例的描述可知,本申请实施例通过在zookeeper中存储分区标识及对应的位移区间,响应Kafka模块执行分区再平衡流程,消费模块读取消费线程对应的消费位移,从zookeeper中读取分区标识及对应的位移区间,结合消费位移对位移区间进行筛选,得到位移区间中最大位移值大于消费位移的目标区间,并由目标区间的位移值和消费位移,找到缺失位移值,并从Kafka模块读取确实位移值对应的目标数据,将目标数据添加至消息缓冲区,实现在服务器或数据库故障后对缺失的已写盘数据进行补全,不再将其他已经消费过的已写盘数据再次消费,减少数据的处理过程,不产生垃圾数据。
在一种可能的实现方式中,在上述步骤S204中,消费模块根据消费位移及各目标区间的位移值,确定缺失位移值,具体包括:S204A和S204B。
S204A:若首个目标区间的最小位移值大于消费位移,则消费模块将消费位移至最小位移值之间的正整数确定为缺失位移值,其中首个目标区间为含有位移值最小的目标区间。
在本步骤中,例如当前有3个目标区间 “[4-6]、[7-10]、[11-14]”,消费位移为2,则目标区间中“[4-6]”含有的位移值最小(4、5、6小于其他目标区间的位移值),“[4-6]”为首个目标区间,“[4-6]”的最小位移值为4,与消费位移之间有正整数“3”,则将3确定为缺失位移值;又例如,当前有2个目标区间 “[8-10]、[11-13]”,消费位移为5,则目标区间中“[8-10]”含有的位移值最小,“[8-10]”为首个目标区间,“[8-10]”的最小位移值为8,与消费位移之间有正整数“6、7”,则将6、7确定为缺失位移值。
S204B:若两个相邻的目标区间中,前序区间的最大位移值加1小于后序区间的最小位移值,则消费模块将前序区间中的最大位移值至后序区间的最小位移值之间的正整数确定为缺失位移值,其中前序区间为相邻的两个目标区间中位移值较小的位移区间,后序区间为相邻的两个目标区间中位移值较大的位移区间。
在本步骤中,相邻的目标区间,可以是按包含的位移值的大小关系,将各目标区间排序,得到有顺序的区间序列,将区间序列中前后相接的目标区间确定为相邻的目标区间。
例如,当前有3个目标区间“[4-6]、[8-10]、[12-14]”,则“[4-6]和[8-10]”为相邻的目标区间,“[8-10]和[12-14]”为相邻的目标区间,6加1仍小于8,则将6和8之间的7确定为缺失位移值,10加1仍小于12,则将11确定为缺失位移值,其中“[4-6]”中含有的位移值均小于“[8-10]”中的位移值,则“[4-6]”相对“[8-10]”为前序区间,“[8-10]”相对“[4-6]”为后序区间;又例如,当前有4个目标区间“[4-7]、[8-11]、[12-14]、[17-19]”,“[12-14]和[17-19]”为相邻的目标区间,且14加1小于17,将14至17之间的15、16确定为缺失位移值,“[12-14]”相对“[17-19]”为前序区间,“[17-19]”相对“[12-14]”为后序区间。
从上述实施例的描述可知,本申请实施例通过比较首个目标区间的最小位移值和消费位移,将消费位移至最小位移值之间的正整数确定为缺失位移值,将两相邻的目标区间中前序区间的最大位移值、后序区间的最小位移值之间的整数确定为缺失位移值,实现定位缺失位移值,便于找到需要添加的目标数据的效果。
在一种可能的实现方式中,在上述步骤S201消费模块从zookeeper模块中获取分区标识对应的至少一个位移区间之后,还包括:步骤S207至S209。
S207:消费模块读取各位移区间的最大位移值。
在本步骤中,例如:有4个位移区间 “[4-7]、[8-11]、[12-14]、[17-19]”,对应的最大位移值分别为7、11、14、19。本申请实施例对位移区间的范围和最大位移值的数值不作具体限制。
S208:若任一位移区间的最大位移值小于或等于消费位移,则消费模块将任一位移区间确定为待删除区间。
在本步骤中,例如消费位移为8,则上述步骤S202中的位移区间 “[4-7]”为待删除区间;若消费位移为15,则上述步骤S202中的位移区间 “[4-7]、[8-11]、[12-14]”都为待删除区间。
S209:消费模块删除zookeeper模块中待删除区间对应的节点。
在本步骤中,由于在上述步骤S202中读取的位移区间与分区标识对应,此时得到的待删除区间也与分区标识对应。本步骤可以是找到待删除对应的待删除分区标识,删除zookeeper模块中待删除分区标识和待删除区间对应的节点。
从上述实施例的描述可知,本申请实施例通过比较各位移区间的最大位移值和消费位移的大小关系,得到含有最大位移值小于消费位移的待删除区间,并删除zookeeper中待删除区间对应的节点,实现将已经确认消费完成的节点删除的效果,减少数据存储量及后续的数据处理量的效果。
在一种可能的实现方式中,在上述步骤S201将目标数据添加至消息缓冲区之后,还包括:
S2011:消费模块将消费位移变更为所有位移区间中最大的位移值加一。
在本步骤中,消费位移可以是Kafka中的“offset”(偏移)值。变更的方式可以是计算最大的位移值加1,得到目标消费位移,采用目标消费位移替换当前已有的消费位移。此时所指的所有位移区间可以是同一消费线程对应的所有位移区间,或同一分区标识对应的位移区间。
所有位移区间中最大的位移值,例如当前所有位移区间为“[4-7]、[8-11]、[12-14]”则将消费位移变更为15。
从上述实施例的描述可知,本申请实施例通过将消费位移变更为所有位移区间中最大的位移值加一,实现在后续的处理流程不会重复消费最后一个信息块。
在一种可能的实现方式中,系统还包括:消费确认提交模块及消息处理模块,其中消息处理模块包括至少一个消息处理线程。
其中,消费确认提交模块、消息处理模块也可以是工作人员预先编写的程序,还可以是与程序组合的硬件。
相应地,在上述步骤S201响应于Kafka模块执行分区再平衡流程,消费模块获取消费线程对应的消费位移之前,方法,还包括:
S210:消费模块采用消费线程获取消息块,并将消息块存入消息缓冲区。创建消息块对应的消费前的消费状态数据项,其中消费前的消费状态数据项包括消息块对应的分区标识、位移值及状态参数,状态参数为待处理。将消费前的消费状态数据项发送至消费确认提交模块。
在本步骤中,获取消息块可以是从Kafka模块获取消息块,每个消费线程可以对应一个分区标识。消息块对应的位移值可以从Kafka模块读取。待处理可以采用数字、字母或数字与字母的组合表示。将消费前的消费状态数据项发送至消费确认提交模块,可以是采用报文、字符串等格式发送的。
S211:消息处理模块采用消息处理线程处理消息块并写盘,并将消息块对应的位移值区间写入zookeeper模块中对应的节点下。生成消息块对应的消费后的消费状态数据项,其中消费后的消费状态数据项包括分区标识、位移值及状态参数,消费后的消费状态数据项的状态参数为消费完成。将消费后的消费状态数据项发送至消费确认提交模块。
在本步骤中,处理消息块的方式可以是采用预设的方式处理,对消息块进行处理,其中预设的方式可以是工作人员规定的方式。写盘的方式可以是将处理后的消息块写入存储单元。将位移值区间写入zookeeper模块中对应的节点下的方式,可以是读取Kafka模块中消息块对应的位移值区间,找到消息块对应的分区标识,并将得到的位移值区间写入得到的分区标识对应的节点下。消费后的消费状态数据项的生成方式与上述步骤S210中的消费状态数据项类似,只是状态参数为消费完成。消费状态数据项的发送方式与上述步骤S210类似,在这里不再赘述。
S212:消费确认提交模块响应于接收到消费后的消费状态数据项,根据消费后的消费状态数据项及消费后的消费状态数据项,确定核销信息,其中核销信息包括目标位移值及目标分区标识。将核销信息发送至Kafka模块。
在本步骤中,消费确认提交模块可以是采用消费后的消费状态数据项中的位移值和分区标识,将与这个位移值相等且分区标识相同的消费状态数据项确定为待变更消费状态数据,将待变更消费状态数据的状态参数设置为准备提交,找到消费状态数据项中状态参数设置同为准备提交的消费状态数据项,在这些消费状态数据项中,将位移值最小的一组作为待核销消费状态数据组,将待核销消费状态数据组中的最大位移值确定为目标位移值,消费后的消费状态数据项中的分区标识为目标分区标识。
S213:Kafka模块根据核销信息进行数据的核销。
在本步骤中,Kafka模块根据核销信息中的目标分区标识和目标位移值进行数据的核销。其中核销可以是修改数据的状态,将数据标记为已完成消费流程。
例如目标分区标识为分区1,目标位移值为7,当前分区1中的消息块对应的位移值分别为4、5、6、7、8,则对位移值为4、5、6、7的消息块进行核销,将这些消息块的状态标记为已确认消费成功。本申请实施例对目标分区标识、目标位移值的数值不作具体限制。
从上述实施例的描述可知,本申请实施例通过消费模块将读取的消息块存入消息缓冲区,将创建消息块对应的消费前的消费状态数据项,消费前的消费状态数据项中状态参数为待处理,将消费前的消费状态数据项发送至消费确认提交模块,消息处理模块处理消息块并写盘将消息块对应的位移值区间写入zookeeper模块的节点中,生成对应的消费后的消费状态数据项,将消费后的消费状态数据项发送至消费确认提交模块,使消费确认提交模块中同时含有消费后的消费状态数据项和消费前的消费状态数据项,消费确认提交模块在接收到消费后的消费状态数据项后,根据各消费状态数据项,确定核销信息,将核销信息发送至Kafka模块,使Kafka模块删除与目标分区标识对应且位移值小于或等于目标位移值的消息块,完成数据的消费流程,实现多线程处理消息块,加快数据处理速度,同时保持处理器和输入输出接口的高利用率的效果。
在一种可能的实现方式中 ,上述步骤S212中消费确认提交模块根据消费前的消费状态数据项及消费后的消费状态数据项,确定核销信息,具体包括:
S2121:将消费后的消费状态数据项中的位移值确定为标记位移值。
在本步骤中,例如消费后的消费状态数据项中,含有的位移值为7,则将7确定为标记位移值;又例如消费后的消费状态数据项中,含有的位移值为5,则将5确定为标记位移值。本申请实施例对位移值的数值不作具体限制。
S2122:将消费后的消费状态数据项中的分区标识确定为目标分区标识。
在本步骤中,例如消费后的消费状态数据项中分区标识为“分区1”,则将“分区1”确定为目标分区标识;又例如,消费后的消费状态数据项中分区标识为“./state1/partition5”,则将“./state1/partition5” 确定为目标分区标识,本申请实施例对分区标识的具体内容不作限制。
S2123:将含有目标分区标识的各消费状态数据项中,位移值与标记位移值相等的消费状态数据项,确定为待修改消费状态数据项。
在本步骤中,含有目标分区标识的消费状态数据项,可以是消费前的消费状态数据项,也可以是消费后的消费状态数据项。
例如,当前目标分区标识为“分区1”位移值为5,则将“分区1”对应的含有位移值为5的消费状态数据项确定为待修改消费状态数据项;又例如,当前目标分区标识为“./state1/partition4”位移值为3,则将“./state1/partition4”对应的含有位移值为4的消费状态数据项确定为待修改消费状态数据项。
S2124:将待修改消费状态数据项的状态参数设置为准备提交。
在本步骤中,可以是删除待修改消费状态数据项中原有的状态参数,并将准备提交写入待修改消费状态数据项的状态参数位置,或直接采用准备提交覆盖待修改消费状态数据项的状态参数。
S2125:查找各消费状态数据中状态参数为准备提交的目标消费状态数据项。
在本步骤中,可以是读取各目标消费状态数据项的状态参数,将含有状态参数为准备提交的消费状态数据项确定为目标消费状态数据项。
S2126:将含有位移值最小且位移值连续的一组目标消费状态数据项,确定为目标数据项组。
在本步骤中,位移值连续可以是几个消费状态数据项的位移值为连续的自然数。位移值连续的目标消费状态数据项可作为一组,将含有位移值最小的一组目标消费状态数据项确定为目标数据项组。当只有一个目标消费状态数据项含有最小的位移值,且没有与其他目标消费状态数据项的位移值连续时,可以将这一个目标消费状态数据项单独确定为目标数据项组。
例如,当前有5个目标消费状态数据项,对应的位移值分别为4、5、7、10、12,则4、5连续,且4、5这一组位移值小于其他位移值,则将位移值为4、5的消费状态数据项共同确定为目标数据项组。又例如,当前有6个目标消费状态数据项,对应的位移值分别为3、5、6、7、10、12,且位移值3小于其他位移值,且不与其他位移值连续,则将位移值为3的消费状态数据项单独确定为目标数据项组。
S2127:将目标数据项组中的最大位移值确定为目标位移值。
在本步骤中,目标数据项组中的最大位移值,可以是目标数据项组中各目标消费状态数据项含有的最大的位移值。
例如上述步骤S2126中4、5的消费状态数据项共同确定为目标数据项组,则5为目标数据项组中的最大位移值。在移值为3的消费状态数据项单独确定为目标数据项组的情况下,3为目标数据项组中的最大位移值。
从上述实施例的描述可知 ,本申请实施例通过以消费后的消费状态数据项中的位移值作为标记位移值,消费后的消费状态数据项中的分区标识作为目标分区标识,将各消费状态数据项中,含有目标分区标识且位移值与标记位移值相等的消费状态数据项,确定为待修改消费状态数据项,将修改消费状态数据项的状态参数设置为准备提交,查找各消费状态数据中状态参数为准备提交的目标消费状态数据项,将含有位移值最小且位移值连续的一组目标消费状态数据项,确定为目标数据项组,将目标数据项组中的最大位移值确定为目标位移值,实现确定目标位移值和目标分区标识,向Kafka模块提交状态参为准备提交,且位移值连续的消费状态数据项中含有的最大位移值,Kafka模块会将小于或等于目标位移值的数据核销,从而完成数据的处理过程,由于Kafka模块核销数据时是将小于或等于接收到的位移值核销,所以只需要发送目标数据项组中最大的位移值,减少数据发送的次数。
在一种可能的实现方式中,在步骤S212将核销信息发送至Kafka模块之后,还包括:
S220:消费确认提交模块删除zookeeper模块中与核销信息对应的节点。
在本步骤中,可以包括将zookeeper模块中,目标分区标识对应的分区确定为目标分区。删除zookeeper模块中属于目标分区且对应位移值小于或等于目标位移值的节点。
从上述实施例的描述可知,本申请实施例通过在向Kafka模块提交核销信息,使Kafka模块删除对应的消息块后,还删除zookeeper模块中核销信息对应的节点,实现清除zookeeper中完成消费的节点,减少内存占用的效果。
在一种可能的实现方式中,消费模块以多线程的方式获取并解析Kafka模块的数据。每一个线程等价于一个消费者。每个消费者通过分区分配策略获得一定数量的消息分区,每个消费者将获取到的消息块(根据配置,一个消息块中的消息数量从1到几十万条)存放到消息块缓冲区,并创建一个消息块对应的未消费的消费状态数据项,消费状态数据项包括分区标识、位移值和状态参数。将未消费的消费状态数据项发送至消费确认提交模块。
消息处理模块采用消息处理线程从消息块缓冲区中获取消息块,并把处理后的数据提供给分布式数据库的物化视图表引擎实时写盘。其中物化视图表引擎以原子操作的方式执行下面两个动作:1、将数据写入本地磁盘。2、把消息块的位移值区间写入到zookeeper上对应的节点下。消息处理线程在物化视图完成操作之后,把表示消息消费成功的消费后的消费状态数据项传递给消费确认提交模块,表示数据消费完成。
消费确认提交模块负责收集消费状态数据项并将对应的核销信息提交到Kafka模块,使Kafka模块进行数据的核销。具体过程例如:将需要处理的主节点下的每个分区的消费情况用哈希表存储,其中键为分区标识,值为对应的消费状态数据项,其中数组中的消费状态数据项按照位移值从小到大排序。响应于接收到消费后的消费状态数据项ce1遍历与ce1具有相同的分区标识(上述目标分区标识)的消费状态数据项,找到与ce1有相等位移值的消费状态数据项ce2,然后把ce2的状态参数变更为准备提交,再从头遍历哈希表的值,找到状态参数为准备提交的连续排列的元素对应的最大位移值(上述目标位移值),向Kafka模块提交含有目标分区标识和目标位移值的核销信息,删除哈希表中位移值小于或等于目标位移值的元素。Kafka模块将目标分区标识对应分区中,位移值小于或等于目标位移值的数据标记为已完成消费。消费模块还会删除zookeeper中相同分区标识的子节点中位移值小于或等于目标位移值的节点。
图3为本申请实施例提供的数据处理系统的简要数据处理流程示意图。如图3所示,在处理数据的简要过程中,包括:
消费模块从Kafka模块获取消息块、消费模块将消息块存入消息缓冲区、消息处理模块获取消息缓冲区的消息块、消息缓冲区将消费前的消费状态数据项发送至消费确认提交模块、消息处理模块将消费后的消费状态数据项发送至消费确认提交模块、消费确认提交模块将核销信息发送至Kafka模块、消费确认提交模块删除zookeeper模块中核销信息对应的节点、消费模块读取zookeeper模块中各位移区间的最大位移值、消费模块删除zookeeper模块中待删除区间对应的节点。
图4为本申请实施例提供的各模块简要功能示意图。如图4所示,消费模块用于读取Kafka模块中的数据,并将解析后的数据存入消息缓冲区,消息处理模块用于读取消息缓冲区的数据、将数据写盘、将落盘消息的位移值发送至消费确认提交模块、读取zookeeper模块中已写盘未提交的数据的位移值,zookeeper模块用于添加写盘数据的位移值,消费确认提交模块用于移除zookeeper中确认过的位移值对应节点、向Kafka模块提交确认消费成功的位移值。
图5为本申请实施例提供的数据处理系统的结构示意图一。如图5所示,数据处理系统500,包括:Kafka模块501、消费模块502、zookeeper模块503,其中,消费模块包括至少一个消费线程;
响应于Kafka模块501执行分区再平衡流程,消费模块502,用于获取消费线程对应的消费位移,其中消费位移与分区标识对应;
消费模块502,用于从zookeeper模块503中获取分区标识对应的至少一个位移区间,其中位移区间有对应的进程标识,且包括至少一个位移值;
消费模块502,用于将最大位移值大于消费位移的位移区间确定为目标区间;
消费模块502,用于根据消费位移及各目标区间的位移值,确定缺失位移值;
消费模块502,用于从Kafka模块读取缺失位移值对应的目标数据;将目标数据添加至消息缓冲区。
本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
在一种可能的实现方式中,消费模块502,具体用于若首个目标区间的最小位移值大于消费位移,则将消费位移至最小位移值之间的正整数确定为缺失位移值,其中首个目标区间为含有位移值最小的目标区间;若两个相邻的目标区间中,前序区间的最大位移值加1小于后序区间的最小位移值,则将前序区间中的最大位移值至后序区间的最小位移值之间的正整数确定为缺失位移值,其中前序区间为相邻的两个目标区间中位移值较小的位移区间,后序区间为相邻的两个目标区间中位移值较大的位移区间。
本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
在一种可能的实现方式中,消费模块502,还用于消费模块读取各位移区间的最大位移值;若任一位移区间的最大位移值小于或等于消费位移,则将任一位移区间确定为待删除区间;删除zookeeper模块中待删除区间对应的节点。
本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
在一种可能的实现方式中,消费模块502,还用于将消费模块将消费位移变更为所有位移区间中最大的位移值加一。
本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
图6为本申请实施例提供的数据处理系统的结构示意图二。如图6所示,系统还包括:消费确认提交模块504、消息处理模块505,其中消息处理模块包括至少一个消息处理线程;
消费模块502,用于采用消费线程获取消息块,并将消息块存入消息缓冲区;创建消息块对应的消费前的消费状态数据项,其中消费前的消费状态数据项包括消息块对应的分区标识、位移值及状态参数,状态参数为待处理;将消费前的消费状态数据项发送至消费确认提交模块;
消息处理模块505,用于采用消息处理线程处理消息块并写盘,并将消息块对应的位移值区间写入zookeeper模块中对应的节点下;生成消息块对应的消费后的消费状态数据项,其中消费后的消费状态数据项包括分区标识、位移值及状态参数,消费后的消费状态数据项的状态参数为消费完成;将消费后的消费状态数据项发送至消费确认提交模块;
消费确认提交模块504,用于响应于接收到消费后的消费状态数据项,根据消费前的消费状态数据项及消费后的消费状态数据项,确定核销信息,其中核销信息包括目标位移值及目标分区标识;将核销信息发送至Kafka模块;
Kafka模块501,用于根据核销信息进行数据的核销。
本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
在一种可能的实现方式中,消费确认提交模块504,具体用于将消费后的消费状态数据项中的位移值确定为标记位移值;将消费后的消费状态数据项中的分区标识确定为目标分区标识;将含有目标分区标识的各消费状态数据项中,位移值与标记位移值相等的消费状态数据项,确定为待修改消费状态数据项;将待修改消费状态数据项的状态参数设置为准备提交;查找各消费状态数据中状态参数为准备提交的目标消费状态数据项;将含有位移值最小且位移值连续的一组目标消费状态数据项,确定为目标数据项组;将目标数据项组中的最大位移值确定为目标位移值。
本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
在一种可能的实现方式中,消费确认提交模块504,还用于删除zookeeper模块中与核销信息对应的节点。
本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
为了实现上述实施例,本申请实施例还提供了一种电子设备。
参考图7,其示出了适于用来实现本申请实施例的电子设备700的结构示意图,该电子设备700可以为终端设备或服务器。其中,终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、个人数字助理(Personal Digital Assistant,简称PDA)、平板电脑(Portable Android Device,简称PAD)、便携式多媒体播放器(Portable MediaPlayer,简称PMP)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图7示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图7所示,电子设备700可以包括处理器(例如中央处理器、图形处理器等)701,以及与处理器通信连接的存储器702,其可以根据存储在存储器702中的程序、计算机执行指令或者从存储装置708加载到随机访问存储器(Random Access Memory ,简称RAM)703中的程序而执行各种适当的动作和处理,实现上述任一实施例中的数据处理方法,其中存储器可以是只读存储器(Read Only Memory,简称ROM)。在RAM703中,还存储有电子设备700操作所需的各种程序和数据。处理装置701、存储器702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
通常,以下装置可以连接至I/O接口705:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置706;包括例如液晶显示器(Liquid CrystalDisplay ,简称LCD)、扬声器、振动器等的输出装置707;包括例如磁带、硬盘等的存储装置708;以及通信装置709。通信装置709可以允许电子设备700与其他设备进行无线或有线通信以交换数据。虽然图7示出了具有各种装置的电子设备700,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置709从网络上被下载和安装,或者从存储装置708被安装,或者从存储器702被安装。在该计算机程序被处理装置701执行时,执行本申请实施例的方法中限定的上述功能。
需要说明的是,本申请上述的计算机可读存储介质可以是计算机可读信号介质或者计算机存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读存储介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读存储介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备执行上述实施例所示的方法。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LocalArea Network ,简称LAN)或广域网(Wide Area Network ,简称WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该模块本身的限定,例如,消费模块还可以被描述为 “数据消费模块”。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
本申请还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机执行指令,当处理器执行计算机执行指令时,实现上述任一实施例中的数据处理方法的技术方案,其实现原理以及有益效果与数据处理方法的实现原理及有益效果类似,可参见数据处理方法的实现原理及有益效果,此处不再进行赘述。
在本申请的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
本申请还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时,实现上述任一实施例中的数据处理方法的技术方案,其实现原理以及有益效果与数据处理方法的实现原理及有益效果类似,可参见数据处理方法的实现原理及有益效果,此处不再进行赘述。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求书指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求书来限制。
Claims (7)
1.一种数据处理方法,其特征在于,所述方法应用于数据处理系统,所述数据处理系统,包括:Kafka模块、消费模块、zookeeper模块,其中所述消费模块包括至少一个消费线程;所述方法,包括:
响应于Kafka模块执行分区再平衡流程,所述消费模块从Kafka模块获取消费线程对应的消费位移,其中所述消费位移与分区标识对应;
所述消费模块从所述zookeeper模块中获取所述分区标识对应的至少一个位移区间,其中所述位移区间包括至少一个位移值;
所述消费模块将最大位移值大于所述消费位移的位移区间确定为目标区间;
所述消费模块根据所述消费位移及各目标区间的位移值,确定缺失位移值;
所述消费模块从Kafka模块读取所述缺失位移值对应的目标数据;
所述消费模块将所述目标数据添加至消息缓冲区;
所述消费模块根据所述消费位移及各目标区间的位移值,确定缺失位移值,包括:
若首个目标区间的最小位移值大于所述消费位移,则所述消费模块将所述消费位移至所述最小位移值之间的正整数确定为缺失位移值,其中所述首个目标区间为含有位移值最小的目标区间;
若两个相邻的目标区间中,前序区间的最大位移值加1小于后序区间的最小位移值,则所述消费模块将所述前序区间中的最大位移值至所述后序区间的最小位移值之间的正整数确定为缺失位移值,其中所述前序区间为相邻的两个目标区间中位移值较小的位移区间,所述后序区间为相邻的两个目标区间中位移值较大的位移区间;
所述系统还包括:消费确认提交模块及消息处理模块,其中所述消息处理模块包括至少一个消息处理线程;
相应地,在所述响应于Kafka模块执行分区再平衡流程,所述消费模块获取消费线程对应的消费位移之前,所述方法,还包括:
所述消费模块采用所述消费线程获取消息块,并将所述消息块存入消息缓冲区;创建所述消息块对应的消费前的消费状态数据项,其中所述消费前的消费状态数据项包括所述消息块对应的分区标识、位移值及状态参数,所述状态参数为待处理;将所述消费前的消费状态数据项发送至所述消费确认提交模块;
所述消息处理模块采用消息处理线程处理所述消息块并写盘,并将所述消息块对应的位移值区间写入所述zookeeper模块中对应的节点下;生成所述消息块对应的消费后的消费状态数据项,其中所述消费后的消费状态数据项包括分区标识、位移值及状态参数,所述消费后的消费状态数据项的状态参数为消费完成;将所述消费后的消费状态数据项发送至所述消费确认提交模块;
所述消费确认提交模块响应于接收到所述消费后的消费状态数据项,将所述消费后的消费状态数据项中的位移值确定为标记位移值;
将所述消费后的消费状态数据项中的分区标识确定为目标分区标识;
将含有所述目标分区标识的各消费状态数据项中,位移值与所述标记位移值相等的消费状态数据项,确定为待修改消费状态数据项;
将所述待修改消费状态数据项的状态参数设置为准备提交;
查找各消费状态数据中状态参数为准备提交的目标消费状态数据项;
将含有位移值最小且位移值连续的一组目标消费状态数据项,确定为目标数据项组;
将所述目标数据项组中的最大位移值确定为目标位移值,其中核销信息包括目标位移值及目标分区标识;将所述核销信息发送至所述Kafka模块;
所述Kafka模块根据所述核销信息进行数据的核销。
2.根据权利要求1所述的方法,其特征在于,在所述消费模块从所述zookeeper模块中获取所述分区标识对应的至少一个位移区间之后,还包括:
所述消费模块读取各位移区间的最大位移值;若任一位移区间的最大位移值小于或等于所述消费位移,则将所述任一位移区间确定为待删除区间;删除所述zookeeper模块中所述待删除区间对应的节点。
3.根据权利要求1所述的方法,其特征在于,在所述消费模块将所述目标数据添加至消息缓冲区之后,还包括:
所述消费模块将所述消费位移变更为所有位移区间中最大的位移值加一。
4.根据权利要求1所述的方法,其特征在于,在所述将所述核销信息发送至所述Kafka模块之后,还包括:
所述消费确认提交模块删除所述zookeeper模块中与所述核销信息对应的节点。
5.一种数据处理系统,其特征在于,包括:Kafka模块、消费模块、zookeeper模块,其中,所述消费模块包括至少一个消费线程;
响应于Kafka模块执行分区再平衡流程,所述消费模块,用于从Kafka模块获取消费线程对应的消费位移,其中所述消费位移与分区标识对应;
所述消费模块,用于从所述zookeeper模块中获取所述分区标识对应的至少一个位移区间,其中所述位移区间包括至少一个位移值;
所述消费模块,用于将最大位移值大于所述消费位移的位移区间确定为目标区间;
所述消费模块,用于根据所述消费位移及各目标区间的位移值,确定缺失位移值;
所述消费模块,用于从Kafka模块读取所述缺失位移值对应的目标数据;
所述消费模块,用于将所述目标数据添加至消息缓冲区;
所述消费模块根据所述消费位移及各目标区间的位移值,确定缺失位移值,包括:
若首个目标区间的最小位移值大于所述消费位移,则所述消费模块将所述消费位移至所述最小位移值之间的正整数确定为缺失位移值,其中所述首个目标区间为含有位移值最小的目标区间;
若两个相邻的目标区间中,前序区间的最大位移值加1小于后序区间的最小位移值,则所述消费模块将所述前序区间中的最大位移值至所述后序区间的最小位移值之间的正整数确定为缺失位移值,其中所述前序区间为相邻的两个目标区间中位移值较小的位移区间,所述后序区间为相邻的两个目标区间中位移值较大的位移区间;
所述系统还包括:消费确认提交模块、消息处理模块,其中消息处理模块包括至少一个消息处理线程;
消费模块,用于采用消费线程获取消息块,并将消息块存入消息缓冲区;创建消息块对应的消费前的消费状态数据项,其中消费前的消费状态数据项包括消息块对应的分区标识、位移值及状态参数,状态参数为待处理;将消费前的消费状态数据项发送至消费确认提交模块;
消息处理模块,用于采用消息处理线程处理消息块并写盘,并将消息块对应的位移值区间写入zookeeper模块中对应的节点下;生成消息块对应的消费后的消费状态数据项,其中消费后的消费状态数据项包括分区标识、位移值及状态参数,消费后的消费状态数据项的状态参数为消费完成;将消费后的消费状态数据项发送至消费确认提交模块;
消费确认提交模块,用于响应于接收到消费后的消费状态数据项,将消费后的消费状态数据项中的位移值确定为标记位移值;将消费后的消费状态数据项中的分区标识确定为目标分区标识;将含有目标分区标识的各消费状态数据项中,位移值与标记位移值相等的消费状态数据项,确定为待修改消费状态数据项;将待修改消费状态数据项的状态参数设置为准备提交;查找各消费状态数据中状态参数为准备提交的目标消费状态数据项;将含有位移值最小且位移值连续的一组目标消费状态数据项,确定为目标数据项组;将目标数据项组中的最大位移值确定为目标位移值,其中核销信息包括目标位移值及目标分区标识;将核销信息发送至Kafka模块;
Kafka模块,用于根据核销信息进行数据的核销。
6.一种电子设备,其特征在于,包括:处理器和存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,使得所述处理器执行如权利要求1至4中任一项所述的数据处理方法。
7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1至4任一项所述的数据处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311103461.7A CN116821117B (zh) | 2023-08-30 | 2023-08-30 | 流式数据处理方法、系统、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311103461.7A CN116821117B (zh) | 2023-08-30 | 2023-08-30 | 流式数据处理方法、系统、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116821117A CN116821117A (zh) | 2023-09-29 |
CN116821117B true CN116821117B (zh) | 2023-12-12 |
Family
ID=88114918
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311103461.7A Active CN116821117B (zh) | 2023-08-30 | 2023-08-30 | 流式数据处理方法、系统、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116821117B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648933A (zh) * | 2016-12-26 | 2017-05-10 | 北京奇虎科技有限公司 | 消息队列的消费方法及装置 |
CN112650599A (zh) * | 2020-12-21 | 2021-04-13 | 深圳前海微众银行股份有限公司 | 一种日志处理方法、设备及存储介质 |
CN113946449A (zh) * | 2021-10-29 | 2022-01-18 | 北京工业大学 | 一种基于Kafka的消费者端负载均衡方法 |
CN114610504A (zh) * | 2020-12-09 | 2022-06-10 | 腾讯科技(深圳)有限公司 | 消息处理方法、装置、电子设备及存储介质 |
WO2022142666A1 (zh) * | 2020-12-28 | 2022-07-07 | 深圳壹账通智能科技有限公司 | 数据处理方法、装置、终端设备及存储介质 |
CN115658347A (zh) * | 2022-11-04 | 2023-01-31 | 拉卡拉支付股份有限公司 | 数据消费方法、装置、电子设备、存储介质及程序产品 |
-
2023
- 2023-08-30 CN CN202311103461.7A patent/CN116821117B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648933A (zh) * | 2016-12-26 | 2017-05-10 | 北京奇虎科技有限公司 | 消息队列的消费方法及装置 |
CN114610504A (zh) * | 2020-12-09 | 2022-06-10 | 腾讯科技(深圳)有限公司 | 消息处理方法、装置、电子设备及存储介质 |
CN112650599A (zh) * | 2020-12-21 | 2021-04-13 | 深圳前海微众银行股份有限公司 | 一种日志处理方法、设备及存储介质 |
WO2022142666A1 (zh) * | 2020-12-28 | 2022-07-07 | 深圳壹账通智能科技有限公司 | 数据处理方法、装置、终端设备及存储介质 |
CN113946449A (zh) * | 2021-10-29 | 2022-01-18 | 北京工业大学 | 一种基于Kafka的消费者端负载均衡方法 |
CN115658347A (zh) * | 2022-11-04 | 2023-01-31 | 拉卡拉支付股份有限公司 | 数据消费方法、装置、电子设备、存储介质及程序产品 |
Also Published As
Publication number | Publication date |
---|---|
CN116821117A (zh) | 2023-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110807067B (zh) | 关系型数据库和数据仓库的数据同步方法、装置及设备 | |
CN111639287A (zh) | 一种页面处理方法、装置、终端设备及可读存储介质 | |
CN110781658B (zh) | 简历解析方法、装置、电子设备和存储介质 | |
CN113076304A (zh) | 一种分布式版本管理方法、装置和系统 | |
CN112558875A (zh) | 数据校验方法、装置、电子设备及存储介质 | |
CN111338834B (zh) | 数据存储方法和装置 | |
CN111274241B (zh) | 用于并行处理地图数据的方法和装置 | |
CN113849581A (zh) | 告警信息的处理方法、装置、设备和存储介质 | |
CN110716804A (zh) | 无用资源的自动删除方法、装置、存储介质及电子设备 | |
CN110795331A (zh) | 软件测试的方法和装置 | |
CN116821117B (zh) | 流式数据处理方法、系统、设备及存储介质 | |
CN111913938A (zh) | 数据迁移方法、系统、装置、电子设备和介质 | |
CN113918525A (zh) | 数据交换调度方法、系统、电子设备、介质及程序产品 | |
CN115168291A (zh) | 层级目录实现方法、装置、电子设备及存储介质 | |
CN111610908B (zh) | 一种生成框架图的方法、计算机设备及可读存储介质 | |
CN114064678A (zh) | 事件数据处理方法、装置及终端设备 | |
CN114610701A (zh) | 任务数据处理方法、装置、电子设备和介质 | |
CN114036218A (zh) | 一种数据模型切换方法、装置、服务器和存储介质 | |
CN114417070A (zh) | 数据权限的收敛方法、装置、设备以及存储介质 | |
CN113220573A (zh) | 用于微服务架构的测试方法、装置和电子设备 | |
CN113742321A (zh) | 一种数据更新的方法和装置 | |
CN111951112A (zh) | 基于区块链的智能合约执行方法、终端设备和存储介质 | |
CN113760695A (zh) | 一种定位问题代码的方法和装置 | |
US20230054774A1 (en) | User constrained process mining | |
CN111897827B (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 |