一种针对Kafka分区的数据动态均衡方法、装置及存储介质与流程

文档序号:20767849发布日期:2020-05-15 19:13阅读:303来源:国知局
一种针对Kafka分区的数据动态均衡方法、装置及存储介质与流程

本发明涉及消息分发技术,尤其涉及一种针对kafka分区的数据动态均衡方法、装置及计算机可读存储介质。



背景技术:

kafka是目前主流的消息队列中间件,在实际使用中,一个kafka主题(kafkatopic)中的分区(partition)数量对消息分发、处理的性能往往会有关键性的影响。根据kafka现有机制,可以有多个消费者组成一个消费者组(consumergroup),但kafka主题中的每个分区内的数据只能由同一个消费者组内的一个消费者(consumer)来消费处理。

受限于上述kafka机制,一个消费者组内最多能有一个消费者去消费具有大数据量的分区。这样,很容易导致部分分区内的数据被大量积累,给业务系统带来不小的数据负载,直接影响到实际的业务需求。



技术实现要素:

本发明实施例为了解决现有kafka机制的局限性,创造性地提出了一种针对kafka分区的数据动态均衡方法、装置及计算机可读存储介质。

根据本发明第一方面,提供了一种针对kafka分区的数据动态均衡方法,该方法包括:针对kafka分区,配置n个子分区和所述n个子分区中每一个子分区的数据容量上限及数据容量下限,n的取值为大于等于2的正整数;当数据需要写入所述kafka分区时,按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区,使得写入数据的每一个子分区由一个消费者组内的一个消费者进行数据消费。

根据本发明一实施方式,所述按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区,包括:根据子分区排序将数据按顺序写入到所述n个字分区中的部分或全部子分区。

根据本发明一实施方式,所述按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区,包括:将数据按照hash结构写入到所述n个子分区中的部分或全部子分区。

根据本发明一实施方式,在按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区的过程中,所述方法还包括:监控写入到所述n个子分区中每一个子分区的数据量;若写入到所述n个字分区中每一个子分区的数据量均超过配置的数据容量上限,则在所述kafka分区内扩展新的子分区。

根据本发明一实施方式,所述按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区的过程中,所述方法还包括:监控写入到所述n个子分区中每一个子分区的数据量;若所述n个子分区中第一子分区的数据量小于配置的数据容量下限,则标记所述第一子分区为准备下线状态;当所述第一子分区内数据消费完成后,删除所述第一子分区。

根据本发明第二方面,还提供了一种针对kafka分区的数据动态均衡装置,该装置包括:配置模块,用于针对kafka分区,配置n个子分区和所述n个子分区中每一个子分区的数据容量上限及数据容量下限,n的取值为大于等于2的正整数;数据写入模块,用于当数据需要写入所述kafka分区时,按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区,使得写入数据的每一个子分区由一个消费者组内的一个消费者进行数据消费。

根据本发明一实施方式,所述数据写入模块,具体用于根据子分区排序将数据按顺序写入到所述n个字分区中的部分或全部子分区。

根据本发明一实施方式,所述数据写入模块,具体用于将数据按照hash结构写入到所述n个子分区中的部分或全部子分区。

根据本发明一实施方式,所述装置还包括监控模块,其中,所述监控模块,用于在通过所述数据写入模块按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区的过程中,监控写入到所述n个子分区中每一个子分区的数据量;所述配置模块,还用于若写入到所述n个字分区中每一个子分区的数据量均超过配置的数据容量上限,则在所述kafka分区内扩展新的子分区。

根据本发明一实施方式,所述装置还包括监控模块,其中,所述监控模块,用于在通过所述数据写入模块按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区的过程中,监控写入到所述n个子分区中每一个子分区的数据量;所述配置模块,还用于若所述n个子分区中第一子分区的数据量小于配置的数据容量下限,则标记所述第一子分区为准备下线状态;当所述第一子分区内数据消费完成后,删除所述第一子分区。

根据本发明第三方面,又提供一种计算机可读存储介质,所述存储介质包括一组计算机可执行指令,当所述指令被执行时用于执行上述任一针对kafka分区的数据动态均衡方法。

本发明实施例所述针对kafka分区的数据动态均衡方法、装置及存储介质,首先针对kafka分区,配置n个子分区和所述n个子分区中每一个子分区的数据容量上限及数据容量下限,n的取值为大于等于2的正整数;之后,当数据需要写入所述kafka分区时,按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区,使得写入数据的每一个子分区由一个消费者组内的一个消费者进行数据消费。如此,本发明通过对kafka分区进行子分区配置,实现了kafka数据的动态分片与均衡,从而保证后续kafka数据消费者合理的数据处理压力,为kafka提供了动态调整数据处理资源的能力。

