当前位置: 首页 > 专利查询>江苏大学专利>正文

一种基于Kafka大消息可靠传输方法及系统技术方案

技术编号:20394813 阅读:98 留言:0更新日期:2019-02-20 04:55
本发明专利技术属于分布式系统节点间通信技术领域,具体涉及一种基于Kafka大消息可靠传输方法及系统;其系统包括消息分片器、生产者、Kafka集群、消费者和消息组成器;其方法基于系统,包括消息分片器接收发送方的原始消息并处理为小消息,通过生产者发送给Kafka集群存储;消息组成器通过消费者订阅Kafka集群的小消息,拼接小消息为原始消息发送给接收方;本发明专利技术的系统及方法避免了Kafka传输大消息时出错而重传造成的网络资源浪费;原始消息被划分成小消息,当消息出现传输错误时,仅仅重传出错的小消息,避免了重复传输而节约了网络资源,提高Kafka消息的吞吐率;适用于需要分布式传输大消息的应用场景。

【技术实现步骤摘要】
一种基于Kafka大消息可靠传输方法及系统
本专利技术属于分布式系统节点间通信
,具体涉及一种基于Kafka大消息可靠传输方法及系统。
技术介绍
Kafka是一种分布式发布-订阅消息系统,最初由LinkedIn公司开发,使用Scala语言编写,之后成为Apache项目的一部分。Kafka消息系统主要由生产者、代理者和消费者组成。生产者负责产生消息发送给代理者,代理者对消息做暂时存储,之后转发给消费者,消费者接收并处理消息。为保证传输消息的可靠性,即消息传输过程中不会出现内容错误或者漏传,Kafka使用CRC循环校验检验消息是否有误。在不通过CRC循环校验时,消息会被重新传输,直至消息准确无误。在这种消息传输模式下,Kafka传输较小消息时效率较高,官方文档显示10kb左右消息时,效率最高。但是在一些需要传输大消息的应用场景下,如传输视频、大型归档文件,很多网络资源浪费在重传上,导致消息传输效率低下,Kafka不能完全满足数据发布与订阅需求。
技术实现思路
针对上述存在的问题,本专利技术提出一种基于Kafka大消息可靠传输方法及系统,以解决现有Kafka传输大消息时效率低下的问题。为实现上述目的,本专利技术具体技术方案如下:一种基于Kafka大消息可靠传输方法,包括以下步骤:1)发送方创建消息分片器;2)发送方发送原始消息到消息分片器;3)消息分片器创建生产者;4)消息分片器将原始消息分解为小消息;5)消息分片器将小消息经生产者发送给Kafka集群;6)Kafka集群对分片消息进行分布式存储;7)接收方创建消息组成器;8)消息组成器创建消费者;9)消费者向Kafka集群订阅消息;10)Kafka集群将小消息发送给消费者;11)消息组成器从消费者接收小消息;12)消息组成器将小消息拼接成原始消息;13)消息组成器将原始消息发送给接收方。进一步地,上述步骤4)中,将原始消息分解为小消息包括以下步骤:4.1)消息分片器利用MD5消息摘要算法计算消息标识码;4.2)消息分片器将原始消息分割为分片消息;如果原始消息大于分片阈值N将原始消息按照分片阈值N分成多个分片消息,如果原始消息小于或等于分片阈值N则原始消息直接作为分片消息;4.3)消息分片器为每一个分片消息生成消息头;4.4)消息分片器将消息头拼接到分片消息之前,得到小消息。进一步地,上述步骤12)中,将小消息拼接成原始消息包括以下步骤:12.1)消息组成器拆分小消息,即将小消息拆分为消息头和分片消息;12.2)识别消息头分片标志字段,如果消息头分片标志字段值为0,分片消息就是原始消息转步骤13);如果消息头分片标志字段值为1,转步骤12.3);12.3)识别消息头标识字段,根据标识字段的值查询分片消息映射表,如果存在该标识字段的值对应的分片消息链表,转步骤12.4),如果不存在则新建分片消息链表,转步骤12.4);12.4)识别消息头片偏移字段;根据片偏移字段的值将分片消息插入到分片消息链表的对应位置;12.5)识别消息头结束标志字段;如果结束标志字段值为1,将该分片消息的片偏移字段的值加1记录在分片个数映射表中;12.6)判断分片消息链表的大小是否等于原始消息分片数,如果相等,转步骤12.7),如果不等,转步骤11);12.7)按分片消息链表中分片消息的排列顺序拼接分片消息链表中的分片消息,还原成原始消息。进一步地,上述步骤4.3)中,所述消息头包含标识、分片标志、片偏移、结束标志4个字段;其中,标识字段用于标识分片消息与原始消息的对应关系,同一原始消息的各分片的标识字段相同,值为原始消息的消息标识码;分片标志字段用于标识原始消息是否进行过分片;结束标志字段用于标识该分片是否是原始消息的最后一个分片;片偏移字段用于标识该分片是原始消息的第几个分片。进一步地,上述步骤12.3)中所述分片消息映射表为一个标识码对应一个分片消息链表的结构,用于存储不同原始消息对应的分片消息;分片消息链表为多个分片消息按顺序首尾相接的结构,用于存储同一原始消息下的各个分片消息。进一步地,上述步骤12.5)中所述分片个数映射表为一个标识码对应一个分片个数的结构,用于记录每一个原始消息的分片个数。本专利技术还提供一种基于Kafka的大消息可靠传输系统,包括消息分片器、生产者、Kafka集群、消费者和消息组成器;其中,消息分片器由发送方创建,用于将发送方发送的原始消息分解为小消息、创建生产者以及将小消息发送给生产者;生产者由消息分片器创建,用于接收消息分片器的小消息并发送给Kafka集群;Kafka集群用于分布式存储生产者发送来的小消息、响应消费者请求并将小消息发送给消费者;消费者由消息组成器创建,用于从Kafka集群接收小消息并将小消息发送到消息组成器;消息组成器由接收方创建,用于创建消费者、从消费者接收小消息并将小消息拼接为原始消息。与现有技术相比,本专利技术具备海量实时通信能力;在传输大消息时,避免了消息出错导致的大量重传,节约了网络资源浪费,极大的提高了Kafka对大消息的吞吐率;在传输较小消息时和现有Kafka系统吞吐率一致;同时保证了消息传输的可靠性,即发送的消息不会丢失,接收的消息不会出错。附图说明图1基于Kafka的大消息可靠传输系统结构示意图。图2大消息可靠传输方法流程图。图3消息头字段结构示意图。图4小消息拼接成原始消息示意图。具体实施方式下面结合附图以及具体实施例对本专利技术作进一步的说明,需要指出的是,下面仅以一种最优化的技术方案对本专利技术的技术方案以及设计原理进行详细阐述,但本专利技术的保护范围并不限于此。所述实施例为本专利技术的优选的实施方式,但本专利技术并不限于上述实施方式,在不背离本专利技术的实质内容的情况下,本领域技术人员能够做出的任何显而易见的改进、替换或变型均属于本专利技术的保护范围。图1所示是基于Kafka的大消息可靠传输系统示意图,系统包括消息分片器、生产者、Kafka集群、消费者和消息组成器;其中,消息分片器由发送方创建,用于将发送方发送的原始消息分解为小消息、创建生产者以及将小消息发送给生产者;生产者由消息分片器创建,用于接收消息分片器的小消息并发送给Kafka集群;Kafka集群用于分布式存储生产者发送来的小消息、响应消费者请求并将小消息发送给消费者;消费者由消息组成器创建,用于从Kafka集群接收小消息并将小消息发送到消息组成器;消息组成器由接收方创建,用于创建消费者、从消费者接收小消息并将小消息拼接为原始消息;图2所示为大消息可靠传输方法流程图;发送方发送消息到接收方接收消息的过程包括如下步骤:1)发送方创建消息分片器;2)发送方发送原始消息到消息分片器;3)消息分片器创建生产者;4)消息分片器将原始消息分解为小消息;将原始消息分解为小消息包括以下步骤:4.1)消息分片器利用MD5消息摘要算法计算消息标识码;本专利技术具体实施中,消息标识码使用md5码,md5码由MD5消息摘要算法计算得到,为32位;4.2)消息分片器将原始消息分割为分片消息;如果原始消息大于分片阈值N将原始消息按照分片阈值N分成多个分片消息,如果原始消息小于或等于分片阈值N则原始消息直接作为分片消息;本专利技术具体实施例中,分片阈值N为10kb;4.3)消息分片器为每一个分片消息生成消息头;消息头包含本文档来自技高网...

