一种消息处理装置和方法制造方法及图纸

技术编号:15624361 阅读:110 留言:0更新日期:2017-06-14 05:56
本发明专利技术公开了一种消息处理装置和方法,包括读取模块、备份模块、上报模块和处理模块;读取模块,用于读取消费者从服务器订阅的消息;复制读取的消息并存储至备份模块,并通知上报模块;上报模块,用于收到读取模块通知,上报偏移量信息,并通知处理模块;处理模块,用于收到上报模块的通知,读取备份模块中未处理的消息,创建多个子线程,将备份模块中未处理的消息分派到各个子线程中;通过各个子线程对分派的消息进行处理,并将处理结果存储至备份模块中。本发明专利技术还包括检测模块,用于每次消费者重启时,检测备份模块中的各条消息是否已经处理。本发明专利技术能够解决Kafka系统中消费者重复消费数据、重复提交或覆盖提交Offset的问题。

【技术实现步骤摘要】
一种消息处理装置和方法
本专利技术涉及计算机数据处理的
,特别涉及一种消息处理装置和方法。
技术介绍
Kafka是一种高吞吐量的分布式发布订阅消息系统。如图1所示,现有的基于Kafka的消息处理系统,包括由多个消息生产者(Producer)组成的消息生产者集群、由多个服务器(Broker)组成的Kafka集群、由多个消费者(Consumer)组成的消费者集群,每个消息生产者向一个或多个Broker服务器推送(push)消息,每个Broker服务器按照一定的主题(Topic)存储消息,每个消费者向一个或多个Broker服务器拉取(pull)订阅的消息,通过Zookeeper(管理员)节点管理Broker服务器与消费者的动态加入与离开。同一主题内部的消息按照一定的key和算法被分区(Partition)存储在不同的Broker服务器上,针对一个主题,Kafka消息日志中采用偏移量(Offset)信息来标注已读取的消息的位置,消费者通过Offset信息,来判断下次读取的消息在消息日志里的起始位置。另外,在Kafka系统中,每个主题创建时,需要固定该主题的分区数。在某一时刻,一个分区只能被一个消费者线程来消费,这就会限制消费速率。为了提高吞吐量,消费者需要采用多线程处理。采用多线程处理时,每个消费者通常由一个主线程读取一批消息并执行分组操作,然后,由多个子线程处理相应的分组消息,各个子线程处理完相应的分组消息后,分别上报偏移量信息。但是,消费者可能存在宕机、断电、程序异常等等造成处理消息失败的情况,此时,需要重启消费者应用,重新从Broker服务器读取消息,这样,不仅会产生重复消费数据的问题,还会产生子线程重复提交或覆盖提交Offset信息的问题。
技术实现思路
为了解决上述技术问题,本专利技术提供了一种消息处理装置和方法,能够提高Kafka系统中,消费者消息处理的准确性,提高消费者客户端的吞吐量。为了达到本专利技术目的,本专利技术实施例的技术方案是这样实现的:本专利技术实施例提供了一种消息处理装置,包括读取模块、备份模块、上报模块和处理模块;其中,读取模块,用于读取消费者从服务器订阅的消息;复制读取的消息并存储至备份模块,并通知上报模块;备份模块,用于存储读取模块读取的消息;上报模块,用于接收到来自读取模块的通知,上报偏移量信息并通知处理模块;处理模块,其中设置有多个子线程;用于接收到来自上报模块的通知,读取备份模块中未处理的消息,将未处理的消息分派到各个子线程中;通过各个子线程处理完分派的消息,将已处理的消息从备份模块中删除或在备份模块中为已处理的消息设置已处理标识。进一步地,还包括检测模块,用于检测到消费者重启时,检查所述备份模块中是否有未处理的消息;如果有未处理的消息,将未处理的消息提交给所述处理模块进行处理。进一步地,所述备份模块通过日志文件或数据库存储读取模块读取的消息。进一步地,所述备份模块预先设置其存储容量最大值。进一步地,所述读取模块预先设置每次读取的消息数量和每条消息的最大字节数。本专利技术实施例提供了一种消息处理方法,包括如下步骤:读取消费者从服务器订阅的消息;复制并存储读取的消息;上报偏移量信息;将存储的消息中未处理的消息分配给预先设置的多个子线程进行处理,并删除或标识出已处理的消息。进一步地,如果消费者重启,检测所述存储的消息中是否有未处理的信息,如果有,对未处理的消息进行处理。进一步地,预先设置每次读取的消息数量和每条消息的最大字节数。进一步地,通过日志文件或数据库存储所述读取的消息。进一步地,预先设置所述存储的消息的存储容量最大值。本专利技术提供的消息处理装置和方法,在消费者读取完消息后,先将所读取的消息复制到备份消息中,然后向Zookeeper节点上报偏移量信息;然后再创建多个子线程,并将所读取的消息分派到各个子线程中,由各个子线程处理所读取的消息;子线程处理完消息后,在备份消息中记录处理结果。本专利技术在消费者宕机、断电、程序异常等造成消费者处理消息失败的情况下,由于主线程在各子线程处理消息之前,已经向Zookeeper节点上报偏移量信息,该消费者重启后或者新的消费者不会读取该消费者已经读取的消息,且子线程不负责上报偏移量信息,因此不会产生消费者重复消费数据、子线程重复提交Offset信息或覆盖提交Offset信息的问题;另外通过多线程处理,提高了消费者客户端的吞吐量。进一步地,每次消费者重启,都会检测备份消息中是否有未处理的信息,如果有未处理的消息,对未处理的消息进行处理。由于消费者每次重启后,都会检测备份消息中的消息处理情况,因此不会造成有消息永远没有被处理到的情况,提高了消费者消息处理的精准度。附图说明此处所说明的附图用来提供对本专利技术的进一步理解,构成本申请的一部分,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:图1为现有的基于Kafka的消息处理系统的结构示意图;图2为本专利技术的消息处理装置的第一实施例的结构示意图;图3为本专利技术的消息处理装置的第二实施例的结构示意图;图4为本专利技术的一种消息处理方法的流程示意图。具体实施方式下面将结合附图及实施例对本专利技术的技术方案进行更详细的说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。如图2所示,根据本专利技术的第一种基于Kafka的消息处理装置,包括读取模块、备份模块、上报模块和处理模块;其中,读取模块,用于读取消费者从服务器订阅的消息;复制读取的消息并存储至备份模块,并通知上报模块;备份模块,用于存储读取模块读取的消息;上报模块,用于接收到来自读取模块的通知,向Zookeeper节点上报偏移量信息并通知处理模块;处理模块,其中设置有多个子线程;用于接收到来自上报模块的通知,读取备份模块中未处理的消息,将备份模块中未处理的消息分派到各个子线程中;通过各个子线程对分派的消息进行处理,并将已处理的消息从备份模块中删除,或在备份模块中为已处理的消息设置已处理标识。可选地,备份模块可以通过日志文件或数据库存储读取模块读取的消息。可选地,读取模块每次读取的消息数量和每条消息的最大字节数,可以预先设置。作为优选的实施方式,备份模块可以预先设置其存储容量最大值。当备份模块当前存储的消息容量已经达到存储容量最大值时,要存储的新的消息会覆盖掉当前消息中时间最早且已经处理的消息。备份模块的存储容量最大值的大小,主要影响消费者重启、宕机或程序异常时,消息丢失的多少。本专利技术的基于Kafka的消息处理装置,在消费者宕机、断电、程序异常等造成处理消息失败的情况下,由于该消费者的主线程在各子线程处理消息之前,已经向Zookeeper节点上报偏移量信息,该消费者重启后或者新的消费者不会读取该消费者已经读取的消息,且子线程不负责上报偏移量信息,因此不会产生消费者重复消费数据、子线程重复提交Offset或覆盖提交Offset的问题;另外通过多线程处理,提高了消费者客户端的吞吐量。进一步地,如图3所示,根据本专利技术的第二种基于Kafka的消息处理装置,包括读取模块、备份模块、上报模块、处理模块和检测模块;其中,读取模块,用于读取消费者从服务器订阅的消息;复制读取的消息并存储至备份模块,并通知上报模块;备份模块,用于存储读取模块本文档来自技高网
...
一种消息处理装置和方法

