一种从kafka向数据库同步数据的方法技术

技术编号:33127005 阅读:21 留言:0更新日期:2022-04-17 00:38
本发明专利技术提供了一种从kafka向数据库同步数据的方法,包括:S1、从数据库查询进度表得到原始数据对应的消费进度;S2、根据消费进度从kafka中读取数据,并对读取的数据进行解析;S3、数据解析后,判断数据的操作类型,对不同操作类型的数据进行攒批操作,构造sql语句;S4、在数据库中执行sql语句,向进度表写入消费进度,并判断数据库执行结果是否正确;若数据库执行结果正确,则数据库执行提交操作;若数据库执行结果错误,数据库执行回滚操作,循环至步骤S2。本发明专利技术在用户对数据库有并发查询业务时,通过攒批集中处理,保证了用户正常业务使用计算资源,保证了数据的高同步性,同时在保证了数据结果的准确性,也保持较高的数据处理速度。速度。速度。

【技术实现步骤摘要】
一种从kafka向数据库同步数据的方法


[0001]本专利技术属于数据库
,尤其是涉及一种从kafka向数据库同步数据的方法。

技术介绍

[0002]Kafka作为一种消息队列中间件,在大数据领域应用比较广泛,可以用kafka暂存数据,实现在两个或多个数据库之间准实时同步数据,存放在kafka的数据是一条一条的,kafka用偏移量作为数据的索引,一个偏移量唯一对应一条数据,根据增量数据对应的操作类型的不同,可以把增量数据归类到新增、删除、修改三种操作类型之一;典型应用场景是业务性数据库把增量数据写到kafka,数据库从kafka读取数据,使得两个数据库的数据准实时性的保持一致,这样,数据库可以满足即席查询分析要求。
[0003]目前Kafka向数据库同步数据存在以下问题:(1)、由kafka自动保存偏移量,即每当消费者读到一批数据,kafka就自动保存这批数据的最后一条数据对应的偏移量,这种方法缺点是当消费者尚未把这批处理完就出现了异常,那么当消费者恢复正常,继续读取数据时,kafka认为刚才这批数据已经被消费过了,于是消费者会读到下一批数据,这样就造成遗漏消费;(2)、消费者调用kafka提供的接口,自行决定何时保存偏移量。当消费者完成了一批数据的处理,主动保存偏移量。这种方法的缺点是数据处理和保存偏移量这两个动作不是原子的,有可能出现,数据处理完成,数据已经进入数据库,但保存偏移量时遇到异常情况没有成功(例如kafka宕机),这样下次再从kafka读取数据时,kafka以为上一批数据还没有被消费,于是消费者会继续读到上一批数据,造成重复消费;(3)、暂存在kafka里的增量数据是有时间先后顺序的,不能在同步过程中颠倒顺序,否则同步结果就会不同,同时,无法用一条sql语句表达不同的操作类型;因此,为解决以上问题,本专利申请设计了一种从kafka向数据库同步数据的方法。

技术实现思路

