一种基于kafka和log的数据抽取和同步方法技术

技术编号:35210853 阅读:19 留言:0更新日期:2022-10-15 10:23
本发明专利技术涉及信息技术领域,提供了一种基于kafka和log的数据抽取和同步方法,通过使用各个系统的增量log作为数据基础,数据使用方通过订阅kafka来消费log解决上述方案存在的问题。在此方案中,提供搜索服务的使用方将日志保存到HBase中,提供缓存服务的使用方可以将缓存数据保存到Redis中,数据同步的使用方可以将数据保存到自己的数据库中,由于kafka中的日志数据是可以重复消费的,并且会缓存一段时间,各个使用方可以通过消费kafka中保存的日志来达到既能保持与数据库的一致性,也能保证数据的实时性。证数据的实时性。证数据的实时性。

【技术实现步骤摘要】
一种基于kafka和log的数据抽取和同步方法


[0001]本专利技术涉及信息
,提供了一种基于kafka和log的数据抽取和同步方法。
技术背景
[0002]在传统的数据抽取与同步方案中,通用的做法有几种,分别是:
[0003]1、DBA开放各个系统的备库,在业务低峰期,使用方各自抽取所需数据。由于抽取时间不同,各个数据使用方数据不一致,数据发生冲突,而且重复抽取,会造成一定的性能浪费和数据的延迟。
[0004]2、由统一的大数据平台,通过sqoop在业务低峰期到各个系统统一抽取数据,并保存到Hive表中,然后为其他数据使用方提供数据服务。这种做法解决了一致性问题,但实效性差,基本是T+1的时效。
[0005]3、基于trigger的方式获取增量变更,但问题是会造成业务方侵入性大,而且trigger也会带来一定的性能损失。
[0006]这些方案都不算完美,分别存在数据冲突、时效性差、损耗性能的问题。
[0007]其他介绍:
[0008]Kafka:开源的流处理平台,是一个为处理实时数据提供统一、高吞吐、低延迟的平台。
[0009]Zookeeper:开源的分布式服务注册平台,为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册服务。
[0010]Canal:阿里开源的数据库中间件,用于基于MySQL的数据库增量日志解析,提供数据订阅和消费服务。
[0011]InfluxDB:一个开源的时序型数据库,由Go写成,着力于高性能地查询于存储时序型数据。被广泛应用于存储系统的监控数据,loT行业的实时数据等场景。
[0012]Grafana:一个跨平台、开源的数据可视化应用平台,主要用于监控数据的各种图形化展示。
[0013]HDFS:开源的分布式文件系统,用以存储所有计算节点的数据,为整个集群带来非常高的带宽。
[0014]Parquet:基于HDFS的列示存储格式,以此种文件格式保存的数据,可以极大的提升在分布式系统中的查询性能。
[0015]Spark:开源的数据处理统一分析引擎,主要用于大数据的传输、查询和分析。
[0016]HBase:开源的非关系型分布式数据库,现主要用于大型非结构化数据的存储、查询。

技术实现思路

