一种消息同步方法及系统技术方案

技术编号:36986242 阅读:18 留言:0更新日期:2023-03-25 18:04
本发明专利技术涉及一种消息同步方法及系统,该方法包括:从数据库的同步日志表中读取在先消费偏移;其中,在先消费偏移为消息队列各分区的消费偏移;基于在先消费偏移从kafka集群的消息队列中拉取消息,若当前消费消息消费成功,获取当前消费消息在消息队列中的当前消费偏移;在同一个数据库事务中,向数据库发送将当前消费消息写入待同步的数据表操作请求以及将当前消费偏移写入同步日志表操作请求。将消息队列中当前消费偏移与当前消费消息记录在数据库中,数据库中记录的当前消费偏移不会增加。消息消费过程中如果出现了程序崩溃,程序重启后,继续从上一个成功消费的偏移即当前消费偏移开始消费。基于这种机制,消费者不会丢失消息。失消息。失消息。

【技术实现步骤摘要】
一种消息同步方法及系统


[0001]本专利技术涉及一种消息同步方法及系统。

技术介绍

[0002]kafka消息服务是一种分布式发布订阅消息系统,可以处理消费者在网站中的所有动作流数据,由于其高吞吐量的特性而被广泛应用。传统的基于kafka消息服务的消息同步方案会出现消费者丢失消息的情况。如当消费者消费一条消息并处理消息时,应用服务可能会崩溃,如果此时消息还没有被处理,那么这条消息就会被丢失,消息同步机制失效。

技术实现思路