需要理解的是,本发明的教导并不需要实现上面所述的全部有益效果,而是特定的技术方案可以实现特定的技术效果,并且本发明的其他实施方式还能够实现上面未提到的有益效果。

附图说明

通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:

在附图中,相同或对应的标号表示相同或对应的部分。

图1示出了相关技术中kafka集群的数据分发示意图;

图2示出了本发明实施例针对kafka分区的数据动态均衡方法的实现流程示意图一;

图3示出了本发明实施例针对kafka分区的数据动态均衡方法的实现流程示意图二;

图4示出了本发明实施例针对kafka分区的数据动态均衡方法的实现流程示意图三;

图5示出了本发明一应用示例针对kafka分区的数据动态均衡方法的具体实现流程示意图;

图6示出了本发明实施例针对kafka分区的数据动态均衡装置的组成结构示意图。

具体实施方式

下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为使本发明更加透彻和完整,并能够将本发明的范围完整地传达给本领域的技术人员。

下面结合附图和具体实施例对本发明的技术方案进一步详细阐述。

图1示出了相关技术中kafka集群的数据分发示意图。

参考图1,相关技术中kafka集群(kafka)包括两个kafka主题,如主题服务1(server1)和主题服务2(server2)。其中,主题服务1包括分区p0和p3,主题服务2包括分区p1和p2。

根据kafka现有机制,可以有多个消费者组成一个消费者组,但kafka主题中的每个分区内的数据只能由同一个消费者组内的一个消费者来消费处理。因此,在数据分发处理过程中,如图1所示,分区p0、p3的数据可以分别供消费者组b(consumergroupb)中的消费者c3和c4消费处理,也可以分别供消费者组a(consumergroupa)中的消费者c1和c2消费处理;同样的,分区p1、p2的数据可以分别供消费者组b(consumergroupb)中的消费者c5和c6消费处理,也可以分别供消费者组a(consumergroupa)中的消费者c1和c2消费处理。很显然,现有kafka机制当kafka分区数量配置,或者数据分发策略不合理,一方面在大数据量情况下,分区数量过少;另一方面数据分发有倾斜,一些分区分到了远比其他分区更多的数据。这样,很容易导致部分分区内的数据被大量积累,给业务系统带来不小的数据负载,直接影响到实际的业务需求。

图2示出了本发明实施例针对kafka分区的数据动态均衡方法的实现流程示意图一。

为了解决现有kafka机制存在的问题,参考图2,本发明实施例针对kafka分区的数据动态均衡方法包括:操作201,针对kafka分区,配置n个子分区和所述n个子分区中每一个子分区的数据容量上限及数据容量下限;操作202,当数据需要写入所述kafka分区时,按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区。

在操作201,针对每一个kafka分区通过增加子分区(sub-partition)的方式进行扩容。具体地,一个kafka分区配置1~n个子分区,同时配置每个子分区的数据容量上限及数据容量下限。其中,n的取值为大于等于2的正整数。当然,n的具体取值可以根据数据分发需求不断动态调整。

在操作202,当针对kafka分区,配置1~n个子分区之后,生产者(producer)数据不再写入分区,而是直接写入子分区内。具体地,按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区,使得写入数据的每一个子分区由一个消费者组内的一个消费者进行数据消费。其中,确定的写入策略可以为顺序写入,即根据子分区排序将数据按顺序写入到所述n个字分区中的部分或全部子分区;确定的写入策略也可以为hash写入,即将数据按照hash结构写入到所述n个子分区中的部分或全部子分区。在实际应用中,具体的写入策略可以根据需要进行任意选择,这里不作具体限定。

这样,通过操作201~202,消费者可以根据子分区数量的动态调整,从而实现数据消费能力的动态化,确保数据处理的性能。

本发明实施例针对kafka分区的数据动态均衡方法,首先针对kafka分区,配置n个子分区和所述n个子分区中每一个子分区的数据容量上限及数据容量下限,n的取值为大于等于2的正整数;之后,当数据需要写入所述kafka分区时,按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区,使得写入数据的每一个子分区由一个消费者组内的一个消费者进行数据消费。如此,本发明通过对kafka分区进行子分区配置,实现了kafka数据的动态分片与均衡,从而保证后续kafka数据消费者合理的数据处理压力,为kafka提供了动态调整数据处理资源的能力。

图3示出了本发明实施例针对kafka分区的数据动态均衡方法的实现流程示意图二。

