CN109361629B - 一种基于Kafka大消息可靠传输方法 - Google Patents

一种基于Kafka大消息可靠传输方法 Download PDF

Info

Publication number
CN109361629B
CN109361629B CN201811255581.8A CN201811255581A CN109361629B CN 109361629 B CN109361629 B CN 109361629B CN 201811255581 A CN201811255581 A CN 201811255581A CN 109361629 B CN109361629 B CN 109361629B
Authority
CN
China
Prior art keywords
message
messages
fragment
original
small
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201811255581.8A
Other languages
English (en)
Other versions
CN109361629A (zh
Inventor
鞠时光
李生
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing Ultravis Information Technology Co ltd
Original Assignee
Jiangsu University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Jiangsu University filed Critical Jiangsu University
Priority to CN201811255581.8A priority Critical patent/CN109361629B/zh
Publication of CN109361629A publication Critical patent/CN109361629A/zh
Application granted granted Critical
Publication of CN109361629B publication Critical patent/CN109361629B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9057Arrangements for supporting packet reassembly or resequencing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

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

Description

一种基于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)消息分片器为每一个分片消息生成消息头;消息头包含标识、分片标志、片偏移、结束标志4个字段;其中,标识字段用于标识分片消息与原始消息的对应关系,同一原始消息的各分片的标识字段相同,值为原始消息的消息标识码;分片标志字段用于标识原始消息是否进行过分片;结束标志字段用于标识该分片是否是原始消息的最后一个分片;片偏移字段用于标识该分片是原始消息的第几个分片;
本发明具体实施中消息头为48位,消息头结构如图3所示;消息头的第0到第13位是片偏移字段,片偏移字段的值为分片消息的开始字节的序号除以分片阈值N;消息头第14位是结束标志字段,如果结束标志字段值为1表示该分片是原始消息的最后一个分片,此时,该分片的偏移字段值加1表示了原始消息的分片个数,如果结束标志字段值为0表示该分片之后还有其余分片;消息头第15位是分片标志字段,如果该字段值为0表示该分片就是原始消息,如果为1表示原始消息还有其它分片;消息头第16位到第47位是标识字段,标识字段的值是原始消息的消息标识码;
4.4)消息分片器将消息头拼接到分片消息之前,得到小消息;
5)消息分片器将小消息经生产者发送给Kafka集群;
6)Kafka集群对分片消息进行分布式存储;
7)接收方创建消息组成器;
8)消息组成器创建消费者;
9)消费者向Kafka集群订阅消息;
10)Kafka集群将小消息发送给消费者;
11)消息组成器从消费者接收小消息;
12)消息组成器将小消息拼接成原始消息;拼接操作的示意图如图4所示;其中,小消息拼接成原始消息包括以下步骤:
12.1)消息组成器拆分小消息,即将小消息拆分为消息头和分片消息;在具体实施例中,拆分操作是将小消息的前48位提取为消息头,其余部分提取为分片消息;
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)拼接分片消息链表中的分片消息,还原成原始消息;拼接操作按分片消息链表中分片消息的排列顺序执行;
13)消息组成器将原始消息发送给接收方。

Claims (6)

1.一种基于Kafka的大消息可靠传输方法,其特征在于,包括以下步骤:
1)发送方创建消息分片器;
2)发送方发送原始消息到消息分片器;
3)消息分片器创建生产者;
4)消息分片器将原始消息分解为小消息;
5)消息分片器将小消息经生产者发送给Kafka集群;
6)Kafka集群对分片消息进行分布式存储;
7)接收方创建消息组成器;
8)消息组成器创建消费者;
9)消费者向Kafka集群订阅消息;
10)Kafka集群将小消息发送给消费者;
11)消息组成器从消费者接收小消息;
12)消息组成器将小消息拼接成原始消息;
13)消息组成器将原始消息发送给接收方;
所述步骤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)按分片消息链表中分片消息的排列顺序拼接分片消息链表中的分片消息,还原成原始消息。
2.如权利要求1所述的基于Kafka的大消息可靠传输方法,其特征在于,所述步骤4)中,将原始消息分解为小消息包括以下步骤:
4.1)消息分片器利用MD5消息摘要算法计算消息标识码;
4.2)消息分片器将原始消息分割为分片消息;如果原始消息大于分片阈值N将原始消息按照分片阈值N分成多个分片消息,如果原始消息小于或等于分片阈值N则原始消息直接作为分片消息;
4.3)消息分片器为每一个分片消息生成消息头;
4.4)消息分片器将消息头拼接到分片消息之前,得到小消息。
3.如权利要求2所述的基于Kafka的大消息可靠传输方法,其特征在于,所述步骤4.3)中,所述消息头包含标识、分片标志、片偏移、结束标志4个字段;其中,标识字段用于标识分片消息与原始消息的对应关系,同一原始消息的各分片的标识字段相同,值为原始消息的消息标识码;分片标志字段用于标识原始消息是否进行过分片;结束标志字段用于标识该分片是否是原始消息的最后一个分片;片偏移字段用于标识该分片是原始消息的第几个分片。
4.如权利要求1所述的基于Kafka的大消息可靠传输方法,其特征在于,所述步骤12.3)中所述分片消息映射表为一个标识码对应一个分片消息链表的结构,用于存储不同原始消息对应的分片消息;分片消息链表为多个分片消息按顺序首尾相接的结构,用于存储同一原始消息下的各个分片消息。
5.如权利要求1所述的基于Kafka的大消息可靠传输方法,其特征在于,所述步骤12.5)中所述分片个数映射表为一个标识码对应一个分片个数的结构,用于记录每一个原始消息的分片个数。
6.如权利要求1所述的基于Kafka的大消息可靠传输方法,其特征在于,所述传输方法基于以下系统实现,包括消息分片器、生产者、Kafka集群、消费者和消息组成器;所述消息分片器由发送方创建,用于将发送方发送的原始消息分解为小消息、创建生产者以及将小消息发送给生产者;所述生产者由消息分片器创建,用于接收消息分片器的小消息并发送给Kafka集群;所述Kafka集群用于分布式存储生产者发送来的小消息、响应消费者请求并将小消息发送给消费者;所述消费者由消息组成器创建,用于从Kafka集群接收小消息并将小消息发送到消息组成器;所述消息组成器由接收方创建,用于创建消费者、从消费者接收小消息并将小消息拼接为原始消息。
CN201811255581.8A 2018-10-26 2018-10-26 一种基于Kafka大消息可靠传输方法 Active CN109361629B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811255581.8A CN109361629B (zh) 2018-10-26 2018-10-26 一种基于Kafka大消息可靠传输方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811255581.8A CN109361629B (zh) 2018-10-26 2018-10-26 一种基于Kafka大消息可靠传输方法