[0003]本专利技术的专利技术人发现,传统的消息同步方案丢失数据主要原因为:消费客户端拉取了消息,并提交了消费位移,但是在消息处理结束之前如果突然发生了宕机等故障,消费客户端重启后,会从之前已提交的位移的下一个位置重新开始消费,之前未处理完成的消息不会再次处理,即相当于消费者丢失了消息。鉴于上述问题,本专利技术实施例有必要提出一种消息同步方法及系统以解决或部分解决上述问题,本专利技术提出的技术方案如下:
[0004]作为第一方面,本专利技术提供一种消息同步方法,包括:
[0005]从数据库的同步日志表中读取在先消费偏移;其中,所述在先消费偏移为消息队列各分区的消费偏移;
[0006]基于所述在先消费偏移从kafka集群的消息队列中拉取消息,若当前消费消息消费成功,获取所述当前消费消息在所述消息队列中的当前消费偏移;
[0007]在同一个数据库事务中,向所述数据库发送将所述当前消费消息写入待同步的数据表操作请求以及将所述当前消费偏移写入所述同步日志表操作请求。
[0008]在一个或一些实施例中,所述基于所述在先消费偏移从kafka集群的消息队列中拉取消息,若当前消费消息消费成功,获取所述当前消费消息在所述消息队列中的当前消费偏移,包括:
[0009]将所述在先消费偏移加上预设偏移量得到指定消费偏移,调用kafkaConsumer的seek函数将消费位置设置为所述指定消费偏移;
[0010]基于所述指定消费偏移从所述消息队列拉取消息,若当前消费消息消费成功,获取所述当前消费消息在所述消息队列中的当前消费偏移。
[0011]在一个或一些实施例中,所述方法还包括:
[0012]判断消费客户端与所述数据库连接是否正常,若消费客户端与所述数据库连接异常,重新建立消费客户端与所述数据库的连接,从所述同步日志表中读取消息队列上一成功消费的在先消费偏移,根据所述在先消费偏移从kafka集群的消息队列拉取消息进行消费。
[0013]在一个或一些实施例中,所述方法还包括:
[0014]若kafka出现消费异常,则向消费客户端发送重启指令,重启所述消费客户端,并
从数据库的同步日志表中读取消息队列上一成功消费的在先消费偏移,根据所述在先消费偏移从kafka集群的消息队列拉取消息继续进行消费。
[0015]在一个或一些实施例中,所述方法还包括:
[0016]消费消息时,判断所述当前消费消息的格式是否符合预设要求;
[0017]若所述当前消费消息的格式不符合预设要求,将所述当前消费偏移写入所述同步日志表,并将所述当前消费消息的状态设置为无效;
[0018]将所述当前消费偏移加上预设偏移量得到下一消费偏移,基于所述下一消费偏移从kafka集群的所述消息队列中拉取下一消息继续进行消费。
[0019]在一个或一些实施例中,所述方法还包括:
[0020]若消费过程中出现程序故障,在程序恢复后从所述同步日志表中读取每个分区的最大偏移量,并调用kafkaConsumer的seek函数将每个分区的消费位置设置为所述分区对应的所述最大偏移量。
[0021]第二方面,本专利技术提供一种消息消费方法,包括:
[0022]从数据库的同步日志表中读取消息队列各分区上一成功消费的在先消费偏移;
[0023]基于所述在先消费偏移从kafka集群的消息队列拉取消息并消费。
[0024]第三方面,本专利技术提供一种消息同步系统,包括:
[0025]读取模块,用于从数据库的同步日志表中读取在先消费偏移;其中,所述在先消费偏移为消息队列各分区的消费偏移;
[0026]消费模块,用于基于所述在先消费偏移从kafka集群的消息队列中拉取消息,若当前消费消息消费成功,获取所述当前消费消息在所述消息队列中的当前消费偏移;
[0027]事务模块,用于在同一个数据库事务中,向所述数据库发送将所述当前消费消息写入待同步的数据表操作请求以及将所述当前消费偏移写入所述同步日志表操作请求。
[0028]第四方面,本专利技术提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的消息同步方法或如第二方面所述的消息消费方法的步骤。
[0029]第五方面,本专利技术提供一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;
[0030]存储器,用于存放计算机程序;
[0031]处理器,用于执行存储器上所存放的程序时,实现如第一方面所述的消息同步方法或如第二方面所述的消息消费方法的步骤。
[0032]基于上述技术方案,本专利技术较现有技术而言的有益效果为:
[0033]本专利技术提供的消息同步方法,通过从数据库的同步日志表中读取在先消费偏移;再基于所述在先消费偏移从kafka集群的消息队列中拉取消息,若当前消费消息消费成功,则获取当前消费消息在消息队列中的偏移,得到当前消费偏移;通过将消费客户端的当前消费偏移写入同步日志表与数据表的当前消费消息的更新操作,放在同一个数据库事务中提交,依靠数据库事务,保证了消费消息更新和消费偏移记录的原子性。当前消费偏移是成功消费的消息的消费偏移,该当前消费偏移存储在数据库的同步日志表中,同步日志表中的当前消费偏移在下一次消息消费之前不会增加。下一次消息消费过程中如果出现了程序崩溃,那么程序重启后,从数据库的同步日志表中当前消费偏移,继续从当前消费偏移处开
始消费。基于这种机制,可以从上一次成功消费的消费偏移处进行消费,实现消息消费的精准一次性,即使是出现程序故障消费客户端消费数据也不会出现丢失的情况,消费客户端不会丢失消息。消费客户端消费数据时发生了崩溃等场景,并不会影响同步日志表中的当前消费偏移,消费客户端重新从同步日志表中读取出上次成功消费的当前消费偏移,继续消费即可。
[0034]本专利技术的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本专利技术而了解。本专利技术的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
[0035]为使本专利技术的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
[0036]为了更清楚地说明本专利技术具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种消息同步方法,其特征在于,包括:从数据库的同步日志表中读取在先消费偏移;其中,所述在先消费偏移为消息队列各分区的消费偏移;基于所述在先消费偏移从kafka集群的消息队列中拉取消息,若当前消费消息消费成功,获取所述当前消费消息在所述消息队列中的当前消费偏移;在同一个数据库事务中,向所述数据库发送将所述当前消费消息写入待同步的数据表操作请求以及将所述当前消费偏移写入所述同步日志表操作请求。2.根据权利要求1所述的消息同步方法,其特征在于,所述基于所述在先消费偏移从kafka集群的消息队列中拉取消息,若当前消费消息消费成功,获取所述当前消费消息在所述消息队列中的当前消费偏移,包括:将所述在先消费偏移加上预设偏移量得到指定消费偏移,调用kafkaConsumer的seek函数将消费位置设置为所述指定消费偏移;基于所述指定消费偏移从所述消息队列拉取消息,若当前消费消息消费成功,获取所述当前消费消息在所述消息队列中的当前消费偏移。3.根据权利要求1所述的消息同步方法,其特征在于,所述方法还包括:判断消费客户端与所述数据库连接是否正常,若消费客户端与所述数据库连接异常,重新建立消费客户端与所述数据库的连接,从所述同步日志表中读取消息队列上一成功消费的在先消费偏移,根据所述在先消费偏移从kafka集群的消息队列拉取消息进行消费。4.根据权利要求1所述的消息同步方法,其特征在于,所述方法还包括:若kafka出现消费异常,则向消费客户端发送重启指令,重启所述消费客户端,并从数据库的同步日志表中读取消息队列上一成功消费的在先消费偏移,根据所述在先消费偏移从kafka集群的消息队列拉取消息继续进行消费。5.根据权利要求1所述的消息同步方法,其特征在于,所述方法还包括:消费消息时,判断所述当前消费消息的格式是否符合预设要求;若所述当前消费消息的格式不符合预设要求,将所述当前消...

【专利技术属性】
技术研发人员:余阳徐博张毅段先明周峰
申请(专利权)人:湖北省楚天云有限公司
类型:发明
国别省市:

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

1