参考图3,本发明实施例针对kafka分区的数据动态均衡方法包括:操作301,针对kafka分区,配置n个子分区和所述n个子分区中每一个子分区的数据容量上限及数据容量下限;操作302,当数据需要写入所述kafka分区时,按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区;操作303,监控写入到所述n个子分区中每一个子分区的数据量;操作304,若写入到所述n个字分区中每一个子分区的数据量均超过配置的数据容量上限,则在所述kafka分区内扩展新的子分区。

其中,操作301和302的具体实现过程与图2所示实施例中操作201和202的具体实现过程相类似,这里不再赘述。

在操作303~304,参考图5,监控各子分区内的数据量,如果数据量超过配置的数据容量上限,则当前分区内自动扩展新的子分区。这样,消费者可以根据子分区数量的动态调整,从而实现数据消费能力的动态化,确保数据处理的性能。

图4示出了本发明实施例针对kafka分区的数据动态均衡方法的实现流程示意图三。

参考图4,本发明实施例针对kafka分区的数据动态均衡方法包括:操作401,针对kafka分区,配置n个子分区和所述n个子分区中每一个子分区的数据容量上限及数据容量下限;操作402,当数据需要写入所述kafka分区时,按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区;操作403,监控写入到所述n个子分区中每一个子分区的数据量;操作404,若所述n个子分区中第一子分区的数据量小于配置的数据容量下限,则标记所述第一子分区为准备下线状态;操作405,当所述第一子分区内数据消费完成后,删除所述第一子分区。

其中,操作401和402的具体实现过程与图2所示实施例中操作201和202的具体实现过程相类似,这里不再赘述。

在操作403~405,参考图5,监控各子分区内的数据量,如果子分区内的数据量小于配置的容量下限,标记该子分区为“准备下线”状态,后续数据不再写入该子分区,等子分区内数据消费完成后,则删除该子分区,以关闭该子分区。这样,能够最大化利用分区,从而实现数据消费能力的动态化,确保数据处理的性能。

如此,本发明通过对kafka分区进行子分区配置,实现了kafka数据的动态分片与均衡,从而保证后续kafka数据消费者合理的数据处理压力,为kafka提供了动态调整数据处理资源的能力。

同理,基于上文所述针对kafka分区的数据动态均衡方法,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有程序,当所述程序被处理器执行时,使得所述处理器至少执行如下所述的操作步骤:操作201,针对kafka分区,配置n个子分区和所述n个子分区中每一个子分区的数据容量上限及数据容量下限;操作202,当数据需要写入所述kafka分区时,按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区。

进一步地,基于上文所述针对kafka分区的数据动态均衡方法,本发明实施例还提供一种针对kafka分区的数据动态均衡装置,参考图6,该装置60包括:配置模块601,用于针对kafka分区,配置n个子分区和所述n个子分区中每一个子分区的数据容量上限及数据容量下限,n的取值为大于等于2的正整数;数据写入模块602,用于当数据需要写入所述kafka分区时,按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区,使得写入数据的每一个子分区由一个消费者组内的一个消费者进行数据消费。

根据本发明一实施方式,数据写入模块602,具体用于根据子分区排序将数据按顺序写入到所述n个字分区中的部分或全部子分区。

根据本发明一实施方式,数据写入模块602,具体用于将数据按照hash结构写入到所述n个子分区中的部分或全部子分区。

根据本发明一实施方式,如图6所示,该装置60还包括监控模块603,其中,监控模块603,用于在通过所述数据写入模块按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区的过程中,监控写入到所述n个子分区中每一个子分区的数据量;配置模块601,还用于若写入到所述n个字分区中每一个子分区的数据量均超过配置的数据容量上限,则在所述kafka分区内扩展新的子分区。

根据本发明一实施方式,如图6所示,该装置60还包括监控模块603,其中,监控模块603,用于在通过所述数据写入模块按照确定的写入策略将数据写入到所述n个子分区中的部分或全部子分区的过程中,监控写入到所述n个子分区中每一个子分区的数据量;配置模块601,还用于若所述n个子分区中第一子分区的数据量小于配置的数据容量下限,则标记所述第一子分区为准备下线状态;当所述第一子分区内数据消费完成后,删除所述第一子分区。

这里需要指出的是:以上对针对kafka分区的数据动态均衡装置实施例的描述,与前述图2至5所示的方法实施例的描述是类似的,具有同前述图2至5所示的方法实施例相似的有益效果,因此不做赘述。对于本发明kafka分区的数据动态均衡装置实施例中未披露的技术细节,请参照本发明前述图2至5所示的方法实施例的描述而理解,为节约篇幅,因此不再赘述。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。

上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。

另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(readonlymemory,rom)、磁碟或者光盘等各种可以存储程序代码的介质。

或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、rom、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

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