多关联实时数据流的乱序处理方法、装置、介质和设备与流程

文档序号:27003571发布日期:2021-10-19 22:23阅读:94来源:国知局
1.本发明涉及领域,尤其涉及一种多关联实时数据流的乱序处理方法、装置、介质和设备。
背景技术
::2.在大数据时代随着数据量不断的增加,数据种类的繁多以及实时大数据应用越来越多,因hadoop作为离线的高吞吐、低响应框架已不能满足这类需求,因此通过实时计算框架进行微批或者流式处理来降级数据延迟以此来保证数据可以高效的呈现给用户。3.在使用实时计算框架处理数据时,具体实现是先将外部数据存储到消息队列当中,通过实时框架去实时消费对应主题下的数据并进行业务逻辑的处理,以此来降级数据延迟。4.发明人在实现本发明的过程中发现,现有技术至少存在如下不足:5.在应用实时计算框架来处理的数据流时面临着数据延迟、丢失、重复的问题,因此需要将延迟的数据及消费的偏移量存入到缓存区以保证数据的准确性,但在提高任务的并行度的多分区情况下很难保证顺序问题,因此在一些需要保证顺序的业务场景中就会导致偏差。技术实现要素:6.有鉴于此,本发明提供一种多关联实时数据流的乱序处理方法、装置、介质和设备,以实现在在高并发的多关联数据流实时场景下,解决因不同数据流而出现的乱序。7.为达上述目的,第一方面,提供一种多关联实时数据流的乱序处理方法,其包括:8.实时监测数据库中主表和/或关联表的日志变化;9.当所述数据库中主表和/或关联表的日志发生变化时,获得主表变化记录和/或关联表变化记录,将所述主表变化记录以多分区方式并行写入消息列队的主表主题中,将所述关联表变化记录以多分区方式并行写入消息队列的关联表主题中;10.启动主表实时进程从所述主表主题中获取所述主表的多分区数据流,启动关联表实时进程从所述关联表主题中获取所述关联表的多分区数据流;11.将所述主表的业务主键加载到所述数据库的缓存区;12.在获取所述关联表的数据流之后获取业务外键,并且判断是否能够从所述缓存区获取到对应的业务主键;13.如果能够获取到业务主键,则分别将所述主表的多分区数据流和所述关联表的多分区数据流合并为一个单独分区数据流,根据指定字段对每个单独分区数据流进行分组处理获得多个分组,针对每个分组中的数据流进行排序处理,并根据排序处理确定的顺序对每个分组中的数据流进行消费,对消费后的数据流执行业务逻辑处理。14.在一些可能的实施方式中,所述的对消费后的数据流执行业务逻辑处理包括:将消费后的主表的数据流和消费后的关联表的数据流翻译后同步到目标库。15.在一些可能的实施方式中,所述方法还包括:如果不能够从所述缓存区获取到对应的业务主键,则将所述关联表的数据流写入所述缓存区以等待重新加载。16.在一些可能的实施方式中,所述数据库是关系型数据库;所述主表和/或关联表中的每张表的表名是消息队列的主题;所述的根据指定字段对每个单独分区数据流进行分组处理获得多个分组,具体包括:17.根据业务主键及其对应的事务标识字段对所述主表的单独分区数据流进行分组处理,根据业务外键及其对应的事务标识字段对所述关联表的单独分区数据流进行分组处理,获得多个分组;18.所述的针对每个分组中的数据流进行排序处理,并根据排序处理确定的顺序对每个分组中的数据流进行消费,具体包括:19.针对每个分组中的数据流,按照事件时间进行升序排序处理;20.根据按照事件时间进行升序排序处理后确定的顺序,对每个分组中的数据流进行顺序消费。21.第二方面,提供一种多关联实时数据流的乱序处理装置,其包括:22.实时监控采集模块,用于实时监测数据库中主表和/或关联表的日志变化;23.实时同步模块,用于当所述数据库中主表和/或关联表的日志发生变化时,获得主表变化记录和/或关联表变化记录,将所述主表变化记录以多分区方式并行写入消息列队的主表主题中,将所述关联表变化记录以多分区方式并行写入消息队列的关联表主题中;24.进程启动模块,用于启动主表实时进程从所述主表主题中获取所述主表的多分区数据流,启动关联表实时进程从所述关联表主题中获取所述关联表的多分区数据流;25.加载模块,用于将所述主表的业务主键加载到所述数据库的缓存区;26.判断模块,用于在获取所述关联表的数据流之后获取业务外键,并且判断是否能够从所述缓存区获取到对应的业务主键;27.处理模块,用于如果能够获取到业务主键,则分别将所述主表的多分区数据流和所述关联表的多分区数据流合并为一个单独分区数据流,根据指定字段对每个单独分区数据流进行分组处理获得多个分组,针对每个分组中的数据流进行排序处理,并根据排序处理确定的顺序对每个分组中的数据流进行消费,对消费后的数据流执行业务逻辑处理。28.在一些可能的实施方式中,所述处理模块,具体用于将消费后的主表的数据流和消费后的关联表的数据流翻译后同步到目标库。29.在一些可能的实施方式中,所述处理模块,还用于如果不能够从所述缓存区获取到对应的业务主键,则将所述关联表的数据流写入所述缓存区以等待重新加载。30.在一些可能的实施方式中,所述数据库是关系型数据库;所述主表和/或关联表中的每张表的表名是消息队列的主题;所述处理模块,具体用于根据业务主键及其对应的事务标识字段对所述主表的单独分区数据流进行分组处理,根据业务外键及其对应的事务标识字段对所述关联表的单独分区数据流进行分组处理,获得多个分组;针对每个分组中的数据流,按照事件时间进行升序排序处理;根据按照事件时间进行升序排序处理后确定的顺序对每个分组中的数据流进行顺序消费。31.第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的任意一种多关联实时数据流的乱序处理方法。32.第四方面,提供一种计算机设备,其包括:33.一个或多个处理器;34.存储装置,用于存储一个或多个程序;35.当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上所述的任意一种多关联实时数据流的乱序处理方法。36.上述技术方案的优点在于:37.本发明实施例不仅保证了在高并发实时场景下多关联表数据流的延迟和重复的问题,而且还有效的解决了多关联表数据流乱序的问题。从试验的结果来看,采用本发明实施例的方法后,即使输入端有频繁的重复操作也可以保证应用端有准确的数据,基本满足了各种业务场景下乱序的问题。本发明实施例的技术方案实现简单,达到了应用的要求。附图说明38.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。39.图1是本发明实施例的多关联实时数据流的乱序处理方法的一种流程图;40.图2是本发明实施例的多关联实时数据流的乱序处理方的另一种具体流程图;41.图3是本发明实施例的一种多关联实时数据流的乱序处理装置的功能框图42.图4是本发明实施例的一种计算机设备的功能框图。具体实施方式43.下面结合附图对本发明实施例进行详细描述。44.需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合;并且,基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。45.需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。46.实施例一47.图1是本发明实施例的多关联实时数据流的乱序处理方法的一种流程图。如图1所示,该方法包括如下步骤:48.s110、实时监测数据库中主表和/或关联表的日志变化;49.s120、当数据库中主表和/或关联表的日志发生变化时,获得主表变化记录和/或关联表变化记录,将主表变化记录以多分区方式并行写入消息列队的主表主题中,将关联表变化记录以多分区方式并行写入消息队列的关联表主题中;50.s130、启动主表实时进程从主表主题中获取主表的多分区数据流,启动关联表实时进程从关联表主题中获取关联表的多分区数据流;51.s140、将主表的业务主键加载到数据库的缓存区;52.具体地,该缓存区可以是内存数据库的缓存区,使用内存数据库redis做缓存。该缓存区存储一些主键和业务键的关联关系,或者将延迟的数据写入缓存中,在获取下批数据时加载缓存区的数据一起进行业务逻辑的处理。53.s150、在获取关联表的数据流之后获取业务外键,并且判断是否能够从缓存区获取到对应的业务主键;54.s160、如果能够获取到业务主键,则分别将主表的多分区数据流和关联表的多分区数据流合并为一个单独分区数据流,根据指定字段对每个单独分区数据流进行分组处理获得多个分组,针对每个分组中的数据流进行排序处理,并根据排序处理确定的顺序对每个分组中的数据流进行消费,对消费后的数据流执行业务逻辑处理。55.具体地,在本步骤中如果能够获取到业务主键,则加载缓存区的关联表的数据流,并且分别将主表和关联表的多分区数据流合并为一个分区数据流,分别根据业务主键和业务外键及其对应的事务标识字段进行分组后并按照事件时间升序排序,这样就按照事件发生的顺序分别对主表数据流和关联表数据流进行消费,然后对主表的数据流和关联表的数据流执行业务逻辑处理。分组之间通过事务id进行排序即可保证分组之间的顺序。56.在一些实施例中,上述对消费后的数据流执行业务逻辑处理包括:将消费后的主表的数据流和消费后的关联表的数据流翻译后同步到目标库。该目标库可以在任意服务器上运行,根据业务场景可以输出到不同的位置,本实施例只是以写入关系型目标库为例进行说明,但不以此为限制。57.在一些实施例中,该方法还包括步骤s170:如果不能够从缓存区获取到对应的业务主键,则将关联表的数据流写入缓存区以等待重新加载。58.在一些实施例中,数据库是关系型数据库;主表和/或关联表中的每张表的表名是消息队列的主题;59.上述的根据指定字段对每个单独分区数据流进行分组处理获得多个分组,具体可以包括:根据业务主键及其对应的事务标识字段对主表的单独分区数据流进行分组处理,根据业务外键及其对应的事务标识字段对关联表的单独分区数据流进行分组处理,获得多个分组;60.上述的针对每个分组中的数据流进行排序处理,并根据排序处理确定的顺序对每个分组中的数据流进行消费,具体可以包括:针对每个分组中的数据流,按照事件时间进行升序排序处理;根据按照事件时间进行升序排序处理后确定的顺序对每个分组中的数据流进行顺序消费。61.同一事务下可能有多个原子性操作,如果不按照事件时间进行消费会出现不一致的情况。例如:一个事务中对变量a进行修改,a值修改成了b,又修改成了c,又修改成了d,如果不按照顺序消费就会出现最终结果是b,c,d,其中一个因此导致数据不一致。本发明实施例分别根据业务主键和业务外键及其对应的事务标识字段进行分组后,并且按照事件时间升序排序,这样就按照事件发生的顺序分别对主表的数据流和关联表的数据流进行消费。62.图2是本发明实施例的多关联实时数据流的乱序处理方的另一种具体流程图。如图1所示,本发明实施例提出一种多关联实时数据流乱序处理方法包括下列步骤:63.s1、准备所要实时采集的关系型数据库。在本发明实施例中,数据库中包括主表和多张关联表,其中主表字段包括业务主键(主表的唯一标识字段,以下同理)和其描述字段,关联表包括业务外键(主表业务主键的映射字段,以下同理)和其描述字段。64.s2、进行实时同步,该实时同步包括:通过实时监控采集模块监控主表和关联表的日志变化。65.s3、当数据库中主表和/或关联表的日志发生变化时,将变化表的变化记录以多分区并行写入到消息队列的相应主题中(每张表的表名即为消息队列的主题),以此来记录数据库对应的变化。一般为了提高任务的并行度,该实时监控采集模块会以多分区的方式写入消息队列,分区在消息队列中可以灵活的进行配置。66.s4、步骤s4包括步骤s41启动主表实时计算进程1获取主表的数据流,以及步骤s42启动关联表实时计算进程2,获取关联表的数据流。步骤s41和步骤s42可以同时执行或者先后执行。步骤s41执行完后进入步骤s9,步骤s42执行完后进入步骤s5。67.具体地,启动上述两个进程(进程1和进程2)的目的是获取两个数据流的数据。启动主表实时计算进程1,启动关联表实时计算进程2,优点是每个任务可以单独进行业务逻辑的处理,同时提高了并行度。68.s8、将主表的业务主键加载(写入)到缓存区。69.具体地,步骤s9中可以先判断缓存区是否存在业务主键,如果判断结果为否,则将业务主键写入缓存区,如果判断结果为是,则执行步骤s6。70.s5、获取关联表的数据流后,从关联表的数据流中获取业务外键,并到缓存区获取对应的业务主键是否存在。71.具体实施时,业务外键对应的是上面获取的关联表数据流的一个字段,即关联表的外键。在一个示例中,业务主键和业务外健可以是但不限制于mysql的主键和外键,主表的主键等于关联表的外键。72.s6、步骤s5中如果能够获取到业务主键,说明主表的数据流没有延迟,则加载缓存区的关联表的数据流,并且分别将主表和关联表的多分区数据流合并为一个分区数据流,根据业务键(主表的为业务主键,关联表为业务外键)及事件时间升序排序并顺序消费,然后进行主表的数据流和关联的表数据流的业务逻辑处理。73.在本步骤中,主表的数据流和关联表的数据流分别要进行各自的业务逻辑处理。74.上述主表的数据流的业务逻辑处理,包括:调用翻译模块将主表的数据流翻译后同步到目标库。75.上述关联表表的数据流的业务逻辑处理,包括:调用翻译模块将关联表的数据流翻译后同步到目标库。76.在本步聚中,上述根据业务外键及事件时间升序排序,具体可以包括:将加载到的关联表数据流中的业务外键字段news_flash_id和事件时间按照时间ts升序排序,详阅后文示例。77.步骤s5中,如果能够获取到业务主键则说明主表的数据流没有延迟,则加载缓存区的关联表的数据流,并将关联表主题下的多分区数据流合并为一个分区数据流,为兼容数据流中有重复数据的场景所以进行去重,去重的好处是避免重复翻译,去重后根据业务外键及事件时间升序排序并顺序消费,执行分别调用翻译模块将主表和关联表的数据流翻译后进行主数据流和关联表数据流的业务逻辑处理。主数据流按照主键id和事务id进行分组,关联表数据流按照外键id和事务id进行分组。78.s7、步骤s5中若不能获取到业务主键,则说明主表的数据流延迟,将关联表的数据流写入缓存区等待重新加载。79.从结束的步骤s7跳转返回到步骤s42,循环以上的处理过程。因为是实时任务,所以任务执行完一遍不会终止而是继续运行并加载,步骤s7结束后继续从步骤s42执行。80.以下进行举例说明:81.1.实时监控采集模块实时同步82.利用实时监控模块将变化的主表数据流和关联表数据流同步到消息队列对应的主题下:83.主表数据流写入主表主题:84.写入分区:0:32911‑‑>32912;85.写入分区:1:32881‑‑>32882;86.写入分区:2:32892‑‑>32893;87.写入分区:3:32914‑‑>32915。88.关联表数据流写入关联表主题:89.写入分区:0:2913‑‑>2914;90.写入分区:1:2825‑‑>2826;91.写入分区:2:2882‑‑>2883;92.写入分区:3:2924‑‑>2925。93.主表数据流:94.①快讯内容95.{"database":"gmall0105","xid":176,"data":{"create_time":1456911033,"link":"","mid":966,"title":"数人云完成三千万a轮融资打造paas生态圈","content":"3月2日,数人云宣布完成由云启创投领投,策源、唯猎跟投三千万人民币a轮融资。\n数人云隶属于北京数人科技有限公司,成立于2014年9月,创始人兼ceo为原谷歌架构师王璞创立,数人云长期维护着近千台服务器规模的mesos集群,是bat之外最大的分布式操作系统集群。\n数人云的dcos系统与传统paas相比,具有企业级混合容器集群管理、支持节点规模过万、支持大数据和机器学习能力及混合云部署能力四大优势。96.","cover":"","update_time":1610420400,"grade":"c","last_mid":0,"id":9,"source_id":"9","content_html":"3月2日,数人云宣布完成由云启创投领投,策源、唯猎跟投三千万人民币a轮融资。\n数人云隶属于北京数人科技有限公司,成立于2014年9月,创始人兼ceo为原谷歌架构师王璞创立,数人云长期维护着近千台服务器规模的mesos集群,是bat之外最大的分布式操作系统集群。\n数人云的dcos系统与传统paas相比,具有企业级混合容器集群管理、支持节点规模过万、支持大数据和机器学习能力及混合云部署能力四大优势。","pubdate":1456909500,"status":1},"old":{"content":"3月2日,数人云宣布完成由云启创投领投,策源、唯猎跟投三千万人民币a轮融资。\n数人云隶属于北京数人科技有限公司,成立于2014年9月,创始人兼ceo为原谷歌架构师王璞创立,数人云长期维护着近千台服务器规模的mesos集群,是bat之外最大的分布式操作系统集群。\n数人云的dcos系统与传统paas相比,具有企业级混合容器集群管理、支持节点规模过万、支持大数据和机器学习能力及混合云部署能力四大优势。97."},"commit":true,"type":"update","table":"crm_news_flash","ts":1621938250}。98.注:其中id为业务主键。99.关联表数据流:100.(1)快讯关联企业内容101.{"database":"gmall0105","xid":656,"data":{"create_time":1574425429,"name":"华为","mid":690,"enterprises_id":4,"id":9,"news_flash_id":9},"old":{"create_time":1574425428},"commit":true,"type":"update","table":"crm_news_flash_enterprises","ts":1621938552}102.注:其中news_flash_id为业务外键。103.(2)快讯关联行业内容104.{"database":"gmall0105","xid":591,"data":{"update_time":"2020‑09‑02105.12:34:56","create_time":"1970‑01‑0108:33:41","tag_name":"医疗服务[子行业]","tag_rank":0,"is_del":0,"tag_id":"10c93a3544f43153e30e4c3b53714ac2","is_related":0,"id":9,"news_flash_id":9,"order":0},"old":{"update_time":"2020‑09‑0212:34:55"},[0106]"commit":true,"type":"update","table":"crm_news_flash_industry_tag","ts":1621938514}[0107]注:其中news_flash_id为业务外键。[0108](3)快讯关联标签内容[0109]{"database":"gmall0105","xid":61299,"data":{"create_time":157620677,"name":"医疗","tag_id":2015,"mid":690,"id":1066,"news_flash_id":9},"old":{"create_time":1576206735},"commit":true,"type":"update","table":"crm_news_flash_tag","ts":1621993388}[0110]注:其中news_flash_id为业务外键。[0111]2.启动主表实时进程订阅,并消费主表的主题数据,调用处理模块进行合并分区、分组排序后再调用翻译模块翻译后写入目标库:[0112]如图2所示,步骤s1和步骤s2完成后,将主表中发生变化的数据写入了各自的主题中,订阅指的是获取了该主题中的数据,也就是获取到了变化的数据。[0113]翻译模块,用于调用翻译接口,可以实现两种语言的互译,将翻译后的文本写入目标库。通过实时翻译可以将一种文种文本最终写入目标库。[0114]主题设定:以每张表的“表名”作为消息队列的主题。[0115]翻译前content字段:3月2日,数人云宣布完成由云启创投领投,策源、唯猎跟投三千万人民币a轮融资。[0116]数人云隶属于北京数人科技有限公司,成立于2014年9月,创始人兼ceo为原谷歌架构师王璞创立,数人云长期维护着近千台服务器规模的mesos集群,是bat之外最大的分布式操作系统集群。[0117]数人云的dcos系统与传统paas相比,具有企业级混合容器集群管理、支持节点规模过万、支持大数据和机器学习能力及混合云部署能力四大优势。[0118]翻译后content字段:onmarch2,severalpeoplecloudannouncedthecompletionofaroundoffinancingofrmb30million,ledbyyunqiventurecapital,andfollowedbyceyuanandweilietou.[0119]digitalcloudisaffiliatedtobeijingdigitaltechnologyco.,ltd.,whichwasfoundedinseptember2014.itsfounderandceoiswangpu,theformergooglearchitect.digitalcloudhasmaintainedamesosclusterofnearly1000serversforalongtime,andisthelargestdistributedoperatingsystemclusteroutsidebat.[0120]comparedwiththetraditionalpaas,thedcossystemofdigitalcloudhasfouradvantages:enterpriselevelhybridcontainerclustermanagement,supportingmorethan10000nodes,supportingbigdataandmachinelearningability,andhybridclouddeploymentability.[0121]sql如下:[0122]insertintocrm_news_flash[0123](id,pubdate,title,content,content_html,source,link,cover,grade,mid,last_mid,status,create_time,update_time,data_source,source_id)[0124]values(63,1456909500,'severalpeoplecloudcompleted30millionroundafinancingtobuildpaasecosystem','onmarch2,severalpeoplecloudannouncedthecompletionofaroundoffinancingofrmb30million,ledbyyunqiventurecapital,andfollowedbyceyuanandweilietou.[0125]digitalcloudisaffiliatedtobeijingdigitaltechnologyco.,ltd.,whichwasfoundedinseptember2014.itsfounderandceoiswangpu,theformergooglearchitect.digitalcloudhasmaintainedamesosclusterofnearly1000serversforalongtime,andisthelargestdistributedoperatingsystemclusteroutsidebat.[0126]comparedwiththetraditionalpaas,thedcossystemofdigitalcloudhasfouradvantages:enterpriselevelhybridcontainerclustermanagement,supportingmorethan10000nodes,supportingbigdataandmachinelearningability,andhybridclouddeploymentability.','3月2日,数人云宣布完成由云启创投领投,策源、唯猎跟投三千万人民币a轮融资。[0127]数人云隶属于北京数人科技有限公司,成立于2014年9月,创始人兼ceo为原谷歌架构师王璞创立,数人云长期维护着近千台服务器规模的mesos集群,是bat之外最大的分布式操作系统集群。[0128]数人云的dcos系统与传统paas相比,具有企业级混合容器集群管理、支持节点规模过万、支持大数据和机器学习能力及混合云部署能力四大优势。','null',”,”,'c',966,0,1,1456911033,unix_timestamp(),"crm.news_flash",'9')[0129]onduplicatekeyupdate[0130]pubdate=1456909500,source='null',link=”,cover=”,grade='c',mid=966,last_mid=0,status=1,create_time=1456911033,update_time=unix_timestamp();[0131]将主表业务主键和目标表的业务主键映射写入缓存:[0132]*****insertnews_flashnew_id:63*****source_id:9*****[0133]source_id:源表(主表)的业务主键;[0134]new_id:目标表的业务主键;[0135]通过实时获取数据源的表进行翻译和处理,最后将翻译后的数据写入目标库的目标表,至此完成主表数据流的实时翻译过程。[0136]3.启动关联表实时进程订阅,并消费关联表的主题数据,调用处理模块和翻译模块合并为单分区、分组排序、翻译后并写入目标库。[0137]如图1所示,步骤s1和s2完成后,将关联表中变化的数据写入了各自的关联表主题中,订阅指的是获取了该关联表所在主题中的数据,也就是获取到了变化的数据。[0138]翻译模块,用于调用翻译接口,以实现两种语言的互译,将翻译后的文本并处理业务逻辑后写入目标库。[0139]例如实时监控模块监控到了快讯关联企业内容nf_id=9的三次变化如下:[0140]{"database":"gmall0105","xid":88190,"data":{"create_time":1574425430,"name":"华为","mid":690,"enterprises_id":4,"id":10,"nf_id":9},"old":{"create_time":1574425429},"xoffset":0,"type":"update","table":"crm_news_flash_enterprises","ts":1622012232}[0141]{"database":"gmall0105","xid":88190,"data":{"create_time":1574425431,"name":"华为","mid":690,"enterprises_id":4,"id":10,"nf_id":9},"old":{"create_time":1574425430},"xoffset":1,"type":"update","table":"crm_news_flash_enterprises","ts":1622012236}[0142]{"database":"gmall0105","xid":88190,"data":{"create_time":1574425435,"name":"华为","mid":690,"enterprises_id":4,"id":10,"nf_id":9},"old":{"create_time":1574425432},"commit":true,"type":"update","table":"crm_news_flash_enterprises","ts":1622012242}[0143]其中,xid:事务id,ts:事件时间,news_flash_id:业务外键,其他字段不做赘述。[0144]事务(transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在计算机术语中,事务通常就是指数据库事务。为了保证原子性会将多个查询放在一个事务当中要么都执行成功要么都失败,每个原子性操作会有同一个事务id。[0145]xid均为88190说明以上操作是在一个事务中,此时本实施例根据事务标识xid和nf_id(即news_flash_id)两个字段进行分组按照事件时间ts升序,这样在乱序下也可以保证顺序消费(开发者也可以根据自己的需求灵活调整分组和排序规则)。发明人发现乱序的原因是多分区写入所以顺序是不可控的,因此本实施例的处理流程中,将多分区的数据合并为单个分区,根据某些预设或指定的字段进行分组和排序后翻译再顺序写入目标表。[0146]所谓分组排序是按照每条记录的指定字段进行reducebykey的操作,例如本例中nf_id和xid作为key进行分组,相同key的数据进行reduce(合并,归约)被分到一组,按照value值先局部聚合相加,再全局聚合相加,然后根据ts(事件时间)字段进行升序排序即可保证每个分区的数据都能够按照事件时间的顺序进行处理即可保证分组内部的顺序,并将分组间排好序的数据流按照事务id进行升序排序即可保证分组间的顺序。其中,事务id是单调递增的。[0147]两阶段聚合(局部聚和和全局聚合):这个方案的实现思路就是进行两阶段聚合。第一次是局部聚合,先给每个key都打上一个随机数,比如10以内的随机数,此时原先一样的key就变成不一样的了,比如(hello,1)(hello,1)(hello,1)(hello,1),就会变成(1_hello,1)(1_hello,1)(2_hello,1)(2_hello,1)。[0148]接着对打上随机数后的数据,执行reducebykey等聚合操作,进行局部聚合,那么局部聚合结果,就会变成了(1_hello,2)(2_hello,2)。[0149]然后将各个key的前缀给去掉,就会变成(hello,2)(hello,2),再次进行全局聚合操作,就可以得到最终结果了,比如(hello,4)。该方案实现原理:将原本相同的key通过附加随机前缀的方式,变成多个不同的key,就可以让原本被一个task处理的数据分散到多个task上去做局部聚合,进而解决单个task处理数据量过多的问题。接着去除掉随机前缀,再次进行全局聚合,就可以得到最终的结果。该方案优点:对于聚合类的shuffle操作导致的数据倾斜,效果是非常不错的。通常都可以解决掉数据倾斜,或者至少是大幅度缓解数据倾斜,将性能提升数倍以上。[0150](1)如果发现主表延迟未写入业务主键缓存,则将此关联数据写入数据缓存等待下批重新加载:[0151]****crm_news_flash_relationnew_id:null****source_id:9****update_status:null****[0152](2)如果发现主表已经写入业务主键缓存则翻译并拼接sql,写入目标库:[0153]****crm_news_flash_relationnew_id:63****source_id:9****update_status:1****[0154]sql:[0155]insertintocrm_news_flash_enterprises[0156](nf_id,enterprises_id,name,mid,create_time)[0157]values(63,4,'huawei',690,1574425427)[0158]onduplicatekeyupdatename='huawei',mid=690。[0159]至此实现了对于多关联数据流乱序问题的处理方法,既可以保证在秒级延迟下实现(任意两种语言)快讯的实时翻译同步也能保证数据的准确性。[0160]本发明实施例是在消费消息队列多关联表主题下的多分区数据时,首先将多分区数据流合并为一个分区的数据流,再按照业务主键进行分组,按照事件时间标识字段排序后返回此数据流,若主表数据流出现数据延迟则将关联表的业务外键及数据存入缓存区等待重新加载,其余数据进行核心的业务逻辑的处理。[0161]如上面所说的事务是原子性操作,分组目的是将同一个业务主键对应的多个操作按照顺序进行处理,以保证处理的准确性。分组的处理过程可以包括:将相同的业务键和事务标识字段放在一个迭代器中,然后按照事件时间排序后返回此数据流。[0162]与现有技术相比,本发明实施例不仅保证了在高并发实时场景下多关联表数据流的延迟和重复的问题,而且还有效的解决了多关联表数据流乱序的问题。从试验的结果来看,采用本发明实施例的方法后,即使输入端有频繁的重复操作也可以保证应用端有准确的数据,基本满足了各种业务场景下乱序的问题。本发明实施例的技术方案实现简单,达到了应用的要求。[0163]实施例二[0164]图3是本发明实施例的一种多关联实时数据流的乱序处理装置的功能框图。如图3所示,该装置200包括:[0165]实时监控采集模块210,用于实时监测数据库中主表和/或关联表的日志变化;[0166]实时同步模块220,用于当数据库中主表和/或关联表的日志发生变化时,获得主表变化记录和/或关联表变化记录,将主表变化记录以多分区方式并行写入消息列队的主表主题中,将关联表变化记录以多分区方式并行写入消息队列的关联表主题中;[0167]进程启动模块230,用于启动主表实时进程从主表主题中获取主表的多分区数据流,启动关联表实时进程从关联表主题中获取关联表的多分区数据流;[0168]加载模块240,用于将主表的业务主键加载到数据库的缓存区;[0169]判断模块250,用于在获取关联表的数据流之后获取业务外键,并且判断是否能够从缓存区获取到对应的业务主键;[0170]处理模块260,用于如果能够获取到业务主键,则分别将主表的多分区数据流和关联表的多分区数据流合并为一个单独分区数据流,根据指定字段对每个单独分区数据流进行分组处理获得多个分组,针对每个分组中的数据流进行排序处理,并根据排序处理确定的顺序对每个分组中的数据流进行消费,对消费后的数据流执行业务逻辑处理。[0171]在一些实施例中,处理模块260,具体用于将消费后的主表的数据流和消费后的关联表的数据流翻译后同步到目标库。[0172]在一些实施例中,处理模块260还可以用于如果不能够从缓存区获取到对应的业务主键,则将关联表的数据流写入缓存区以等待重新加载。[0173]在一些实施例中,数据库是关系型数据库;主表和/或关联表中的每张表的表名是消息队列的主题;处理模块260,具体可以用于:根据业务主键及其对应的事务标识字段对主表的单独分区数据流进行分组处理,根据业务外键及其对应的事务标识字段对关联表的单独分区数据流进行分组处理,获得多个分组;[0174]针对每个分组中的数据流,按照事件时间进行升序排序处理;根据按照事件时间进行升序排序处理后确定的顺序对每个分组中的数据流进行顺序消费。[0175]所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本技术的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。[0176]实施例三[0177]本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质内存储有计算机程序,计算机程序被处理器执行时实现:[0178]实时监测数据库中主表和/或关联表的日志变化;[0179]当所述数据库中主表和/或关联表的日志发生变化时,获得主表变化记录和/或关联表变化记录,将所述主表变化记录以多分区方式并行写入消息列队的主表主题中,将所述关联表变化记录以多分区方式并行写入消息队列的关联表主题中;[0180]启动主表实时进程从所述主表主题中获取所述主表的多分区数据流,启动关联表实时进程从所述关联表主题中获取所述关联表的多分区数据流;[0181]将所述主表的业务主键加载到所述数据库的缓存区;[0182]在获取所述关联表的数据流之后获取业务外键,并且判断是否能够从所述缓存区获取到对应的业务主键;[0183]如果能够获取到业务主键,则分别将所述主表的多分区数据流和所述关联表的多分区数据流合并为一个单独分区数据流,根据指定字段对每个单独分区数据流进行分组处理获得多个分组,针对每个分组中的数据流进行排序处理,并根据排序处理确定的顺序对每个分组中的数据流进行消费,对消费后的数据流执行业务逻辑处理。[0184]所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read‑onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。当然,还有其他方式的可读存储介质,例如量子存储器、石墨烯存储器等等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。[0185]实施例四[0186]本发明实施例还提供了一种计算机设备200,如图4所示,其包括一个或多个处理器301、通信接口302、存储器303和通信总线304,其中,处理器301,通信接口302,存储器303通过通信总线304完成相互间的通信。[0187]存储器303,用于存放计算机程序;[0188]处理器301,用于执行存储器303上所存放的程序时,实现:[0189]实时监测数据库中主表和/或关联表的日志变化;[0190]当所述数据库中主表和/或关联表的日志发生变化时,获得主表变化记录和/或关联表变化记录,将所述主表变化记录以多分区方式并行写入消息列队的主表主题中,将所述关联表变化记录以多分区方式并行写入消息队列的关联表主题中;[0191]启动主表实时进程从所述主表主题中获取所述主表的多分区数据流,启动关联表实时进程从所述关联表主题中获取所述关联表的多分区数据流;[0192]将所述主表的业务主键加载到所述数据库的缓存区;[0193]在获取所述关联表的数据流之后获取业务外键,并且判断是否能够从所述缓存区获取到对应的业务主键;[0194]如果能够获取到业务主键,则分别将所述主表的多分区数据流和所述关联表的多分区数据流合并为一个单独分区数据流,根据指定字段对每个单独分区数据流进行分组处理获得多个分组,针对每个分组中的数据流进行排序处理,并根据排序处理确定的顺序对每个分组中的数据流进行消费,对消费后的数据流执行业务逻辑处理。[0195]上述电子设备提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于上述电子设备与其他设备之间的通信。[0196]总线304包括硬件、软件或两者,用于将上述部件彼此耦接在一起。举例来说,总线可包括加速图形端口(agp)或其他图形总线、增强工业标准架构(eisa)总线、前端总线(fsb)、超传输(ht)互连、工业标准架构(isa)总线、无限带宽互连、低引脚数(lpc)总线、存储器总线、微信道架构(mca)总线、外围组件互连(pci)总线、pci‑express(pci‑x)总线、串行高级技术附件(sata)总线、视频电子标准协会局部(vlb)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线可包括一个或多个总线。尽管本发明实施例描述和示出了特定的总线,但本发明考虑任何合适的总线或互连。[0197]存储器可以包括随机存取存储器(randomaccessmemory,ram),也可以包括非易失性存储器(non‑volatilememory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。[0198]存储器303可以包括用于数据或指令的大容量存储器。举例来说而非限制,存储器303可包括硬盘驱动器(harddiskdrive,hdd)、软盘驱动器、闪存、光盘、磁光盘、磁带或通用串行总线(universalserialbus,usb)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器303可包括可移除或不可移除(或固定)的介质。在特定实施例中,存储器303是非易失性固态存储器。在特定实施例中,存储器303包括只读存储器(rom)。在合适的情况下,该rom可以是掩模编程的rom、可编程rom(prom)、可擦除prom(eprom)、电可擦除prom(eeprom)、电可改写rom(earom)或闪存或者两个或更多个以上这些的组合。[0199]上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field‑programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。[0200]上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。[0201]虽然本技术提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。[0202]本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。[0203]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。[0204]这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。[0205]需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。[0206]本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备及可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。[0207]以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1