【技术保护点】
1.一种基于Kafka的大消息可靠传输方法,包括以下步骤:1)发送方创建消息分片器;2)发送方发送原始消息到消息分片器;3)消息分片器创建生产者;4)消息分片器将原始消息分解为小消息;5)消息分片器将小消息经生产者发送给Kafka集群;6)Kafka集群对分片消息进行分布式存储;7)接收方创建消息组成器;8)消息组成器创建消费者;9)消费者向Kafka集群订阅消息;10)Kafka集群将小消息发送给消费者;11)消息组成器从消费者接收小消息;12)消息组成器将小消息拼接成原始消息;13)消息组成器将原始消息发送给接收方。

【技术特征摘要】
1.一种基于Kafka的大消息可靠传输方法,包括以下步骤:1)发送方创建消息分片器;2)发送方发送原始消息到消息分片器;3)消息分片器创建生产者;4)消息分片器将原始消息分解为小消息;5)消息分片器将小消息经生产者发送给Kafka集群;6)Kafka集群对分片消息进行分布式存储;7)接收方创建消息组成器;8)消息组成器创建消费者;9)消费者向Kafka集群订阅消息;10)Kafka集群将小消息发送给消费者;11)消息组成器从消费者接收小消息;12)消息组成器将小消息拼接成原始消息;13)消息组成器将原始消息发送给接收方。2.如权利要求1所述的基于Kafka的大消息可靠传输方法,其特征在于,所述步骤4)中,将原始消息分解为小消息包括以下步骤:4.1)消息分片器利用MD5消息摘要算法计算消息标识码;4.2)消息分片器将原始消息分割为分片消息;如果原始消息大于分片阈值N将原始消息按照分片阈值N分成多个分片消息,如果原始消息小于或等于分片阈值N则原始消息直接作为分片消息;4.3)消息分片器为每一个分片消息生成消息头;4.4)消息分片器将消息头拼接到分片消息之前,得到小消息。3.如权利要求1所述的基于Kafka的大消息可靠传输方法,其特征在于,所述步骤12)中,将小消息拼接成原始消息包括以下步骤:12.1)消息组成器拆分小消息,即将小消息拆分为消息头和分片消息;12.2)识别消息头分片标志字段,如果消息头分片标志字段值为0,分片消息就是原始消息转步骤13);如果消息头分片标志字段值为1,转步骤12.3);12.3)识别消息头标识字段,根据标识字段的值查询分片消息映射表,如果存在该标识字段的值对应的分片消息链表,转步骤12.4),如果不存在则新建分片消息链表,转步骤12.4);12.4)识别消息头片偏移字段;根据片偏移字段的值将分片消息插入到分片消息链表的对应位置;12.5)识别消息头结束标志字段;如果结束标志字段值为1,将该分片消息的片...

【专利技术属性】
技术研发人员:鞠时光李生
申请(专利权)人:江苏大学
类型:发明
国别省市:江苏,32

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

1