Publications (2)

Publication Number Publication Date
CN109361629A CN109361629A (zh) 2019-02-19
CN109361629B true CN109361629B (zh) 2020-11-03

Family

ID=65346906

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811255581.8A Active CN109361629B (zh) 2018-10-26 2018-10-26 一种基于Kafka大消息可靠传输方法

Country Status (1)

Country Link
CN (1) CN109361629B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110401721B (zh) * 2019-08-06 2022-07-08 北京达佳互联信息技术有限公司 内容数据分发的方法、装置及系统
CN115801765A (zh) * 2022-11-16 2023-03-14 工赋(青岛)科技有限公司 文件传输方法、装置、系统、电子设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106648904A (zh) * 2017-01-09 2017-05-10 大连理工大学 一种流式数据处理自适应速率控制方法
CN106874320A (zh) * 2016-06-20 2017-06-20 阿里巴巴集团控股有限公司 分布式流式数据处理的方法和装置
CN108647329A (zh) * 2018-05-11 2018-10-12 中国联合网络通信集团有限公司 用户行为数据的处理方法、装置及计算机可读存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10262032B2 (en) * 2016-02-24 2019-04-16 Salesforce.Com, Inc. Cache based efficient access scheduling for super scaled stream processing systems

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106874320A (zh) * 2016-06-20 2017-06-20 阿里巴巴集团控股有限公司 分布式流式数据处理的方法和装置
CN106648904A (zh) * 2017-01-09 2017-05-10 大连理工大学 一种流式数据处理自适应速率控制方法
CN108647329A (zh) * 2018-05-11 2018-10-12 中国联合网络通信集团有限公司 用户行为数据的处理方法、装置及计算机可读存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于大数据平台的流连接算法及并行化研究;郎贤波;《中国优秀硕士学位论文全文数据库》;20180215;文献第17页倒数第7行至第19页第7行 *

Also Published As

Publication number Publication date
CN109361629A (zh) 2019-02-19

Similar Documents

Publication Publication Date Title
CN108965484B (zh) 一种物联网数据的传输方法、系统及终端
CN104518853B (zh) 一种数据重传的方法、接收端及系统
CN106330414B (zh) 一种报文传输方法及装置
CN107257270B (zh) 基于混合自动重传请求的数据传输方法及系统
CN108512785B (zh) 一种数据传输协议方法
CN109361629B (zh) 一种基于Kafka大消息可靠传输方法
CN111158933A (zh) 一种基于消息队列的分布式事务处理方法及系统
CN105450712A (zh) 一种数据传输方法及装置
CN110636009A (zh) 一种数据传输方法和装置
CN111181698B (zh) 数据处理方法、装置、设备及介质
CN104463556A (zh) 电子邮件正文引用信息的整理和发现方法及系统
WO2021190031A1 (zh) 基于wdm的数据传输方法、装置、系统及存储介质
CN112181883B (zh) 一种串口通讯的数据传输方法、系统及存储介质
US20210176293A1 (en) Method, device and system for transmitting data
CN110585724B (zh) 游戏客户端中的表格数据更新方法、装置
CN111385069A (zh) 数据传输方法及计算机设备
CN110838924B (zh) 区块传输方法及装置
CN101321317B (zh) 一种分段确认机制实现短消息系统中级联短消息传输方法
CN111246427B (zh) 辅链路的传输控制方法、系统、设备、介质及辅链路终端
CN104796735B (zh) 一种视频数据传输方法及装置
CN106850451A (zh) 一种数据传输方法、装置及系统
US9686221B2 (en) Error correction for interactive message exchanges using summaries
US20160234655A1 (en) Compression with Multicast Dictionary
CN115412519B (zh) 消息传输方法、装置、服务器及存储介质
CN114422082B (zh) 基于线性网络编码的传输控制方法、系统、装置及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20231212

Address after: Room 601-C4, Building 1, Phase 1, Jingang Science and Technology Innovation Park, No.1 Science and Technology Innovation Road, Yaohua Street, Nanjing City, Jiangsu Province, 210000

Patentee after: Nanjing Ultravis Information Technology Co.,Ltd.

Address before: 212013 No. 301, Xuefu Road, Zhenjiang, Jiangsu

Patentee before: JIANGSU University

TR01 Transfer of patent right