一种基于kafka的消息处理系统及处理方法
【专利说明】一种基于kafka的消息处理系统及处理方法
[0001]
技术领域
[0002]本发明具体涉及一种基于kafka的消息处理系统及处理方法,属于消息处理技术领域。
[0003]
【背景技术】
[0004]Kafka是由Linkedin开发的一个分布式的消息队列系统(Message Queue)。
[0005]kafka开发的主要目标是构建一个用来处理海量日志,用户行为和网站运营统计等的数据处理框架。在结合了数据挖掘,行为分析,运营监控等需求的情况下,需要能够满足各种实时在线和批量离线处理应用场合对低延迟和批量吞吐性能的要求。从需求的根本上来说,高吞吐率是第一要求,其次是实时性和持久性。
[0006]kafka的集群有多个Broker服务器组成,每个类型的消息被定义为topic,同一topic内部的消息按照一定的key和算法被分区(partit1n)存储在不同的Broker上,消息生产者producer和消费者consumer可以在多个Broker上生产或消费topic。
[0007]在大并发消息处理系统中,一般使用kafka的生产者-消费者模式来异步处理请求,达到消除请求高峰的目的,提高系统稳定性和吞吐量。对于一些需要处理大量消息的系统如订单系统,由于经常出现重复消息并且处理每条消息需要消耗较多的系统资源(譬如多次数据库查询、访问文件系统或网络调用等),将会造成消费者端数据库访问量大量增加,消息处理能力下降,系统稳定性及服务有效性下降。
[0008]
【发明内容】
[0009]因此,本发明针对现有技术中订单系统经常出现重复消息并且处理每条消息需要消耗较多的系统资源,将会造成消费者端数据库访问量大量增加,消息处理能力下降,系统稳定性及服务有效性下降的问题,提供一种基于kafka的消息处理系统,包括由一个或多个消息生产者组成的消息生产者集群、kafka集群、由一个或多个消费者组成的消费者集群,kafka集群由一个或多个服务器组成,每个服务器按照一定的主题存储消息,每个消息生产者向一个或多个服务器提交消息,每个消费者向一个或多个服务器订阅消息,其特征在于,所述消费者包括过滤器模块、本地消息队列缓存模块、业务处理模块,所述过滤器模块为不允许重复数据的容器,用于接收消费者从服务器订阅的消息,所述本地消息队列缓存模块用于缓存经过滤器模块过滤的消息,所述业务处理模块用于从消息队列缓存模块获得消息,完成对该消息的业务处理。
[0010]一种利用上述系统实现的基于kafka的消息处理方法,其特征在于,所述方法为:消息生产者集群中的消息生产者向kafka集群提交消息,kafka集群将消息按照主题类型存储在相应的服务器中,服务器向订阅该主题类型的消费者发送该消息,接收消息的消费者的过滤器模块接收该消息并对该消息进行过滤处理,当该消息不在过滤器模块内时将该消息添加到本地消息队列缓存模块,本地消息队列缓存模块将该消息提供给业务处理模块,业务处理模块完成对该消息的业务处理。
[0011]所述方法中本地消息队列缓存模块设置消息队列最大值。最大值的设置需要根据期望的过滤效果和消息处理速度调整。队列大小主要影响过滤效果和内存数据丢失(如重启、宕机)时,消息丢失的多少。
[0012]所述方法中业务处理模块完成对该消息的业务处理后提示过滤器模块删除该消息。这样可以保证过滤器不会过大,并且新的消息可以添加到过滤器中。
[0013]本发明的有益效果在于:采用本发明的基于kafka的消息处理系统及处理方法,在具备kafka的高吞吐率处理大量消息的能力的同时,业务处理模块不直接从Kafka取消息,而是从本地消息队列缓存模块中取消息,本地消息队列缓存模块中的消息是经过过滤器模块过滤的,重复的消息被去除,一条消息只处理一次,大大减少了对消费者端数据库的访问次数,消息处理能力上升,系统稳定性及服务有效性提高。
[0014]
【附图说明】
[0015]图1为本发明基于kafka的消息处理系统的结构示意图。
[0016]
【具体实施方式】
[0017]下面结合附图对本发明的【具体实施方式】进行说明:
如图1所示,一种基于kafka的消息处理系统,包括由3个消息生产者组成的消息生产者集群、kafka集群、由2个消费者组成的消费者集群,kafka集群由3服务器组成,每个服务器按照一定的主题存储消息,主题是一定的key和算法,每个消息生产者向一个或多个服务器提交消息,每个消费者向一个或多个服务器订阅消息,消费者包括过滤器模块、本地消息队列缓存模块、业务处理模块,过滤器模块为不允许重复数据的容器,用于接收消费者从服务器订阅的消息,本地消息队列缓存模块用于缓存经过滤器模块过滤的消息,业务处理模块用于从消息队列缓存模块获得消息,完成对该消息的业务处理。
[0018]利用上述基于kafka的消息处理系统实现的消息处理方法,具体应用于订单系统中,消息生产者集群中的消息生产者2即用户向kafka集群提交消息,该消息为用户ID,kafka集群将用户ID按照主题类型存储在相应的服务器I中,服务器I向订阅该主题类型的消费者2发送该消息,接收用户ID的消费者2的过滤器模块接收用户ID并对用户ID进行过滤处理,当用户ID在过滤器模块内时将其过滤掉,当用户ID不在过滤器模块内时将该消息添加到本地消息队列缓存模块,本地消息队列缓存模块将用户ID提供给业务处理模块,业务处理模块完成对用户ID的业务处理。
[0019]作为优选的实施方式,本地消息队列缓存模块设置消息队列最大值。最大值的设置需要根据期望的过滤效果和消息处理速度调整。队列大小主要影响过滤效果和内存数据丢失(如重启、宕机)时,消息丢失的多少。
[0020]作为优选的实施方式,业务处理模块完成对用户ID的业务处理后提示过滤器模块删除用户ID。这样可以保证过滤器不会过大,并且新的消息可以添加到过滤器中。
[0021]如果采用现有技术的消息处理方法,一个用户可能有多个订单,每个订单还可能经过多次修改,消费者端需要多次针对用户ID建立缓存,加大了系统负担,而使用本方法只需对用户ID建立一次缓存,即可保证业务处理完成之前用户ID不会重复。
[0022]主要Java语言算法结构如下:
初始化消费者
功能:初始化本地消息队列大小,生成Kafka客户端,并创建线程接收消息。
[0023]填充消息队列
功能:通过过滤器向本地消息队列添加消息,完成过滤功能。
[0024]获取消息的方式
业务处理模块不直接从Kafka取消息,而是本地消息队列中取消息,获取成功的同时从过滤器模块中删除相应的消息,这样可以保证过滤器模块不会过大,并且新的消息可以添加到过滤器模块中。
[0025]过滤器模块和本地消息队列的大小设置
不用设置过滤器容量的初始值和最大值。本地消息队列需要设置最大值,最大值的设置需要根据期望的过滤效果和消息处理速度调整。队列大小主要影响过滤效果和内存数据丢失(如重启、宕机)时,消息丢失的多少。
[0026]at-most-once 的提交模式
使用Kafka客户端的at-most-once的提交模式,需要保证客户端配置参数auto,commit, enable 的值为 true。
[0027]过滤器模块和本地消息队列的实现
本地消息队列采用支持并发处理的BlockingQueue (需要JDK1.5以上支持)。过滤器模块采用不允许重复着的容器即可,如Set。因为可能存在多线程操作的情况,故采用支持并发操作的ConcurrentSkipListSet (需要JDK1.5以上支持)。从Kafka服务器获取到的消息先存入ConcurrentSkipListSet中,依靠Set容器不允许值重复的特性完成过滤功能。
[0028]以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
【主权项】
1.一种基于kafka的消息处理系统,包括由一个或多个消息生产者组成的消息生产者集群、kafka集群、由一个或多个消费者组成的消费者集群,kafka集群由一个或多个服务器组成,每个服务器按照一定的主题存储消息,每个消息生产者向一个或多个服务器提交消息,每个消费者向一个或多个服务器订阅消息,其特征在于,所述消费者包括过滤器模块、本地消息队列缓存模块、业务处理模块,所述过滤器模块为不允许重复数据的容器,用于接收消费者从服务器订阅的消息,所述本地消息队列缓存模块用于缓存经过滤器模块过滤的消息,所述业务处理模块用于从消息队列缓存模块获得消息,完成对该消息的业务处理。
2.一种利用权利要求1所述系统实现的基于kafka的消息处理方法,其特征在于,所述方法为:消息生产者集群中的消息生产者向kafka集群提交消息,kafka集群将消息按照主题类型存储在相应的服务器中,服务器向订阅该主题类型的消费者发送该消息,接收消息的消费者的过滤器模块接收该消息并对该消息进行过滤处理,当该消息不在过滤器模块内时将该消息添加到本地消息队列缓存模块,本地消息队列缓存模块将该消息提供给业务处理模块,业务处理模块完成对该消息的业务处理。
3.如权利要求2所述的基于kafka的消息处理方法,其特征在于,所述方法中本地消息队列缓存模块设置消息队列最大值。
4.如权利要求2所述的基于kafka的消息处理方法,其特征在于,所述方法中业务处理模块完成对该消息的业务处理后提示过滤器模块删除该消息。
【专利摘要】本发明公开了一种基于kafka的消息处理系统及处理方法,属于消息处理技术领域。为解决现有技术中订单系统经常出现重复消息并且处理每条消息需要消耗较多的系统资源,将会造成消费者端数据库访问量大量增加,消息处理能力下降,系统稳定性及服务有效性下降的问题,提供一种基于kafka的消息处理系统,包括由一个或多个消息生产者组成的消息生产者集群、kafka集群、由一个或多个消费者组成的消费者集群,kafka集群由一个或多个服务器组成,消费者包括过滤器模块、本地消息队列缓存模块、业务处理模块,以及由上述系统实现的消息处理方法,用于需要处理大量消息的系统尤其是订单系统的消息处理。
【IPC分类】H04L29-08, H04L12-58
【公开号】CN104754036
【申请号】CN201510099439
【发明人】文德民, 潘柏宇, 卢述奇
【申请人】合一信息技术(北京)有限公司
【公开日】2015年7月1日
【申请日】2015年3月6日