一种基于kafka的处理消息的方法与流程

文档序号:12182997阅读:2229来源:国知局
一种基于kafka的处理消息的方法与流程

本发明涉及大数据处理和实时计算的技术领域,尤其涉及一种基于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)传递。

以上所述,仅是本发明的较佳实施例,并非对本发明作任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属本发明技术方案的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1