CN106487891B - 一种基于kafka的处理消息的方法 - Google Patents
一种基于kafka的处理消息的方法 Download PDFInfo
- Publication number
- CN106487891B CN106487891B CN201610887224.8A CN201610887224A CN106487891B CN 106487891 B CN106487891 B CN 106487891B CN 201610887224 A CN201610887224 A CN 201610887224A CN 106487891 B CN106487891 B CN 106487891B
- Authority
- CN
- China
- Prior art keywords
- message
- pattern
- kafka
- information
- massage pattern
- 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
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/55—Push-based network services
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开一种基于kafka的处理消息的方法,模式信息作为消息头信息的一部分随消息一起发送,在消息传输时使用Apache Avro为消息传输格式。另一种方法,通过消息模式注册服务来实现消息模式变更通知,对于上游生产者应用生成的消息在发往kafka之前先到Schema Registrar注册并生成对应的模式编号,而随消息一起传递的是从模式注册服务获取到的该消息模式对应的编号,当下游消费者应用通过kafka获取到消息时,首先解析消息元数据信息,拿到消息模式编号,如果应用内存中有模式编号对应的模式信息,则根据模式信息解析消息,如果内存中没有,则应用发起请求根据模式编号从Schema Registrar中获取模式信息,然后根据模式信息解析消息,并缓存该模式信息。
Description
技术领域
本发明涉及大数据处理和实时计算的技术领域,尤其涉及一种基于kafka的处理消息的方法。
背景技术
中国专利申请(申请号:CN201510099439.9)公开了一种基于kafka的消息处理系统及处理方法。现有基于消息队列kafka的生产者和消费者应用中,上游生产者应用生成消息并发送到kafka,下游消费者应用根据上游生产者应用事先定好的消息格式消费kafka中的消息,上游消息模式变更的时候,必须通知下游消费者应用,开发人员对消费者应用做代码调整和二次开发以适应上游新的消息模式。
但是,现有基于消息队列kafka的生产者和消费者应用中,下游消息消费者应用严重依赖于上游生产者应用生成的消息以及消息模式,当个上游应用由于需求变更,或者其他原因导致生成的消息模式发生变化,如果没有通知到下游应用时,会导致下游消费者应用抛出异常。即使上游生产者生成的消息模式变更通知到了下游,下游的开发人员也需要对应用做代码调整和二次开发以适应上游新的消息模式。
发明内容
为克服现有技术的缺陷,本发明要解决的技术问题是提供了一种基于kafka的处理消息的方法,其在上游生产者发往消息队列kafka中的消息在模式上有变动的情况下,下游消费者应用能够自动识别新消息的消息模式,并能根据不同消息的消息模式自动使用相应的解析方法解析消息,这样避免了由于上游消息模式变更导致下游应用异常的情况。
本发明的技术方案是:这种基于kafka的处理消息的方法,模式信息作为消息头信息的一部分随消息一起发送,在消息传输时使用Apache Avro为消息传输格式。
还提供了另一种基于kafka的处理消息的方法,通过消息模式注册服务来实现消息模式变更通知,对于上游生产者应用生成的消息在发往kafka之前先到模式注册服务Schema Registrar注册并生成对应的模式编号,而随消息一起传递的是从模式注册服务获取到的该消息模式对应的编号,当下游消费者应用通过kafka获取到消息时,首先解析消息元数据信息,拿到消息模式编号,如果应用内存中有模式编号对应的模式信息,则根据模式信息解析消息,如果内存中没有模式编号对应的模式信息,则应用发起请求根据模式编号从模式注册服务Schema Registrar中获取模式信息,然后根据模式信息解析消息,并缓存该模式信息。
本发明通过模式信息作为消息头信息的一部分随消息一起发送,在消息传输时使用Apache Avro为消息传输格式,或者消息模式通过模式注册服务来实现消息模式变更通知,从而在上游生产者发往消息队列kafka中的消息在模式上有变动的情况下,下游消费者应用能够自动识别新消息的消息模式,并能根据不同消息的消息模式自动使用相应的解析方法解析消息,这样避免了由于上游消息模式变更导致下游应用异常的情况。
附图说明
图1所示为根据本发明的基于kafka的处理消息的方法的一个实施例的流程图。
图2所示为根据本发明的基于kafka的处理消息的方法的另一个实施例的流程图。
具体实施方式
这种基于kafka(kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。)的处理消息的方法,模式信息作为消息头信息的一部分随消息一起发送,在消息传输时使用Apache Avro为消息传输格式。
模式信息作为消息头信息的一部分随消息一起发送,这种方式可以确保每一条生产者生成的消息都带有消息模式随消息一起被发送到消息队列kafka,下游消费者应用在从kafka获取到消息时,同时也获取到了消息的模式信息,通过模式信息,下游应用就可以正确的解析消息,及时上游生产者生成的消息模式发生变化,下游消费者也能根据变化后的消息模式解析消息信息,确保了每一条消息都能够被正确的解析。为了实现这种方法,在消息传输时可以使用Apache Avro为消息传输格式,Apache Avro是一个数据序列化系统,有着诸多优良特性。Avro是一种非常节约空间的二进制序列化格式,Python等动态语言对它支持非常好,而且不需要生成代码。最重要的特性是它支持模式演进,这意味着在版本兼容的前提下,写程序和读程序可以用不同版本的模式来各自生产和消费数据。这就非常完美地把生产者和消费者解耦开了,生产者可以按需要迭代演进数据的模式,而不需要消费者亦步亦趋地跟着改变。
所有用Avro编码的消息都已经用有模式定义的消息头封装起来了,消息头包括消息UUID、加密细节、时间戳、消息编码所使用的模式信息等。这样下游消费者程序就可以动态地在解码时再获取模式并解析消息。
因此,通过该方法,在上游生产者发往消息队列kafka中的消息在模式上有变动的情况下,下游消费者应用能够自动识别新消息的消息模式,并能根据不同消息的消息模式自动使用相应的解析方法解析消息,这样避免了由于上游消息模式变更导致下游应用异常的情况。
另外,如图1所示,该方法包括以下步骤:
(1)生产者应用生成带消息模式的消息;
(2)消息队列kafka存储带消息模式的消息;
(3)消费者应用从kafka中获取带消息模式的消息并消费消息。
另外,该方法还包括步骤(4),如果生产者应用生成的消息对应的消息模式发生变更,消费者应用直接根据消息头获取到变更后的消息模式,并根据消息模式解析变更模式之后的消息。
另外,所述步骤(1)中,消息模式封装到消息头里面,消息头还包括消息UUID、加密细节、时间戳。
另外,所述步骤(2)中,kafka中存储的消息是带消息模式的消息。
另外,所述步骤(3)中,消费者应用从kafka中获取带消息模式的信息,先从消息头里面拿到消息模式,然后通过消息模式解析消息内容。
还提供了另一种基于kafka的处理消息的方法,通过消息模式注册服务来实现消息模式变更通知,对于上游生产者应用生成的消息在发往kafka之前先到模式注册服务Schema Registrar注册并生成对应的模式编号,而随消息一起传递的是从模式注册服务获取到的该消息模式对应的编号,当下游消费者应用通过kafka获取到消息时,首先解析消息元数据信息,拿到消息模式编号,如果应用内存中有模式编号对应的模式信息,则根据模式信息解析消息,如果内存中没有模式编号对应的模式信息,则应用发起请求根据模式编号从模式注册服务Schema Registrar中获取模式信息,然后根据模式信息解析消息,并缓存该模式信息。
因此,通过该方法,在上游生产者发往消息队列kafka中的消息在模式上有变动的情况下,下游消费者应用能够自动识别新消息的消息模式,并能根据不同消息的消息模式自动使用相应的解析方法解析消息,这样避免了由于上游消息模式变更导致下游应用异常的情况。
另外,如图2所示,该方法包括以下步骤:
(a)生产者应用生成消息并注册消息模式;
(b)消息队列kafka存储带消息模式编号的消息;
(c)消费者应用从kafka中获取带消息模式编号的信息并消费消息。
另外,该方法还包括步骤(d),如果生产者应用生成的消息对应的消息模式发生变更,则重新到消息模式注册服务Schema Registrar注册,消费者应用获取到消息新的模式编号,通过模式编号获取到信息的模式信息,通过新的模式信息解析消息内容。
另外,所述步骤(a)中,生产者应用生成带消息,并将消息模式注册到消息模式注册服务Schema Registrar,由模式注册服务生成一个消息模式对应的模式编号,并将这个模式编号封装到消息头里面,消息头还包括消息UUID、加密细节、时间戳,消息传输格式使用Avro。
本发明的有益效果如下:
1、消息消费者应用可以自动识别消息模式的变更,并能正确解析消息。
2、生产者应用生成的消息模式变更能够自动的传递到下游消费者应用。
3、消息模式的变更可以采用消息头和消息模式注册服务(Schema Registrar)传递。
以上所述,仅是本发明的较佳实施例,并非对本发明作任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属本发明技术方案的保护范围。
Claims (8)
1.一种基于kafka的处理消息的方法,其特征在于:模式信息作为消息头信息的一部分随消息一起发送,在消息传输时使用Apache Avro为消息传输格式;
该方法包括以下步骤:
(1)、生产者应用生成带消息模式的消息;
(2)、消息队列kafka存储带消息模式的消息;
(3)、消费者应用从kafka中获取带消息模式的消息并消费消息;
(4)、如果生产者应用生成的消息对应的消息模式发生变更,消费者应用直接根据消息头获取到变更后的消息模式,并根据消息模式解析变更模式之后的消息。
2.根据权利要求1所述的基于kafka的处理消息的方法,其特征在于:所述步骤(1)中,消息模式封装到消息头里面,消息头还包括消息UUID、加密细节、时间戳。
3.根据权利要求2所述的基于kafka的处理消息的方法,其特征在于:所述步骤(2)中,kafka中存储的消息是带消息模式的消息。
4.根据权利要求3所述的基于kafka的处理消息的方法,其特征在于:所述步骤(3)中,消费者应用从kafka中获取带消息模式的信息,先从消息头里面拿到消息模式,然后通过消息模式解析消息内容。
5.一种基于kafka的处理消息的方法,其特征在于:通过消息模式注册服务来实现消息模式变更通知,对于上游生产者应用生成的消息在发往kafka之前先到模式注册服务Schema Registrar注册并生成对应的模式编号,而随消息一起传递的是从模式注册服务获取到的该消息模式对应的编号,当下游消费者应用通过kafka获取到消息时,首先解析消息元数据信息,拿到消息模式编号,如果应用内存中有模式编号对应的模式信息,则根据模式信息解析消息,如果内存中没有模式编号对应的模式信息,则应用发起请求根据模式编号从模式注册服务Schema Registrar中获取模式信息,然后根据模式信息解析消息,并缓存该模式信息。
6.根据权利要求5所述的基于kafka的处理消息的方法,其特征在于:该方法包括以下步骤:
(a)生产者应用生成消息并注册消息模式;
(b)消息队列kafka存储带消息模式编号的消息;
(c)消费者应用从kafka中获取带消息模式编号的信息并消费消息。
7.根据权利要求6所述的基于kafka的处理消息的方法,其特征在于:该方法还包括步骤(d),如果生产者应用生成的消息对应的消息模式发生变更,则重新到消息模式注册服务Schema Registrar注册,消费者应用获取到消息新的模式编号,通过模式编号获取到信息的模式信息,通过新的模式信息解析消息内容。
8.根据权利要求7所述的基于kafka的处理消息的方法,其特征在于:所述步骤(a)中,生产者应用生成带消息,并将消息模式注册到消息模式注册服务Schema Registrar,由模式注册服务生成一个消息模式对应的模式编号,并将这个模式编号封装到消息头里面,消息头还包括消息UUID、加密细节、时间戳,消息传输格式使用Avro。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610887224.8A CN106487891B (zh) | 2016-10-11 | 2016-10-11 | 一种基于kafka的处理消息的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610887224.8A CN106487891B (zh) | 2016-10-11 | 2016-10-11 | 一种基于kafka的处理消息的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106487891A CN106487891A (zh) | 2017-03-08 |
CN106487891B true CN106487891B (zh) | 2019-05-21 |
Family
ID=58269778
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610887224.8A Active CN106487891B (zh) | 2016-10-11 | 2016-10-11 | 一种基于kafka的处理消息的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106487891B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109104446B (zh) * | 2017-06-20 | 2022-04-15 | 中兴通讯股份有限公司 | 一种消息保序方法、网络节点及存储介质 |
CN107194013B (zh) * | 2017-07-03 | 2019-10-29 | 杭州排列科技有限公司 | 基于分布式消息队列中间件的处理方法和处理系统 |
CN110120959B (zh) * | 2018-02-05 | 2023-04-07 | 北京京东尚科信息技术有限公司 | 大数据推送方法、装置、系统、设备及可读存储介质 |
CN109002484B (zh) * | 2018-06-25 | 2020-08-07 | 北京明朝万达科技股份有限公司 | 一种用于顺序消费数据的方法及系统 |
CN109783253B (zh) * | 2018-12-28 | 2023-02-14 | 南京唯实科技有限公司 | 基于kafka的分布式消息数据总线 |
CN111031135B (zh) * | 2019-12-17 | 2023-01-10 | 金瓜子科技发展(北京)有限公司 | 消息传送方法、装置及电子设备 |
CN112968911B (zh) * | 2021-03-31 | 2022-09-09 | 中国工商银行股份有限公司 | 数据广播方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101800630A (zh) * | 2009-02-06 | 2010-08-11 | 华为技术有限公司 | 数据包的处理方法及装置 |
CN103761141A (zh) * | 2013-12-13 | 2014-04-30 | 北京奇虎科技有限公司 | 一种实现消息队列的方法及装置 |
CN104092767A (zh) * | 2014-07-21 | 2014-10-08 | 北京邮电大学 | 一种增加消息队列模型的发布/订阅系统及其工作方法 |
CN105095365A (zh) * | 2015-06-26 | 2015-11-25 | 北京奇虎科技有限公司 | 一种信息流数据的处理方法和装置 |
CN105592151A (zh) * | 2015-12-18 | 2016-05-18 | 畅捷通信息技术股份有限公司 | 数据处理方法及数据处理装置 |
-
2016
- 2016-10-11 CN CN201610887224.8A patent/CN106487891B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101800630A (zh) * | 2009-02-06 | 2010-08-11 | 华为技术有限公司 | 数据包的处理方法及装置 |
CN103761141A (zh) * | 2013-12-13 | 2014-04-30 | 北京奇虎科技有限公司 | 一种实现消息队列的方法及装置 |
CN104092767A (zh) * | 2014-07-21 | 2014-10-08 | 北京邮电大学 | 一种增加消息队列模型的发布/订阅系统及其工作方法 |
CN105095365A (zh) * | 2015-06-26 | 2015-11-25 | 北京奇虎科技有限公司 | 一种信息流数据的处理方法和装置 |
CN105592151A (zh) * | 2015-12-18 | 2016-05-18 | 畅捷通信息技术股份有限公司 | 数据处理方法及数据处理装置 |
Non-Patent Citations (1)
Title |
---|
《基于Storm框架结构的分布式实时日志分析系统的设计研究》;赵阳等;《信息与电脑》;20160423(第6期);第69-70页 |
Also Published As
Publication number | Publication date |
---|---|
CN106487891A (zh) | 2017-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106487891B (zh) | 一种基于kafka的处理消息的方法 | |
CN111787066B (zh) | 一种基于大数据与ai的物联网数据平台 | |
US20230252324A1 (en) | Machine learning techniques for internet protocol address to domain name resolution systems | |
CN109690527B (zh) | 具有虚拟数据库的互联网云托管的自然语言交互式消息传送系统 | |
CN105814901B (zh) | 测量和监测到流媒体的曝光的方法和设备 | |
US9311286B2 (en) | Intelligent automatic expansion/contraction of abbreviations in text-based electronic communications | |
CN103733568B (zh) | 一种使用流处理对请求进行响应的方法和系统 | |
US20100115041A1 (en) | Creating a message readable by a plurality of heterogeneous recipients | |
US9489445B2 (en) | System and method for distributed categorization | |
Chardonnens et al. | Big data analytics on high Velocity streams: A case study | |
EP2352269B1 (en) | Service access method and system | |
CN112383533B (zh) | 报文格式转换方法及装置 | |
WO2019171328A1 (en) | Flexible and scalable artificial intelligence and analytics platform with advanced content analytics and data ingestion | |
WO2016095360A1 (zh) | 物联网本体模型处理方法及装置 | |
US10754830B2 (en) | Activity information schema discovery and schema change detection and notification | |
CN105227367A (zh) | 一种低延迟的告警解析处理方法 | |
AU2015362076A1 (en) | Notifications on mobile devices | |
KR101475439B1 (ko) | 사용자에게 최적화된 관심 정보를 제공하기 위한 시스템 및 방법 | |
Bellini et al. | Managing Complexity of Data Models and Performance in Broker-Based Internet/Web of Things Architectures | |
US20160352797A1 (en) | Coordinating metadata | |
Antunes et al. | Semantic-based publish/subscribe for M2M | |
CN116910144A (zh) | 算力网络资源中心、算力服务系统以及数据处理方法 | |
CN112084245B (zh) | 基于微服务架构的数据管理方法、装置、设备及存储介质 | |
Konstantinou et al. | A context-aware middleware for real-time semantic enrichment of distributed multimedia metadata | |
Schwitter et al. | Going Digital: Web data collection using Twitter as an example |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | 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: 20220425 Address after: 100000 room 116, building 3, Shuangqiao (Shuangqiao dairy factory), Chaoyang District, Beijing Patentee after: Beijing Xiaoxiang innovation Artificial Intelligence Technology Co.,Ltd. Address before: 100085 901, 9th floor, building 5, yard 1, Shangdi East Road, Haidian District, Beijing Patentee before: BEIJING GEO POLYMERIZATION TECHNOLOGY Co.,Ltd. |
|
TR01 | Transfer of patent right |