[0004]有鉴于此,本专利技术旨在提出一种从kafka向数据库同步数据的方法,以解决kafka保存偏移量容易出现遗漏消费和重复消费,难以合并攒批的问题。
[0005]为达到上述目的,本专利技术的技术方案是这样实现的:
[0006]一种从kafka向数据库同步数据的方法,包括如下步骤:
[0007]S1、从数据库查询进度表得到原始数据对应的消费进度;
[0008]S2、根据消费进度从kafka中读取数据,并对读取的数据进行解析;
[0009]S3、数据解析后,判断数据的操作类型,对不同操作类型的数据进行攒批操作,构造sql语句;
[0010]S4、在数据库中执行sql语句,向进度表写入消费进度,并判断数据库执行结果是否正确;若数据库执行结果正确,则数据库执行提交操作;若数据库执行结果错误,数据库执行回滚操作,跳转至步骤S2。
[0011]进一步的,步骤S3中,操作类型包括insert、delete和update,在执行步骤S3的过
程中,根据攒批操作的状态构造sql语句,具体方法如下:
[0012]判断攒批操作是否结束;若攒批操作结束,则对应构造insert sql语句和delete sql语句;若攒批操作未结束,则跳转至步骤S2。
[0013]进一步的,在进行步骤S3中,执行攒批操作时需配合设置不同的缓冲区,缓冲区包括缓冲区A、缓冲区B和缓冲区C,根据不同的操作类型具体方法为:
[0014]针对insert操作类型,根据当前数据中需要同步的主键值计算索引值,将索引值添加至缓冲区A;
[0015]针对delete操作类型,根据当前数据中需要同步的主键值计算索引值,按该索引值在缓冲区A中进行查找,如果缓冲区A中存在该索引值,则从缓冲区A中删除该索引值对应的数据,delete操作则放至缓冲区B;
[0016]针对update操作类型,判断update操作是否包含全列值,若包含全列值,则将其拆分为insert和delete,并分别执行insert操作类型流程和delete操作类型流程;若未包含全列值,则update操作添加至缓冲区C。
[0017]进一步的,构建sql语句具体方法如下:
[0018]判断攒批是否结束;若攒批结束,判断缓冲区C是否为空,若为空,则根据缓冲区A构造insert sql语句,根据缓冲区B构造delete sql语句,若缓冲区未空,则从缓冲区C取出数据,将其主键值写入临时表中,通过两表关联查询,得到缺失列信息,将缺失的列信息补全之后进行update操作类型流程;若攒批未结束,跳转至步骤S2。
[0019]相对于现有技术,本专利技术所述的一种从kafka向数据库同步数据的方法具有以下有益效果:
[0020]本专利技术所述的一种从kafka向数据库同步数据的方法在用户对数据库有并发查询业务时,通过攒批集中处理,有效避开了资源争抢,保证了用户正常业务使用计算资源,保证了数据的高同步性,同时在保证了数据结果的准确性,也保持较高的数据处理速度。
附图说明
[0021]构成本专利技术的一部分的附图用来提供对本专利技术的进一步理解,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:
[0022]图1为本专利技术实施例所述的一种从kafka向数据库同步数据的方法流程图;
[0023]图2为本专利技术实施例所述的新增操作流程图;
[0024]图3为本专利技术实施例所述的删除操作流程图;
[0025]图4为本专利技术实施例所述的修改操作流程图。
具体实施方式
[0026]需要说明的是,在不冲突的情况下,本专利技术中的实施例及实施例中的特征可以相互组合。
[0027]在本专利技术的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本专利技术和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对
本专利技术的限制。此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本专利技术的描述中,除非另有说明,“多个”的含义是两个或两个以上。
[0028]在本专利技术的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语在本专利技术中的具体含义。
[0029]下面将参考附图并结合实施例来详细说明本专利技术。
[0030]请参阅图1所示,一种从kaf本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种从kafka向数据库同步数据的方法,其特征在于,包括如下步骤:S1、从数据库查询进度表得到原始数据对应的消费进度;S2、根据消费进度从kafka中读取数据,并对读取的数据进行解析;S3、数据解析后,判断数据的操作类型,对不同操作类型的数据进行攒批操作,构造sql语句;S4、在数据库中执行sql语句,向进度表写入消费进度,并判断数据库执行结果是否正确;若数据库执行结果正确,则数据库执行提交操作;若数据库执行结果错误,数据库执行回滚操作,跳转至步骤S2。2.根据权利要求1所述的一种从kafka向数据库同步数据的方法,其特征在于:步骤S3中,操作类型包括insert、delete和update,在执行步骤S3的过程中,根据攒批操作的状态构造sql语句,具体方法如下:判断攒批操作是否结束;若攒批操作结束,则对应构造insert sql语句和delete sql语句;若攒批操作未结束,则跳转至步骤S2。3.根据权利要求2所述的一种从kafka向数据库同步数据的方法,其特征在于,在进行步骤S3中,执行攒批操作时需配合设置不同的缓冲区,缓冲区包括缓冲区A、缓冲区B和缓冲区C,...

【专利技术属性】
技术研发人员:赵伟姜骁
申请(专利权)人:天津南大通用数据技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1