[0017]本专利技术的目的在于解决传统的数据抽取与同步方案中,存在的数据冲突、时效性差、损耗性能的问题。
[0018]为解决以上技术问题,本专利技术采用以下技术手段:
[0019]一种基于kafka和log的数据抽取和同步方法,包括以下步骤:
[0020]步骤1、将日志从源系统实时抽出,并以增量或者全量的方式进行抽取,获得抽取的日志,写入kafka指定的日志抽取同步topic中;
[0021]步骤2、将日志抽取同步topic中的日志,进行解析脱敏,规定统一消息格式,放入到kafka对应的脱敏日志消息topic中;
[0022]步骤3、将kafka中的数据,通过消费端,重放入HDFS中;
[0023]步骤4、HDFS中的数据经过清洗,放入到HBase中进行保存,供其他系统来查询调用。
[0024]上述技术方案中,步骤1包括以下步骤:
[0025]步骤1.1:从MySQL集群中进行日志解析,采用Row模式进行读取binarylog日志;
[0026]步骤1.2:使用canal读取binarylog日志,包括以下步骤:
[0027]步骤1.2.1:canal模拟MySQL Slave的交互协议,伪装自己为MySQL Slave,向MySQL Slave发送dump协议;
[0028]步骤1.2.2:MySQL master收到dump请求,开始推送binarylog给canal;
[0029]步骤1.2.3:Canal解析binary log对象;
[0030]步骤1.3:通过订阅Canal Server的方式,抽取步骤2获得的binarylog日志中对应的MySQL的增量日志,包括以下步骤:
[0031]步骤1.3.1:按照Canal的输出,日志是protobuf格式,通过增量Storm模块,将数据实时转换为约定的统一消息格式,并保存到kafka中;
[0032]步骤1.3.2:增量Storm模块还负责捕获数据库对象集合schema的变化,以控制在kafka中保存的日志消息的版本号;
[0033]步骤1.3.3:增量Storm模块的配置信息保存在Zookeeper中,以满足高可用需求;
[0034]步骤1.3.4:Kafka既作为输出结果也作为处理过程中的缓冲器和消息解构区,最终以消息版本号的递增来获得增量日志;
[0035]步骤1.4:对于增量无法满足的日志抽取场景,需要进行全量抽取,包括以下步骤:
[0036]步骤1.4.1:对拉取请求进行流量控制,避免影响生产数据库;
[0037]步骤1.4.2:消费端对数据进行分片,控制最大拉取字节数和拉取记录条数;
[0038]步骤1.4.3:每次拉取一个分片完成,升一次kafka中保存的日志消息的版本号;
[0039]步骤1.4.4:通知zookeeper,记录一个全量的拉取过程启动,并向zookeeper中写入心跳信息;
[0040]步骤1.4.5:检查数据库的元数据meta的兼容性,保证拉取请求有效;
[0041]步骤1.4.6:确定拆片使用的列,设定优先级规则由大到小:按照用户指定的列,主键索引PK,唯一索引UK,普通索引的优先级来确定拆片列,多列时,取其中第一列;
[0042]步骤1.4.7:根据拆片列拆分数据,将拆片结果写入kafka指定的日志抽取同步topic中。
[0043]上述技术方案中,步骤2:将抽取的日志,进行解析脱敏,规定统一消息格式,放入到kafka对应的脱敏日志消息topic中,包括以下步骤:
[0044]步骤2.1:定义统一的消息格式,并保证数据的唯一性,包括以下步骤:
[0045]步骤2.1.1:定义消,自、的命名空间,由类型+数据源名+schema名+表名+版本号+分库号+分表号组成,能够描述所有表,通过命名空间可以唯一定位;
[0046]步骤2.1.2:定义_ums_op_字段,表明数据的类型是I,U,D,其中I代表insert,新增,U代表update,修改,D代表delete,删除;
[0047]步骤2.1.3:定义_ums_ts_字段,记录发生增删改的事件的时间戳,新的数据发生的时间戳会更新;
[0048]步骤2.1.4:定义_ums_id_字段,表明消息的唯一id,保证消息的唯一性,且保证了消息的先后顺序;
[0049]步骤2.1.5:对于全量支取,_ums_id_是唯一的,从zookeeper中每个并发度分别取不同的id片区,保证了唯一性和性能,填写负数,不会与增量本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于kafka和log的数据抽取和同步方法,其特征在于:包括以下步骤:步骤1、将日志从源系统实时抽出,并以增量或者全量的方式进行抽取,获得抽取的日志,写入kafka指定的日志抽取同步topic中;步骤2、将日志抽取同步topic中的日志,进行解析脱敏,规定统一消息格式,放入到kafka对应的脱敏日志消息topic中;步骤3、将kafka中的数据,通过消费端,重放入HDFS中;步骤4、HDFS中的数据经过清洗,放入到HBase中进行保存,供其他系统来查询调用。2.根据权利要求1所述的一种基于kafka和log的数据抽取和同步方法,其特征在于:步骤1包括以下步骤:步骤1.1:从MySQL集群中进行日志解析,采用Row模式进行读取binarylog日志;步骤1.2:使用canal读取binarylog日志,包括以下步骤:步骤1.2.1:canal模拟MySQL Slave的交互协议,伪装自己为MySQL Slave,向MySQL Slave发送dump协议;步骤1.2.2:MySQL master收到dump请求,开始推送binarylog给canal;步骤1.2.3:Canal解析binary log对象;步骤1.3:通过订阅Canal Server的方式,抽取步骤2获得的binarylog日志中对应的MySQL的增量日志,包括以下步骤:步骤1.3.1:按照Canal的输出,日志是protobuf格式,通过增量Storm模块,将数据实时转换为约定的统一消息格式,并保存到kafka中;步骤1.3.2:增量Storm模块还负责捕获数据库对象集合schema的变化,以控制在kafka中保存的日志消息的版本号;步骤1.3.3:增量Storm模块的配置信息保存在Zookeeper中,以满足高可用需求;步骤1.3.4:Kafka既作为输出结果也作为处理过程中的缓冲器和消息解构区,最终以消息版本号的递增来获得增量日志;步骤1.4:对于增量无法满足的日志抽取场景,需要进行全量抽取,包括以下步骤:步骤1.4.1:对拉取请求进行流量控制,避免影响生产数据库;步骤1.4.2:消费端对数据进行分片,控制最大拉取字节数和拉取记录条数;步骤1.4.3:每次拉取一个分片完成,升一次kafka中保存的日志消息的版本号;步骤1.4.4:通知zookeeper,记录一个全量的拉取过程启动,并向zookeeper中写入心跳信息;步骤1.4.5:检查数据库的元数据meta的兼容性,保证拉取请求有效;步骤1.4.6:确定拆片使用的列,设定优先级规则由大到小:按照用户指定的列,主键索引PK,唯一索引UK,普通索引的优先级来确定拆片列,多列时,取其中第一列;步骤1.4.7:根据拆片列拆分数据,将拆片结果写入kafka指定的日志抽取同步topic中。3.根据权利要求1所述的一种基于kafka和log的数据抽取和同步方法,其特征在于:步骤2:将抽取的日志,进行解析脱敏,规定统一消息格式,放入到kafka对应的脱敏日志消息topic中,包括以下步骤:步骤2.1:定义统一的消息格式,并保证数据的唯一性,包括以下步骤:
步骤2.1.1:定义消息的命名空间,由类型+数据源名+schema名+表名+版本号+分库号+分表号组成,能够描述所有表,通过命名空间可以唯一定位;步骤2.1.2:定义_ums_op_字段,表明数据的类型是I,U,D,其中I代表insert,新增,U代表update,修改,D代表delete,删除;步骤2.1.3:定义_ums_ts_字段,记录发生增删改的事件的时间戳,新的数据发生的时间戳会更新;步骤2.1.4:定义_ums_id_字段,表明消息的唯一id,保证消息的唯一性,且保证了消息的先后顺序;步骤2.1.5:对于全量支取,_ums_id_是唯一的,从zookeeper中每个并发度分别取不同的id片区,保证了唯一性和性能,填写负数,不会与增量数据冲突,也保证他们是早于增量消息的;步骤2.1.6:对于增量支取,使用MySQL的日志文件号+日志偏移量作为唯一id,id作为64位的long整数,高7位用于日志文...

【专利技术属性】
技术研发人员:严东程峰李耀彭磊刘珏
申请(专利权)人:武汉众邦银行股份有限公司
类型:发明
国别省市:

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

1