CN116108110B - 一种Kafka消息消费补偿方法、系统和介质 - Google Patents
一种Kafka消息消费补偿方法、系统和介质 Download PDFInfo
- Publication number
- CN116108110B CN116108110B CN202310404547.7A CN202310404547A CN116108110B CN 116108110 B CN116108110 B CN 116108110B CN 202310404547 A CN202310404547 A CN 202310404547A CN 116108110 B CN116108110 B CN 116108110B
- Authority
- CN
- China
- Prior art keywords
- execution
- information
- memory queue
- message
- writing
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种Kafka消息消费补偿方法、系统和介质。属于数据库应用技术领域,该方法包括:通过源端将主数据库中的数据记录发送到Kafka消息流中并传输到管道中,将消费侧与消息流连接并与管道进行消息链接,对管道进行消息拉取生成执行信息并写入内存队列表再生成执行脚本,并写入内存队列表中,后将执行脚本写入副数据库中,通过守护线程监听内存队列表中的信息并对标记的错误信息进行补偿,对补偿后的消息重新拉取并写入副数据库;从而通过流式消息将主数据库中的数据记录发送到管道中,并从消费侧拉取消息生成执行信息和执行脚本写入内存列表,通过补偿将数据写入副数据库中,实现对消息消费的同步补偿技术。
Description
技术领域
本申请涉及数据库应用技术领域,具体而言,涉及一种Kafka消息消费补偿方法、系统和介质。
背景技术
在大数据应用系统中,混合数据库类型及多数据源是常见的布局模式,在混合数据库的场景下,数据同步是必不可少的环节,从主数据库将数据记录同步到副数据库,可以满足更丰富的查询计算场景,比如将Mysql的数据同步到Elasticsearch,而采用Kafka(kafka是一种高吞吐量的分布式发布订阅消息系统,主要用来做消息的异步处理、系统解耦、削峰控流处理)的流式消息,可以将数据记录的执行信息插入副数据库,从而实现数据库同步功能,但在Kafka消息拉取数据过程中,易出现CDC工具服务宕机,或拉取过程遇到消费瓶颈卡死,或消费侧数据库不可用,或插入数据过程中产生异常等,导致消息消费失败的问题。
针对上述问题,目前亟待有效的技术解决方案。
发明内容
本申请实施例的目的在于提供一种Kafka消息消费补偿方法、系统和介质,可以通过Kafka的流式消息将主数据库中的数据记录发送到管道中,并从消费侧拉取消息生成执行信息和执行脚本写入内存列表,最终通过补偿将数据写入副数据库中,实现对消息消费的同步补偿技术。
本申请实施例还提供了一种Kafka消息消费补偿方法,包括以下步骤:
通过源端将主数据库中的数据记录逐条发送到Kafka消息流中;
将数据记录通过Kafka消息流传输到管道中进行暂存;
将消费侧与Kafka消息流进行连接,并与所述管道进行消息链接;
对所述管道进行消息拉取生成执行信息,并写入内存队列表;
根据所述内存队列表中的执行信息生成执行脚本,并写入所述内存队列表中;
将所述内存队列表中的执行脚本全部写入副数据库中;
通过预设的守护线程监听所述内存队列表中的信息并标记,对标记的错误信息进行补偿;
对补偿后的对应消息进行重新拉取并重新写入所述副数据库中。
可选地,在本申请实施例所述的Kafka消息消费补偿方法中,所述对所述管道进行消息拉取生成执行信息,并写入内存队列表,包括:
通过所述管道消费侧拉取第一拉取消息poll()并生成执行信息;
若拉取执行错误,则生成对应第一错误执行信息,并将所述第一错误执行信息写入初始化目录的内存队列表中;
若拉取执行正确,则生成对应第一正确执行信息,并将所述第一正确执行信息写入所述内存队列表中。
可选地,在本申请实施例所述的Kafka消息消费补偿方法中,所述根据所述内存队列表中的执行信息生成执行脚本,并写入所述内存队列表中,包括:
根据所述内存队列表中的拉取执行消息生成执行脚本;
若生成执行脚本错误,则生成对应第二错误信息,并将所述第二错误信息写入所述内存队列表中;
若生成执行脚本正确,则生成对应第二正确信息,并将所述第二正确信息写入所述内存队列表中。
可选地,在本申请实施例所述的Kafka消息消费补偿方法中,所述将所述内存队列表中的执行脚本全部写入副数据库中,包括:
根据所述内存队列表中的执行脚本将数据写入副数据库中;
将主数据库中数据记录通过消息拉取以及生成执行脚本,全部写入到副数据库中。
可选地,在本申请实施例所述的Kafka消息消费补偿方法中,所述通过预设的守护线程监听所述内存队列表中的信息并标记,对标记的错误信息进行补偿,包括:
通过预设的守护线程监听所述内存队列表中的执行信息并进行标记;
将所述内存队列表中监听标记的正确信息进行删除,并将所述执行信息对应的本地文件的记录进行删除;
将所述内存队列表中监听标记的错误信息对应的执行记录设置为持久化;
将所述错误信息写入本地文件中,并根据本地文件列表按照预设补偿方法进行错误补偿。
可选地,在本申请实施例所述的Kafka消息消费补偿方法中,所述对补偿后的对应消息进行重新拉取并重新写入所述副数据库中,包括:
将执行补偿后的所述错误信息的对应消息重新进行拉取,获得第二拉取消息poll();
对所述第二拉取消息poll()进行脚本执行并重新写入所述副数据库中;
若重新写入执行正确,则将执行信息对应的文件记录进行删除。
可选地,在本申请实施例所述的Kafka消息消费补偿方法中,还包括:
在执行新一批次错误补偿前,通过本地文件列表查询本地文件中是否存在暂存文件记录;
若不存在暂存文件记录,则按补偿顺序对新一批次错误信息执行补偿;
若存在暂存文件记录,则识别所述暂存文件记录是否为补偿记录;
若是,则优先消费所述补偿记录对应的数据。
第二方面,本申请实施例提供了一种Kafka消息消费补偿系统,该系统包括:存储器及处理器,所述存储器中包括一种Kafka消息消费补偿方法的程序,所述一种Kafka消息消费补偿方法的程序被所述处理器执行时实现以下步骤:
通过源端将主数据库中的数据记录逐条发送到Kafka消息流中;
将数据记录通过Kafka消息流传输到管道中进行暂存;
将消费侧与Kafka消息流进行连接,并与所述管道进行消息链接;
对所述管道进行消息拉取生成执行信息,并写入内存队列表;
根据所述内存队列表中的执行信息生成执行脚本,并写入所述内存队列表中;
将所述内存队列表中的执行脚本全部写入副数据库中;
通过预设的守护线程监听所述内存队列表中的信息并标记,对标记的错误信息进行补偿;
对补偿后的对应消息进行重新拉取并重新写入所述副数据库中。
可选地,在本申请实施例所述的Kafka消息消费补偿系统中,所述对所述管道进行消息拉取生成执行信息,并写入内存队列表,包括:
通过所述管道消费侧拉取第一拉取消息poll()并生成执行信息;
若拉取执行错误,则生成对应第一错误执行信息,并将所述第一错误执行信息写入初始化目录的内存队列表中;
若拉取执行正确,则生成对应第一正确执行信息,并将所述第一正确执行信息写入所述内存队列表中。
第三方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中包括一种Kafka消息消费补偿方法程序,所述Kafka消息消费补偿方法程序被处理器执行时,实现如上述任一项所述的Kafka消息消费补偿方法的步骤。
由上可知,本申请实施例提供的一种Kafka消息消费补偿方法、系统和介质,通过源端将主数据库中的数据记录发送到Kafka消息流中并传输到管道中,将消费侧与消息流连接并与管道进行消息链接,对管道进行消息拉取生成执行信息并写入内存队列表再生成执行脚本,并写入内存队列表中,后将执行脚本全部写入副数据库中,通过守护线程监听内存队列表中的信息标记并对标记的错误信息进行补偿,对补偿后的对应消息进行重新拉取并写入副数据库中;从而通过Kafka的流式消息将主数据库中的数据记录发送到管道中,并从消费侧拉取消息生成执行信息和执行脚本写入内存列表,最终通过补偿将数据写入副数据库中,实现对消息消费的同步补偿技术。
本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的Kafka消息消费补偿方法的流程图;
图2为本申请实施例提供的Kafka消息消费补偿方法的生成执行信息并写入内存队列表的流程图;
图3为本申请实施例提供的Kafka消息消费补偿方法的生成执行脚本并写入内存队列表中的流程图;
图4为本申请实施例提供的Kafka消息消费补偿系统的结构示意图。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到,相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
请参照图1,图1是本申请一些实施例中的Kafka消息消费补偿方法的流程图。该Kafka消息消费补偿方法用于终端设备中,例如电脑、手机终端等。该Kafka消息消费补偿方法,包括以下步骤:
S101、通过源端将主数据库中的数据记录逐条发送到Kafka消息流中;
S102、将数据记录通过Kafka消息流传输到管道中进行暂存;
S103、将消费侧与Kafka消息流进行连接,并与所述管道进行消息链接;
S104、对所述管道进行消息拉取生成执行信息,并写入内存队列表;
S105、根据所述内存队列表中的执行信息生成执行脚本,并写入所述内存队列表中;
S106、将所述内存队列表中的执行脚本全部写入副数据库中;
S107、通过预设的守护线程监听所述内存队列表中的信息并标记,对标记的错误信息进行补偿;
S108、对补偿后的对应消息进行重新拉取并重新写入所述副数据库中。
需要说明的是,本发明基于Kafka的流式消息技术将主数据库中的数据记录发送到管道中,并从消费侧拉取消息生成执行信息和执行脚本写入内存列表,最终通过补偿将数据写入副数据库中,实现对消息消费的同步补偿技术,通过源端将主数据库中的数据记录发送到Kafka消息流中并传输到管道中暂存,将消费侧与消息流连接并与管道进行消息链接,再对管道进行消息拉取生成执行信息并写入内存队列表中,根据执行信息生成执行脚本写入内存队列表中,后将内存队列表中的执行脚本全部写入副数据库中,通过预设的守护线程监听内存队列表中的信息,并对标记的错误信息进行补偿,对补偿后的消息进行重新拉取并写入副数据库中,实现对消费消息的识别、列表并补偿,以解决Kafka消息在拉取过程中避免由于出现宕机或消费瓶颈卡死或消费数据库异常或插入数据异常等所导致的消息消费失败的问题。
请参照图2,图2是本申请一些实施例中的Kafka消息消费补偿方法的生成执行信息并写入内存队列表的流程图。根据本发明实施例,所述对所述管道进行消息拉取生成执行信息,并写入内存队列表,具体为:
S201、通过所述管道消费侧拉取第一拉取消息poll()并生成执行信息;
S202、若拉取执行错误,则生成对应第一错误执行信息,并将所述第一错误执行信息写入初始化目录的内存队列表中;
S203、若拉取执行正确,则生成对应第一正确执行信息,并将所述第一正确执行信息写入所述内存队列表中。
需要说明的是,消息poll()是一种字符设备的驱动函数,其作用是把当前的消息文件指针挂到等待队列中,通过管道消费侧拉取第一拉取消息poll()并生成执行信息,在拉取过程中若拉取执行错误,则生成对应的第一错误执行信息,并将第一错误执行信息写入初始化目录的内存队列表中,若拉取执行正确,则生成对应第一正确执行信息,并将第一正确执行信息写入所述内存队列表中,通过拉取消息生成执行信息,根据执行的正确性生成对应错误或正确的执行信息并写入初始化目录的内存队列表中。
请参照图3,图3是本申请一些实施例中的Kafka消息消费补偿方法的生成执行脚本并写入内存队列表中的流程图。根据本发明实施例,所述根据所述内存队列表中的执行信息生成执行脚本,并写入所述内存队列表中,具体为:
S301、根据所述内存队列表中的拉取执行消息生成执行脚本;
S302、若生成执行脚本错误,则生成对应第二错误信息,并将所述第二错误信息写入所述内存队列表中;
S303、若生成执行脚本正确,则生成对应第二正确信息,并将所述第二正确信息写入所述内存队列表中。
需要说明的是,根据内存队列表中的执行信息对应的拉取执行消息生成执行脚本,若生成执行脚本错误则生成对应第二错误信息,并将第二错误信息写入内存队列表中,若生成执行脚本正确则生成对应第二正确信息,并将第二正确信息写入所述内存队列表中,通过判断生成的执行脚本正确性生成对应信息并写入内存队列表中。
根据本发明实施例,所述将所述内存队列表中的执行脚本全部写入副数据库中,具体为:
根据所述内存队列表中的执行脚本将数据写入副数据库中;
将主数据库中数据记录通过消息拉取以及生成执行脚本,全部写入到副数据库中。
需要说明的是,按照内存队列表中的执行脚本将数据写入副数据库中,直到全部内存队列表中的执行脚本都被写入副数据库中。
根据本发明实施例,所述通过预设的守护线程监听所述内存队列表中的信息并标记,对标记的错误信息进行补偿,具体为:
通过预设的守护线程监听所述内存队列表中的执行信息并进行标记;
将所述内存队列表中监听标记的正确信息进行删除,并将所述执行信息对应的本地文件的记录进行删除;
将所述内存队列表中监听标记的错误信息对应的执行记录设置为持久化;
将所述错误信息写入本地文件中,并根据本地文件列表按照预设补偿方法进行错误补偿。
需要说明的是,在获得内存队列表时,通过预设的守护线程监听内存队列表中的各执行信息并进行标记,对监听标记的正确执行信息不再留底而进行删除,并相应的将执行信息对应的本地文件的记录进行删除,对监听标记的错误执行信息对应的执行记录进行设置,并将执行记录设置为持久化,以进行补偿和记录备查,并将错误执行信息写入本地文件,根据文件列表按照预设的补充方法对错误执行信息进行补偿。
根据本发明实施例,所述对补偿后的对应消息进行重新拉取并重新写入所述副数据库中,具体为:
将执行补偿后的所述错误信息的对应消息重新进行拉取,获得第二拉取消息poll();
对所述第二拉取消息poll()进行脚本执行并重新写入所述副数据库中;
若重新写入执行正确,则将执行信息对应的文件记录进行删除。
需要说明的是,在完成对错误执行信息的补偿后,对补偿后的对应消息进行重新拉取,获得第二拉取消息,再对第二拉取消息生成执行脚本,并重新写入副数据库中,若重新写入副数据库的执行信息正确,则将执行信息对应的文件记录进行删除。
根据本发明实施例,还包括:
在执行新一批次错误补偿前,通过本地文件列表查询本地文件中是否存在暂存文件记录;
若不存在暂存文件记录,则按补偿顺序对新一批次错误信息执行补偿;
若存在暂存文件记录,则识别所述暂存文件记录是否为补偿记录;
若是,则优先消费所述补偿记录对应的数据。
需要说明的是,为防止本地文件中存在补偿暂存的文件记录,而浪费内存中的消费数据,在执行新一批次错误补偿前通过本地文件列表查询本地文件中是否存在暂存文件记录,若不存在暂存文件记录,则按补偿顺序对新一批次错误信息执行补偿,若存在暂存文件记录,则对暂存文件记录进行识别其是否为补偿记录,若为补偿记录则说明是补偿完成的数据记录,则优先消费该补偿记录所对应的数据,以实现数据库的数据同步。
如图4所示,本发明还公开了一种Kafka消息消费补偿系统,包括存储器41和处理器42,所述存储器中包括一种Kafka消息消费补偿方法程序,所述Kafka消息消费补偿方法程序被所述处理器执行体征异样修正数据时实现如下步骤:
通过源端将主数据库中的数据记录逐条发送到Kafka消息流中;
将数据记录通过Kafka消息流传输到管道中进行暂存;
将消费侧与Kafka消息流进行连接,并与所述管道进行消息链接;
对所述管道进行消息拉取生成执行信息,并写入内存队列表;
根据所述内存队列表中的执行信息生成执行脚本,并写入所述内存队列表中;
将所述内存队列表中的执行脚本全部写入副数据库中;
通过预设的守护线程监听所述内存队列表中的信息并标记,对标记的错误信息进行补偿;
对补偿后的对应消息进行重新拉取并重新写入所述副数据库中。
需要说明的是,本发明基于Kafka的流式消息技术将主数据库中的数据记录发送到管道中,并从消费侧拉取消息生成执行信息和执行脚本写入内存列表,最终通过补偿将数据写入副数据库中,实现对消息消费的同步补偿技术,通过源端将主数据库中的数据记录发送到Kafka消息流中并传输到管道中暂存,将消费侧与消息流连接并与管道进行消息链接,再对管道进行消息拉取生成执行信息并写入内存队列表中,根据执行信息生成执行脚本写入内存队列表中,后将内存队列表中的执行脚本全部写入副数据库中,通过预设的守护线程监听内存队列表中的信息,并对标记的错误信息进行补偿,对补偿后的消息进行重新拉取并写入副数据库中,实现对消费消息的识别、列表并补偿,以解决Kafka消息在拉取过程中避免由于出现宕机或消费瓶颈卡死或消费数据库异常或插入数据异常等所导致的消息消费失败的问题。
根据本发明实施例,所述对所述管道进行消息拉取生成执行信息,并写入内存队列表,具体为:
通过所述管道消费侧拉取第一拉取消息poll()并生成执行信息;
若拉取执行错误,则生成对应第一错误执行信息,并将所述第一错误执行信息写入初始化目录的内存队列表中;
若拉取执行正确,则生成对应第一正确执行信息,并将所述第一正确执行信息写入所述内存队列表中。
需要说明的是,消息poll()是一种字符设备的驱动函数,其作用是把当前的消息文件指针挂到等待队列中,通过管道消费侧拉取第一拉取消息poll()并生成执行信息,在拉取过程中若拉取执行错误,则生成对应的第一错误执行信息,并将第一错误执行信息写入初始化目录的内存队列表中,若拉取执行正确,则生成对应第一正确执行信息,并将第一正确执行信息写入所述内存队列表中,通过拉取消息生成执行信息,根据执行的正确性生成对应错误或正确的执行信息并写入初始化目录的内存队列表中。
根据本发明实施例,所述根据所述内存队列表中的执行信息生成执行脚本,并写入所述内存队列表中,具体为:
根据所述内存队列表中的拉取执行消息生成执行脚本;
若生成执行脚本错误,则生成对应第二错误信息,并将所述第二错误信息写入所述内存队列表中;
若生成执行脚本正确,则生成对应第二正确信息,并将所述第二正确信息写入所述内存队列表中。
需要说明的是,根据内存队列表中的执行信息对应的拉取执行消息生成执行脚本,若生成执行脚本错误则生成对应第二错误信息,并将第二错误信息写入内存队列表中,若生成执行脚本正确则生成对应第二正确信息,并将第二正确信息写入所述内存队列表中,通过判断生成的执行脚本正确性生成对应信息并写入内存队列表中。
根据本发明实施例,所述将所述内存队列表中的执行脚本全部写入副数据库中,具体为:
根据所述内存队列表中的执行脚本将数据写入副数据库中;
将主数据库中数据记录通过消息拉取以及生成执行脚本,全部写入到副数据库中。
需要说明的是,按照内存队列表中的执行脚本将数据写入副数据库中,直到全部内存队列表中的执行脚本都被写入副数据库中。
根据本发明实施例,所述通过预设的守护线程监听所述内存队列表中的信息并标记,对标记的错误信息进行补偿,具体为:
通过预设的守护线程监听所述内存队列表中的执行信息并进行标记;
将所述内存队列表中监听标记的正确信息进行删除,并将所述执行信息对应的本地文件的记录进行删除;
将所述内存队列表中监听标记的错误信息对应的执行记录设置为持久化;
将所述错误信息写入本地文件中,并根据本地文件列表按照预设补偿方法进行错误补偿。
需要说明的是,在获得内存队列表时,通过预设的守护线程监听内存队列表中的各执行信息并进行标记,对监听标记的正确执行信息不再留底而进行删除,并相应的将执行信息对应的本地文件的记录进行删除,对监听标记的错误执行信息对应的执行记录进行设置,并将执行记录设置为持久化,以进行补偿和记录备查,并将错误执行信息写入本地文件,根据文件列表按照预设的补充方法对错误执行信息进行补偿。
根据本发明实施例,所述对补偿后的对应消息进行重新拉取并重新写入所述副数据库中,具体为:
将执行补偿后的所述错误信息的对应消息重新进行拉取,获得第二拉取消息poll();
对所述第二拉取消息poll()进行脚本执行并重新写入所述副数据库中;
若重新写入执行正确,则将执行信息对应的文件记录进行删除。
需要说明的是,在完成对错误执行信息的补偿后,对补偿后的对应消息进行重新拉取,获得第二拉取消息,再对第二拉取消息生成执行脚本,并重新写入副数据库中,若重新写入副数据库的执行信息正确,则将执行信息对应的文件记录进行删除。
根据本发明实施例,还包括:
在执行新一批次错误补偿前,通过本地文件列表查询本地文件中是否存在暂存文件记录;
若不存在暂存文件记录,则按补偿顺序对新一批次错误信息执行补偿;
若存在暂存文件记录,则识别所述暂存文件记录是否为补偿记录;
若是,则优先消费所述补偿记录对应的数据。
需要说明的是,为防止本地文件中存在补偿暂存的文件记录,而浪费内存中的消费数据,在执行新一批次错误补偿前通过本地文件列表查询本地文件中是否存在暂存文件记录,若不存在暂存文件记录,则按补偿顺序对新一批次错误信息执行补偿,若存在暂存文件记录,则对暂存文件记录进行识别其是否为补偿记录,若为补偿记录则说明是补偿完成的数据记录,则优先消费该补偿记录所对应的数据,以实现数据库的数据同步。
本发明第三方面提供了一种计算机可读存储介质,所述可读存储介质中包括一种Kafka消息消费补偿方法程序,所述Kafka消息消费补偿方法程序被处理器执行时,实现如上述任一项所述的Kafka消息消费补偿方法的步骤。
本发明公开的一种Kafka消息消费补偿方法、系统和介质,通过源端将主数据库中的数据记录发送到Kafka消息流中并传输到管道中,将消费侧与消息流连接并与管道进行消息链接,对管道进行消息拉取生成执行信息并写入内存队列表再生成执行脚本,并写入内存队列表中,后将执行脚本全部写入副数据库中,通过守护线程监听内存队列表中的信息标记并对标记的错误信息进行补偿,对补偿后的对应消息进行重新拉取并写入副数据库中;从而通过Kafka的流式消息将主数据库中的数据记录发送到管道中,并从消费侧拉取消息生成执行信息和执行脚本写入内存列表,最终通过补偿将数据写入副数据库中,实现对消息消费的同步补偿技术。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (3)
1.一种Kafka消息消费补偿方法,其特征在于,包括以下步骤:
通过源端将主数据库中的数据记录逐条发送到Kafka消息流中;
将数据记录通过Kafka消息流传输到管道中进行暂存;
将消费侧与Kafka消息流进行连接,并与所述管道进行消息链接;
对所述管道进行消息拉取生成执行信息,并写入内存队列表;
根据所述内存队列表中的执行信息生成执行脚本,并写入所述内存队列表中;
将所述内存队列表中的执行脚本全部写入副数据库中;
通过预设的守护线程监听所述内存队列表中的信息并标记,对标记的错误信息进行补偿;
对补偿后的对应消息进行重新拉取并重新写入所述副数据库中;
所述对所述管道进行消息拉取生成执行信息,并写入内存队列表,包括:
通过所述管道的消费侧拉取消息poll()并生成执行信息;
若拉取执行错误,则生成对应第一错误执行信息,并将所述第一错误执行信息写入初始化目录的内存队列表中;
若拉取执行正确,则生成对应第一正确执行信息,并将所述第一正确执行信息写入所述内存队列表中;
所述根据所述内存队列表中的执行信息生成执行脚本,并写入所述内存队列表中,包括:
根据所述内存队列表中的拉取执行消息生成执行脚本;
若生成执行脚本错误,则生成对应第二错误信息,并将所述第二错误信息写入所述内存队列表中;
若生成执行脚本正确,则生成对应第二正确信息,并将所述第二正确信息写入所述内存队列表中;
所述将所述内存队列表中的执行脚本全部写入副数据库中,包括:
根据所述内存队列表中的执行脚本将数据写入副数据库中;
将主数据库中数据记录通过消息拉取以及生成执行脚本,全部写入到副数据库中;
所述通过预设的守护线程监听所述内存队列表中的信息并标记,对标记的错误信息进行补偿,包括:
通过预设的守护线程监听所述内存队列表中的执行信息并进行标记;
将所述内存队列表中监听标记的正确信息进行删除,并将所述执行信息对应的本地文件的记录进行删除;
将所述内存队列表中监听标记的错误信息对应的执行记录设置为持久化;
将所述错误信息写入本地文件中,并根据本地文件列表按照预设补偿方法进行错误补偿;
所述对补偿后的对应消息进行重新拉取并重新写入所述副数据库中,包括:
将执行补偿后的所述错误信息的对应消息重新进行拉取,获得第二拉取消息poll();
对所述第二拉取消息poll()进行脚本执行并重新写入所述副数据库中;
若重新写入执行正确,则将执行信息对应的文件记录进行删除;
还包括:
在执行新一批次错误补偿前,通过本地文件列表查询本地文件中是否存在暂存文件记录;
若不存在暂存文件记录,则按补偿顺序对新一批次错误信息执行补偿;
若存在暂存文件记录,则识别所述暂存文件记录是否为补偿记录;
若是,则优先消费所述补偿记录对应的数据。
2.一种Kafka消息消费补偿系统,其特征在于,该系统包括:存储器及处理器,所述存储器中包括Kafka消息消费补偿方法的程序,所述Kafka消息消费补偿方法的程序被所述处理器执行时实现以下步骤:
通过源端将主数据库中的数据记录逐条发送到Kafka消息流中;
将数据记录通过Kafka消息流传输到管道中进行暂存;
将消费侧与Kafka消息流进行连接,并与所述管道进行消息链接;
对所述管道进行消息拉取生成执行信息,并写入内存队列表;
根据所述内存队列表中的执行信息生成执行脚本,并写入所述内存队列表中;
将所述内存队列表中的执行脚本全部写入副数据库中;
通过预设的守护线程监听所述内存队列表中的信息并标记,对标记的错误信息进行补偿;
对补偿后的对应消息进行重新拉取并重新写入所述副数据库中;
所述对所述管道进行消息拉取生成执行信息,并写入内存队列表,包括:
通过所述管道的消费侧拉取消息poll()并生成执行信息;
若拉取执行错误,则生成对应第一错误执行信息,并将所述第一错误执行信息写入初始化目录的内存队列表中;
若拉取执行正确,则生成对应第一正确执行信息,并将所述第一正确执行信息写入所述内存队列表中;
所述根据所述内存队列表中的执行信息生成执行脚本,并写入所述内存队列表中,包括:
根据所述内存队列表中的拉取执行消息生成执行脚本;
若生成执行脚本错误,则生成对应第二错误信息,并将所述第二错误信息写入所述内存队列表中;
若生成执行脚本正确,则生成对应第二正确信息,并将所述第二正确信息写入所述内存队列表中;
所述将所述内存队列表中的执行脚本全部写入副数据库中,包括:
根据所述内存队列表中的执行脚本将数据写入副数据库中;
将主数据库中数据记录通过消息拉取以及生成执行脚本,全部写入到副数据库中;
所述通过预设的守护线程监听所述内存队列表中的信息并标记,对标记的错误信息进行补偿,包括:
通过预设的守护线程监听所述内存队列表中的执行信息并进行标记;
将所述内存队列表中监听标记的正确信息进行删除,并将所述执行信息对应的本地文件的记录进行删除;
将所述内存队列表中监听标记的错误信息对应的执行记录设置为持久化;
将所述错误信息写入本地文件中,并根据本地文件列表按照预设补偿方法进行错误补偿;
所述对补偿后的对应消息进行重新拉取并重新写入所述副数据库中,包括:
将执行补偿后的所述错误信息的对应消息重新进行拉取,获得第二拉取消息poll();
对所述第二拉取消息poll()进行脚本执行并重新写入所述副数据库中;
若重新写入执行正确,则将执行信息对应的文件记录进行删除;
还包括:
在执行新一批次错误补偿前,通过本地文件列表查询本地文件中是否存在暂存文件记录;
若不存在暂存文件记录,则按补偿顺序对新一批次错误信息执行补偿;
若存在暂存文件记录,则识别所述暂存文件记录是否为补偿记录;
若是,则优先消费所述补偿记录对应的数据。
3.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中包括Kafka消息消费补偿方法程序,所述Kafka消息消费补偿方法程序被处理器执行时,实现如权利要求1所述的Kafka消息消费补偿方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310404547.7A CN116108110B (zh) | 2023-04-17 | 2023-04-17 | 一种Kafka消息消费补偿方法、系统和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310404547.7A CN116108110B (zh) | 2023-04-17 | 2023-04-17 | 一种Kafka消息消费补偿方法、系统和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116108110A CN116108110A (zh) | 2023-05-12 |
CN116108110B true CN116108110B (zh) | 2023-08-15 |
Family
ID=86258358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310404547.7A Active CN116108110B (zh) | 2023-04-17 | 2023-04-17 | 一种Kafka消息消费补偿方法、系统和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116108110B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020238365A1 (zh) * | 2019-05-31 | 2020-12-03 | 深圳前海微众银行股份有限公司 | 消息消费方法、装置、设备及计算机存储介质 |
CN114281827A (zh) * | 2021-12-27 | 2022-04-05 | 众安在线财产保险股份有限公司 | 数据实时同步的方法、装置、设备及存储介质 |
CN115563226A (zh) * | 2022-09-14 | 2023-01-03 | 北京结慧科技有限公司 | 基于数据库的数据消费方法、控制装置及可读存储介质 |
-
2023
- 2023-04-17 CN CN202310404547.7A patent/CN116108110B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020238365A1 (zh) * | 2019-05-31 | 2020-12-03 | 深圳前海微众银行股份有限公司 | 消息消费方法、装置、设备及计算机存储介质 |
CN114281827A (zh) * | 2021-12-27 | 2022-04-05 | 众安在线财产保险股份有限公司 | 数据实时同步的方法、装置、设备及存储介质 |
CN115563226A (zh) * | 2022-09-14 | 2023-01-03 | 北京结慧科技有限公司 | 基于数据库的数据消费方法、控制装置及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116108110A (zh) | 2023-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107645562B (zh) | 数据传输处理方法、装置、设备及系统 | |
CN111339186B (zh) | 工作流引擎数据同步方法、装置、介质及电子设备 | |
US20050273391A1 (en) | Method and system for more efficiently managing complex payloads in a point of sale system | |
CN108965355A (zh) | 用于数据传输的方法、装置及计算机可读存储介质 | |
CN106874334B (zh) | 一种数据处理方法及装置、资讯处理系统 | |
CN110968431B (zh) | 一种消息处理方法、装置及设备 | |
CN110019498B (zh) | 日志同步方法及装置、存储介质、电子设备 | |
CN110688828A (zh) | 文件处理方法及装置、文件处理系统、计算机设备 | |
CN102710593A (zh) | 一种图形聚合中的消息分发方法及装置、系统 | |
CN114077518B (zh) | 数据快照方法、装置、设备及存储介质 | |
CN115640110B (zh) | 分布式云计算系统调度方法和装置 | |
CN114254008B (zh) | 一种信息生成方法、装置及电子设备 | |
CN110620819B (zh) | 区块链交互方法、装置、计算机设备及可读存储介质 | |
CN111679892A (zh) | 分布式事务的处理方法、装置、设备及介质 | |
CN1971599A (zh) | 一种软件应用错误监控方法及系统 | |
CN107357792B (zh) | 一种数据解析的方法和装置 | |
CN111290881A (zh) | 一种数据恢复方法、装置、设备及存储介质 | |
CN116108110B (zh) | 一种Kafka消息消费补偿方法、系统和介质 | |
CN111757282B (zh) | 短信发送方法及装置 | |
US20080178182A1 (en) | Work state returning apparatus, work state returning method, and computer product | |
CN102104546B (zh) | 一种转发表的同步方法及系统 | |
CN109614442A (zh) | 数据同步的数据表维护方法、装置、存储介质和电子设备 | |
CN111541697B (zh) | 一种基于协议配置的在线通信方法 | |
CN112181737B (zh) | 消息处理方法、装置、电子设备及介质 | |
CN113961566A (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 |