【技术保护点】
一种消息处理装置,其特征在于:包括读取模块、备份模块、上报模块和处理模块;其中,读取模块,用于读取消费者从服务器订阅的消息;复制读取的消息并存储至备份模块,并通知上报模块;备份模块,用于存储读取模块读取的消息;上报模块,用于接收到来自读取模块的通知,上报偏移量信息并通知处理模块;处理模块,其中设置有多个子线程;用于接收到来自上报模块的通知,读取备份模块中未处理的消息,将未处理的消息分派到各个子线程中;通过各个子线程处理完分派的消息,将已处理的消息从备份模块中删除或在备份模块中为已处理的消息设置已处理标识。

【技术特征摘要】
1.一种消息处理装置,其特征在于:包括读取模块、备份模块、上报模块和处理模块;其中,读取模块,用于读取消费者从服务器订阅的消息;复制读取的消息并存储至备份模块,并通知上报模块;备份模块,用于存储读取模块读取的消息;上报模块,用于接收到来自读取模块的通知,上报偏移量信息并通知处理模块;处理模块,其中设置有多个子线程;用于接收到来自上报模块的通知,读取备份模块中未处理的消息,将未处理的消息分派到各个子线程中;通过各个子线程处理完分派的消息,将已处理的消息从备份模块中删除或在备份模块中为已处理的消息设置已处理标识。2.根据权利要求1所述的消息处理装置,其特征在于:还包括检测模块,检测模块,用于检测到消费者重启时,检查所述备份模块中是否有未处理的消息;如果有未处理的消息,将未处理的消息提交给所述处理模块进行处理。3.根据权利要求1或2所述的消息处理装置,其特征在于:所述备份模块通过日志文件或数据库存储读取模块读取的消息。4.根据权...

【专利技术属性】
技术研发人员:陈金添
申请(专利权)人:努比亚技术有限公司
类型:发明
国别省市:广东,44

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

1