CN106095589B - 一种分配分区的方法、装置及系统 - Google Patents
一种分配分区的方法、装置及系统 Download PDFInfo
- Publication number
- CN106095589B CN106095589B CN201610506839.1A CN201610506839A CN106095589B CN 106095589 B CN106095589 B CN 106095589B CN 201610506839 A CN201610506839 A CN 201610506839A CN 106095589 B CN106095589 B CN 106095589B
- Authority
- CN
- China
- Prior art keywords
- subregion
- task
- target
- partition
- corresponding relationship
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
Abstract
本发明提供了一种分配分区的方法、装置及系统,该方法包括:根据确定的当前的不同任务与不同分区的对应关系,对于获取到的包括消息的目标任务:当存在目标任务对应的目标分区时,将消息发送给该目标分区;当不存在该目标分区但存在空闲分区时,将消息发送给任一空闲分区,并更新所述对应关系;当不存在该目标分区且不存在空闲分区时,将消息发送给具有目标偏移量的分区,并更新所述对应关系。由于在获取到每一个任务时均可以根据不同情况将任务发送给一个分区,故可以使多个任务同时占用全部分区。因此,本方案能够提高任务并发量。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种分配分区的方法、装置及系统。
背景技术
Kafka集群通常包括至少一个处理器,且每一个处理器上可以对应有至少一个分区。通过Kafka集群,可以将各生产者发布的消息路由至各分区中,以使各消费者可以消费这些已发布的消息。
目前,对于生产者发布的一个任务,可以将该任务中包括的大量消息均衡路由至各分区中。当获取到新任务时,可以待分区中的消息被消费完成时,将新任务的消息均衡路由至各空闲分区。
可以看出,现有的实现方式会存在单一任务占用较多分区的情况,故任务并发量较低。
发明内容
本发明提供了一种分配分区的方法、装置及系统,能够提高任务并发量。
为了达到上述目的,本发明是通过如下技术方案实现的:
第一方面,本发明提供了一种分配分区的方法,包括:
S1:确定当前的不同任务与不同分区的对应关系;
S2:根据获取到的目标任务和所述对应关系,判断是否存在所述目标任务对应的目标分区,若是,将所述目标任务中包括的消息发送给所述目标分区,并结束当前流程,否则,执行S3;
S3:判断是否存在空闲分区,若是,确定目标空闲分区,将所述目标任务中包括的消息发送给所述目标空闲分区,通过确定所述目标空闲分区对应的任务为所述目标任务,更新所述对应关系,并结束当前流程,否则,执行S4;
S4:获取每一个所述分区的偏移量,确定其中的目标偏移量,将所述目标任务中包括的消息发送给具有所述目标偏移量的分区,通过确定具有所述目标偏移量的分区对应的任务包括所述目标任务,更新所述对应关系。
进一步地,该方法还包括:
A1:判断是否存在对应于至少两个任务的共用分区,若是,执行A2;
A2:判断是否存在空闲分区,若是,确定所述至少两个任务中的任一目的任务,通过确定所述空闲分区对应的任务为所述目的任务,以及确定所述共用分区对应的任务不包括所述目的任务,更新所述对应关系。
进一步地,所述目标空闲分区包括:所述空闲分区中的最小分区号对应的分区。
进一步地,所述获取每一个所述分区的偏移量,确定其中的目标偏移量包括:利用Kafka API(Application Programming Interface,应用程序编程接口)计算每一个所述分区的偏移量,并确定其中的最小偏移量为目标偏移量。
进一步地,该方法还包括:在外部Cassandra数据库中存储不同key值与不同分区的对应关系,且不同任务具有不同key值;
通过storm接收二进制数据,通过解析所述二进制数据将其反序列化为目标任务,并获取所述目标任务的key值;
所述确定当前的不同任务与不同分区的对应关系包括:利用内存缓存所述Cassandra数据库中当前存储的所述对应关系;
所述更新所述对应关系包括:更新所述Cassandra数据库中存储的所述对应关系。
第二方面,本发明提供了一种分配分区的装置,包括:
缓存单元,用于确定当前的不同任务与不同分区的对应关系;
固定分区处理单元,用于根据获取到的目标任务和所述对应关系,判断是否存在所述目标任务对应的目标分区,若是,将所述目标任务中包括的消息发送给所述目标分区,并结束当前流程,否则,触发分区空闲处理单元;
所述分区空闲处理单元,用于判断是否存在空闲分区,若是,确定目标空闲分区,将所述目标任务中包括的消息发送给所述目标空闲分区,通过确定所述目标空闲分区对应的任务为所述目标任务,更新所述对应关系,并结束当前流程,否则,触发超分区处理单元;
所述超分区处理单元,用于获取每一个所述分区的偏移量,确定其中的目标偏移量,将所述目标任务中包括的消息发送给具有所述目标偏移量的分区,通过确定具有所述目标偏移量的分区对应的任务包括所述目标任务,更新所述对应关系。
进一步地,该分配分区的装置还包括:分区均衡单元;
所述分区均衡单元,用于判断是否存在对应于至少两个任务的共用分区,若是,判断是否存在空闲分区,且在判断结果包括存在空闲分区时,确定所述至少两个任务中的任一目的任务,通过确定所述空闲分区对应的任务为所述目的任务,以及确定所述共用分区对应的任务不包括所述目的任务,更新所述对应关系。
进一步地,所述分区空闲处理单元,具体用于确定所述空闲分区中的最小分区号对应的分区。
进一步地,所述超分区处理单元,具体用于利用Kafka API计算每一个所述分区的偏移量,并确定其中的最小偏移量为目标偏移量。
进一步地,所述缓存单元,具体用于根据外部Cassandra数据库中存储的不同key值与不同分区的对应关系,且不同任务具有不同key值,利用内存缓存所述Cassandra数据库中当前存储的所述对应关系;通过storm接收二进制数据,通过解析所述二进制数据将其反序列化为目标任务,并获取所述目标任务的key值;
所述分区空闲处理单元,和/或,所述超分区处理单元,具体用于更新所述Cassandra数据库中存储的所述对应关系。
第三方面,本发明提供了一种分配分区的系统,包括:
上述任一所述的分配分区的装置,以及至少一个分区,其中,
每一个所述分区,用于接收并消费所述分配分区的装置发来的消息。
进一步地,该分配分区的系统还包括:Cassandra数据库;
所述Cassandra数据库,用于存储不同key值与不同分区的对应关系,且不同任务具有不同key值。
本发明提供了一种分配分区的方法、装置及系统,根据确定的当前的不同任务与不同分区的对应关系,对于获取到的包括消息的目标任务:当存在目标任务对应的目标分区时,将消息发送给该目标分区;当不存在该目标分区但存在空闲分区时,将消息发送给任一空闲分区,并更新所述对应关系;当不存在该目标分区且不存在空闲分区时,将消息发送给具有目标偏移量的分区,并更新所述对应关系。由于在获取到每一个任务时均可以根据不同情况将任务发送给一个分区,故可以使多个任务同时占用全部分区。因此,本发明能够提高任务并发量。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的一种分配分区的方法的流程图;
图2是本发明一实施例提供的另一种分配分区的方法的流程图;
图3是本发明一实施例提供的一种分配分区的装置的示意图;
图4是本发明一实施例提供的另一种分配分区的装置的示意图;
图5是本发明一实施例提供的一种分配分区的系统的示意图;
图6是本发明一实施例提供的另一种分配分区的系统的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种分配分区的方法,可以包括以下步骤:
步骤101:确定当前的不同任务与不同分区的对应关系。
步骤102:根据获取到的目标任务和所述对应关系,判断是否存在所述目标任务对应的目标分区,若是,将所述目标任务中包括的消息发送给所述目标分区,并结束当前流程,否则,执行步骤103。
步骤103:判断是否存在空闲分区,若是,确定目标空闲分区,将所述目标任务中包括的消息发送给所述目标空闲分区,通过确定所述目标空闲分区对应的任务为所述目标任务,更新所述对应关系,并结束当前流程,否则,执行步骤104。
步骤104:获取每一个所述分区的偏移量,确定其中的目标偏移量,将所述目标任务中包括的消息发送给具有所述目标偏移量的分区,通过确定具有所述目标偏移量的分区对应的任务包括所述目标任务,更新所述对应关系。
本发明实施例提供了一种分配分区的方法,根据确定的当前的不同任务与不同分区的对应关系,对于获取到的包括消息的目标任务:当存在目标任务对应的目标分区时,将消息发送给该目标分区;当不存在该目标分区但存在空闲分区时,将消息发送给任一空闲分区,并更新所述对应关系;当不存在该目标分区且不存在空闲分区时,将消息发送给具有目标偏移量的分区,并更新所述对应关系。由于在获取到每一个任务时均可以根据不同情况将任务发送给一个分区,故可以使多个任务同时占用全部分区。因此,本发明实施例能够提高任务并发量。
在本发明的一个实施例中,为了能够对共用分区对应的任务进行拆分,所以该方法可以进一步包括:
步骤105:判断是否存在对应于至少两个任务的共用分区,若是,执行步骤106;
步骤106:判断是否存在空闲分区,若是,确定所述至少两个任务中的任一目的任务,通过确定所述空闲分区对应的任务为所述目的任务,以及确定所述共用分区对应的任务不包括所述目的任务,更新所述对应关系。
详细地,这一分区均衡策略可以定时执行或实时执行。通过对共用分区对应的任务进行拆分,可以减小共用分区的消息消费压力。
在本发明的一个实施例中,所述目标空闲分区包括:所述空闲分区中的最小分区号对应的分区。
当获取到没有对应固定分区的任务,但集群中当前存在多个空闲分区时,可以首先选用分区号相对最小的分区用于消息消费。依次类推,从而顺序使用各空闲分区。这一实现方式能够简化空闲分区的应用管理。
在本发明的一个实施例中,所述获取每一个所述分区的偏移量,确定其中的目标偏移量包括:利用Kafka API计算每一个所述分区的偏移量,并确定其中的最小偏移量为目标偏移量。
详细地,可以通过统一的Kafka API计算各分区当前的偏移量,偏移量越小,分区的消息消费压力越小。利用消息消费压力最小的分区以同时处理新获取的任务,可以避免出现个别分区消费压力过大的情况。
在本发明的一个实施例中,该方法可以进一步包括:在外部Cassandra数据库中存储不同key值与不同分区的对应关系,且不同任务具有不同key值;
通过storm接收二进制数据,通过解析所述二进制数据将其反序列化为目标任务,并获取所述目标任务的key值;
所述确定当前的不同任务与不同分区的对应关系包括:利用内存缓存所述Cassandra数据库中当前存储的所述对应关系;
所述更新所述对应关系包括:更新所述Cassandra数据库中存储的所述对应关系。
为了能够记录不同任务与不同分区的对应关系,以及能够根据该对应关系进行分区快速查询,故可以将对应关系存储于外部Cassandra数据库中以进行记录,同时将该对应关系同步缓存于内存中以进行快速查询。对应地,当需要更新对应关系时,需要对数据库中存储的对应关系进行更新,且内存中缓存的对应关系实时更新。
此外,由于不同类型的任务可以有不同的key值,故可以建立不同key值与不同分区的对应关系。在获取到任务时,可以根据该任务的key值以确定其对应的分区。
如图2所示,本发明一个实施例提供了另一种分配分区的方法,该方法以基于Cassandra数据库的Kafka分区策略为例,具体包括以下步骤:
步骤201:在Cassandra数据库中存储不同key值与不同分区的对应关系。
详细地,对于Kafka集群中的每一个服务器,可以根据服务器中磁盘的数目确定分区数。例如,一个服务器对应的分区数可以等于服务器中磁盘的数目。
为便于系统识别,可以确定每一个分区的唯一分区号。例如,本实施例中包括10个分区,分别为分区1、分区2、……、分区10。
为了提高任务并发量,避免单一任务占用大量分区情况的发生,可以预先设置不同任务与不同分区的对应关系。此外,由于不同任务的key值不同,故详细地,可以设置不同key值与不同分区的对应关系。例如,本发明实施例中,可以设置key值1对应于分区1、key值2对应于分区2、……、key值8对应于分区8,分区9和分区10暂时均无对应key值。
在本发明一个实施例中,key值可以为任务ID。
为了能够记录不同key值与不同分区的对应关系,可以将该对应关系存储于Cassandra数据库中。
步骤202:利用内存缓存Cassandra数据库中当前存储的对应关系。
当数据库中存储的对应关系较多时,在数据库中进行对应关系查询的效率相对较低,故可以将数据库中存储的对应关系实时缓存至内存中。当获取到任一任务时,可以在内存中快速确定出任务的key值对应的分区。
此外,当数据库中存储的对应关系发生改变时,可以实时在内存中缓存数据库中的当前对应关系,以保证数据库中存储的对应关系和内存中缓存的对应关系保持一致。
步骤203:通过storm接收二进制数据,通过解析二进制数据将其反序列化为目标任务,并获取目标任务的key值。
例如,获取到的目标任务的key值可以为key值10。
步骤204:根据获取到的目标任务的key值和内存中缓存的对应关系,判断是否存在key值对应的目标分区,若是,将目标任务中包括的消息发送给目标分区,并结束当前流程,否则,执行步骤205。
对于获取到的目标任务的key值,当缓存的对应关系中包括该key值对应的目标分区时,可以直接将目标任务中包括的消息发送给该目标分区,从而完成分区的分配,故可以结束当前流程。
详细地,每一个分区在接收到发来的消息时,可以进行消息的消费。
在本实施例中,通过步骤203可以获取到key值10,经判断,内存中缓存的对应关系中不存在key值10对应的分区,故需要继续执行步骤205。
步骤205:判断是否存在空闲分区,若是,确定其中的最小分区号对应的目标空闲分区,将目标任务中包括的消息发送给目标空闲分区,通过确定目标空闲分区对应的任务为目标任务,更新Cassandra数据库中存储的对应关系,并结束当前流程,否则,执行步骤206。
详细地,根据内存中缓存的对应关系,可以快速确定出全部分区中的空闲分区。例如,可以确定出当前存在2个空闲分区:分区9和分区10。
在本发明一个实施例中,可以在内存中缓存一个空闲分区列表,以记录全部空闲分区。其中,空闲分区可以为没有对应key值的分区,也可以为有对应key值,但分区中当前无可消费消息的分区。当然,若没有缓存该空闲分区列表,则可以根据缓存的对应关系,实时确定当前的空闲分区。
当在步骤204中判断出获取到的任务无对应分区时,可以利用该空闲分区列表中记录的任一空闲分区。此外,为便于系统管理,可以首先使用分区号相对最小的分区。因此,可以将key值10对应于分区9,并将任务中包括的消息发送给分区9,从而完成分区的分配,故可以结束当前流程。当获取到新任务且需要再次使用空闲分区时,可以使用空闲分区列表中记录的分区10。
为便于再次获取到具有key值10的任务时,能够将该任务直接发送给分区9,故可以将key值10与分区9的对应关系记录至数据库中,并同时缓存至内存中。由于分区9之前没有对应的key值,故可以直接新增该对应关系。
在本发明一个实施例中,若分区9为有对应key值,但分区中当前无可消费消息的空闲分区,如数据库中记录有分区9对应于key值9,说明具有key值9的任务的出现概率可能相对较低,可以释放这一对应关系资源,故可以将数据库中记录的分区9与key值9的对应关系替换为分区9与key值10的对应关系。
步骤206:利用Kafka API计算每一个分区的偏移量,并确定其中的最小偏移量,将目标任务中包括的消息发送给具有最小偏移量的分区,通过确定具有最小偏移量的分区对应的任务包括目标任务,更新Cassandra数据库中存储的对应关系。
详细地,可以通过统一的Kafka API计算各分区当前的偏移量,其中,偏移量可以为分区中可消费消息的总数量。偏移量越小,分区的消息消费压力越小。利用消息消费压力最小的分区以同时处理新获取的任务,可以避免出现个别分区消费压力过大的情况,以使各分区的消费压力相对较为均衡。
对于获取到的任务,若没有该任务的key值对应的分区,且同时没有空闲分区时,可以将该任务中包括的消息发送给当前的具有最小偏移量的分区,以共用该分区。
例如,对于当前新获取到的任务,其key值为key值11,且判断出无key值11对应的固定分区且无空闲分区,则需要共用分区。经计算,若分区3当前的偏移量相对最小,则可以使key值11和key值3均对应于分区3,以共用分区3,故可以将新任务中包括的消息发送给分区3,并将key值11与分区3的对应关系添加至数据库并同步缓存至内存中,故分区3同时对应于key值11和key值3。
本发明实施例中,通过利用当前偏移量最小的分区作为共用分区,有益于保证各分区间的消息消费压力相对较为均衡,避免出现个别分区压力超负荷的情况,从而保证集群的整体消息消费能力。
步骤207:定期判断是否存在对应于至少两个任务的共用分区,若是,执行步骤208,否则,结束当前流程。
由于共用分区的消息消费压力较其他分区大,故可以在存在空闲分区时,对共用分区进行拆分。因此,根据内存中缓存的对应关系,可以定期,如每隔1h进行一次判断,首先判断是否存在共用分区,在判断结果为存在共用分区时,执行步骤208。
当然,在本发明一个实施例中,还可以在确定出存在空闲分区时,实时判断是否存在共用分区,从而可以实时利用空闲分区对共用分区进行拆分,以缓解共用分区的消息消费压力。
步骤208:判断是否存在空闲分区,若是,确定至少两个任务中的任一目的任务,通过确定空闲分区对应的任务为目的任务,以及确定共用分区对应的任务不包括目的任务,更新Cassandra数据库中存储的对应关系,否则,结束当前流程。
在步骤207中首先判断出存在共用分区时,再次判断是否存在空闲分区,若存在空闲分区,可以拆分共用分区。例如,由于分区3同时对应于key值11和key值3,且对应于key值1的分区1当前空闲,则可以重新确定key值11对应于分区3和key值3对应于分区1,并利用新确定的对应关系在数据库中对原对应关系进行更新替换。
本发明实施例中,通过利用空闲分区对共用分区进行拆分,可以将消息消费压力在各分区间进行均衡,以避免个别分区长时间压力超负荷的情况,有益于提高集群的整体消息消费能力。
本发明实施例中,在获取到任一任务时,可以将该任务发送给对应的固定分区,或发送给任一空闲分区,或发送给偏移量最小的当前非空闲分区,从而可以避免任务堆积且不能及时被消费的情况。由于同一类任务通常仅占用一个分区,故可以同时消费多类任务,从而可以避免单一消费、消费一元化的问题,从而提高任务并发量。
如图3所示,本发明一个实施例提供了一种分配分区的装置30,包括:
缓存单元301,用于确定当前的不同任务与不同分区的对应关系;
固定分区处理单元302,用于根据获取到的目标任务和所述对应关系,判断是否存在所述目标任务对应的目标分区,若是,将所述目标任务中包括的消息发送给所述目标分区,并结束当前流程,否则,触发分区空闲处理单元303;
所述分区空闲处理单元303,用于判断是否存在空闲分区,若是,确定目标空闲分区,将所述目标任务中包括的消息发送给所述目标空闲分区,通过确定所述目标空闲分区对应的任务为所述目标任务,更新所述对应关系,并结束当前流程,否则,触发超分区处理单元304;
所述超分区处理单元304,用于获取每一个所述分区的偏移量,确定其中的目标偏移量,将所述目标任务中包括的消息发送给具有所述目标偏移量的分区,通过确定具有所述目标偏移量的分区对应的任务包括所述目标任务,更新所述对应关系。
详细地,所述分区空闲处理单元303可以根据所述缓存单元301中确定的当前的对应关系,以判断是否存在空闲分区。
在本发明一个实施例中,请参考图4,该分配分区的装置30还可以包括:分区均衡单元401;
所述分区均衡单元401,用于判断是否存在对应于至少两个任务的共用分区,若是,判断是否存在空闲分区,且在判断结果包括存在空闲分区时,确定所述至少两个任务中的任一目的任务,通过确定所述空闲分区对应的任务为所述目的任务,以及确定所述共用分区对应的任务不包括所述目的任务,更新所述对应关系。
详细地,所述分区均衡单元401可以根据所述缓存单元301中确定的当前的对应关系,以判断是否存在共用分区,以及判断是否空闲分区。
在本发明一个实施例中,所述分区空闲处理单元303,具体用于确定所述空闲分区中的最小分区号对应的分区。
在本发明一个实施例中,所述超分区处理单元304,具体用于利用Kafka API计算每一个所述分区的偏移量,并确定其中的最小偏移量为目标偏移量。
在本发明一个实施例中,所述缓存单元301,具体用于根据外部Cassandra数据库中存储的不同key值与不同分区的对应关系,且不同任务具有不同key值,利用内存缓存所述Cassandra数据库中当前存储的所述对应关系;通过storm接收二进制数据,通过解析所述二进制数据将其反序列化为目标任务,并获取所述目标任务的key值;
所述分区空闲处理单元303,和/或,所述超分区处理单元304,具体用于更新所述Cassandra数据库中存储的所述对应关系。
如图5所示,本发明实施例提供了一种分配分区的系统,包括:
上述任一所述的分配分区的装置30,以及至少一个分区50,其中,
每一个所述分区50,用于接收并消费所述分配分区的装置30发来的消息。
在本发明一个实施例中,该分配分区的系统可以进一步包括:Cassandra数据库60;
所述Cassandra数据库60,用于存储不同key值与不同分区的对应关系,且不同任务具有不同key值。
详细地,所述分配分区的装置30可以将所述Cassandra数据库60中存储的对应关系实时缓存至内部内存中,且当所述Cassandra数据库60中存储的对应关系发生改变时,将发生改变后的对应关系缓存至内存中,以保证两处的对应关系实时保持一致。
上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
综上所述,本发明的各个实施例至少具有如下有益效果:
1、本发明实施例中,根据确定的当前的不同任务与不同分区的对应关系,对于获取到的包括消息的目标任务:当存在目标任务对应的目标分区时,将消息发送给该目标分区;当不存在该目标分区但存在空闲分区时,将消息发送给任一空闲分区,并更新所述对应关系;当不存在该目标分区且不存在空闲分区时,将消息发送给具有目标偏移量的分区,并更新所述对应关系。由于在获取到每一个任务时均可以根据不同情况将任务发送给一个分区,故可以使多个任务同时占用全部分区。因此,本发明实施例能够提高任务并发量。
2、本发明实施例中,通过利用当前偏移量最小的分区作为共用分区,有益于保证各分区间的消息消费压力相对较为均衡,避免出现个别分区压力超负荷的情况,从而保证集群的整体消息消费能力。
3、本发明实施例中,通过利用空闲分区对共用分区进行拆分,可以将消息消费压力在各分区间进行均衡,以避免个别分区长时间压力超负荷的情况,有益于提高集群的整体消息消费能力。
4、本发明实施例中,在获取到任一任务时,可以将该任务发送给对应的固定分区,或发送给任一空闲分区,或发送给偏移量最小的当前非空闲分区,从而可以避免任务堆积且不能及时被消费的情况。由于同一类任务通常仅占用一个分区,故可以同时消费多类任务,从而可以避免单一消费、消费一元化的问题,从而提高任务并发量。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个······”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质中。
最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (8)
1.一种分配分区的方法,其特征在于,包括:
S1:确定当前的不同任务与不同分区的对应关系;
S2:根据获取到的目标任务和所述对应关系,判断是否存在所述目标任务对应的目标分区,若是,将所述目标任务中包括的消息发送给所述目标分区,并结束当前流程,否则,执行S3;
S3:判断是否存在空闲分区,若是,确定目标空闲分区,将所述目标任务中包括的消息发送给所述目标空闲分区,通过确定所述目标空闲分区对应的任务为所述目标任务,更新所述对应关系,并结束当前流程,否则,执行S4;
S4:获取每一个所述分区的偏移量,确定其中的目标偏移量,将所述目标任务中包括的消息发送给具有所述目标偏移量的分区,通过确定具有所述目标偏移量的分区对应的任务包括所述目标任务,更新所述对应关系;
进一步包括:
A1:判断是否存在对应于至少两个任务的共用分区,若是,执行A2;
A2:判断是否存在空闲分区,若是,确定所述至少两个任务中的任一目的任务,通过确定所述空闲分区对应的任务为所述目的任务,以及确定所述共用分区对应的任务不包括所述目的任务,更新所述对应关系。
2.根据权利要求1所述的方法,其特征在于,
所述目标空闲分区包括:所述空闲分区中的最小分区号对应的分区;
和/或,
所述获取每一个所述分区的偏移量,确定其中的目标偏移量包括:利用Kafka应用程序编程接口Kafka API计算每一个所述分区的偏移量,并确定其中的最小偏移量为目标偏移量。
3.根据权利要求1至2中任一所述的方法,其特征在于,
进一步包括:在外部Cassandra数据库中存储不同key值与不同分区的对应关系,且不同任务具有不同key值;
通过storm接收二进制数据,通过解析所述二进制数据将其反序列化为目标任务,并获取所述目标任务的key值;
所述确定当前的不同任务与不同分区的对应关系包括:利用内存缓存所述Cassandra数据库中当前存储的所述对应关系;
所述更新所述对应关系包括:更新所述Cassandra数据库中存储的所述对应关系。
4.一种分配分区的装置,其特征在于,包括:
缓存单元,用于确定当前的不同任务与不同分区的对应关系;
固定分区处理单元,用于根据获取到的目标任务和所述对应关系,判断是否存在所述目标任务对应的目标分区,若是,将所述目标任务中包括的消息发送给所述目标分区,并结束当前流程,否则,触发分区空闲处理单元;
所述分区空闲处理单元,用于判断是否存在空闲分区,若是,确定目标空闲分区,将所述目标任务中包括的消息发送给所述目标空闲分区,通过确定所述目标空闲分区对应的任务为所述目标任务,更新所述对应关系,并结束当前流程,否则,触发超分区处理单元;
所述超分区处理单元,用于获取每一个所述分区的偏移量,确定其中的目标偏移量,将所述目标任务中包括的消息发送给具有所述目标偏移量的分区,通过确定具有所述目标偏移量的分区对应的任务包括所述目标任务,更新所述对应关系;
进一步包括:分区均衡单元;
所述分区均衡单元,用于判断是否存在对应于至少两个任务的共用分区,若是,判断是否存在空闲分区,且在判断结果包括存在空闲分区时,确定所述至少两个任务中的任一目的任务,通过确定所述空闲分区对应的任务为所述目的任务,以及确定所述共用分区对应的任务不包括所述目的任务,更新所述对应关系。
5.根据权利要求4所述的分配分区的装置,其特征在于,
所述分区空闲处理单元,具体用于确定所述空闲分区中的最小分区号对应的分区;
和/或,
所述超分区处理单元,具体用于利用Kafka应用程序编程接口Kafka API计算每一个所述分区的偏移量,并确定其中的最小偏移量为目标偏移量。
6.根据权利要求4至5中任一所述的分配分区的装置,其特征在于,
所述缓存单元,具体用于根据外部Cassandra数据库中存储的不同key值与不同分区的对应关系,且不同任务具有不同key值,利用内存缓存所述Cassandra数据库中当前存储的所述对应关系;通过storm接收二进制数据,通过解析所述二进制数据将其反序列化为目标任务,并获取所述目标任务的key值;
所述分区空闲处理单元,和/或,所述超分区处理单元,具体用于更新所述Cassandra数据库中存储的所述对应关系。
7.一种分配分区的系统,其特征在于,包括:
如权利要求4至6中任一所述的分配分区的装置,以及至少一个分区,其中,每一个所述分区,用于接收并消费所述分配分区的装置发来的消息。
8.根据权利要求7所述的分配分区的系统,其特征在于,进一步包括:Cassandra数据库;
所述Cassandra数据库,用于存储不同key值与不同分区的对应关系,且不同任务具有不同key值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610506839.1A CN106095589B (zh) | 2016-06-30 | 2016-06-30 | 一种分配分区的方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610506839.1A CN106095589B (zh) | 2016-06-30 | 2016-06-30 | 一种分配分区的方法、装置及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106095589A CN106095589A (zh) | 2016-11-09 |
CN106095589B true CN106095589B (zh) | 2019-04-09 |
Family
ID=57214189
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610506839.1A Active CN106095589B (zh) | 2016-06-30 | 2016-06-30 | 一种分配分区的方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106095589B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108874562B (zh) * | 2018-06-21 | 2022-08-02 | 北京顺丰同城科技有限公司 | 分布式高并发消息队列推送系统 |
CN109218385B (zh) * | 2018-06-28 | 2021-08-03 | 西安华为技术有限公司 | 处理数据的方法和装置 |
CN109388677B (zh) * | 2018-08-23 | 2022-10-11 | 顺丰科技有限公司 | 集群之间数据同步方法、装置、设备及其存储介质 |
CN109271106B (zh) * | 2018-08-31 | 2021-03-05 | 华为技术有限公司 | 消息存储、读取方法及装置、服务器、存储介质 |
CN111104167B (zh) * | 2018-10-25 | 2023-07-21 | 上海嘉楠捷思信息技术有限公司 | 一种计算结果提交方法及装置 |
CN109739916A (zh) * | 2018-12-29 | 2019-05-10 | 中国银行股份有限公司 | 数据装载或卸载方法及装置 |
CN112882839A (zh) * | 2019-11-29 | 2021-06-01 | 中国移动通信集团设计院有限公司 | 基于kafka的消息处理方法及装置 |
CN111142880B (zh) * | 2019-12-25 | 2024-03-12 | 北京奇艺世纪科技有限公司 | 消息系统中分区的分配方法、装置及电子设备 |
CN112269661B (zh) * | 2020-10-30 | 2022-04-15 | 上海哔哩哔哩科技有限公司 | 基于Kafka集群的分区迁移方法和装置 |
CN113626217A (zh) * | 2021-07-28 | 2021-11-09 | 北京达佳互联信息技术有限公司 | 异步消息处理方法、装置、电子设备和存储介质 |
CN117453759B (zh) * | 2023-12-19 | 2024-04-02 | 深圳竹云科技股份有限公司 | 业务数据处理方法、装置、计算机设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101788920A (zh) * | 2010-02-05 | 2010-07-28 | 北京航空航天大学 | 一种基于处理器分区技术的cpu虚拟化方法 |
CN104238999A (zh) * | 2013-06-09 | 2014-12-24 | 阿里巴巴集团控股有限公司 | 一种基于水平分区分布式数据库的任务调度方法及装置 |
CN105159768A (zh) * | 2015-09-09 | 2015-12-16 | 浪潮集团有限公司 | 一种任务管理方法及云数据中心管理平台 |
CN105393251A (zh) * | 2013-06-12 | 2016-03-09 | 甲骨文国际公司 | 数据库内的分片队列 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7032107B2 (en) * | 2002-10-30 | 2006-04-18 | Symantec Corporation | Virtual partition for recording and restoring computer data files |
-
2016
- 2016-06-30 CN CN201610506839.1A patent/CN106095589B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101788920A (zh) * | 2010-02-05 | 2010-07-28 | 北京航空航天大学 | 一种基于处理器分区技术的cpu虚拟化方法 |
CN104238999A (zh) * | 2013-06-09 | 2014-12-24 | 阿里巴巴集团控股有限公司 | 一种基于水平分区分布式数据库的任务调度方法及装置 |
CN105393251A (zh) * | 2013-06-12 | 2016-03-09 | 甲骨文国际公司 | 数据库内的分片队列 |
CN105159768A (zh) * | 2015-09-09 | 2015-12-16 | 浪潮集团有限公司 | 一种任务管理方法及云数据中心管理平台 |
Non-Patent Citations (1)
Title |
---|
一种基于Kafka的可靠的Consumer的设计方案;王岩 等;《软件》;20160131;第37卷(第01期);第61-66页 |
Also Published As
Publication number | Publication date |
---|---|
CN106095589A (zh) | 2016-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106095589B (zh) | 一种分配分区的方法、装置及系统 | |
US9703610B2 (en) | Extensible centralized dynamic resource distribution in a clustered data grid | |
CN110262901B (zh) | 一种数据处理方法及数据处理系统 | |
CN103533058B (zh) | 面向HDFS/Hadoop存储集群的资源监控系统及方法 | |
CN106981024B (zh) | 一种交易限额计算处理系统及其处理方法 | |
CN105933408B (zh) | 一种Redis通用中间件的实现方法及装置 | |
CN104035925B (zh) | 数据存储方法、装置和存储系统 | |
CN110109868A (zh) | 用于索引文件的方法、装置和计算机程序产品 | |
CN108809855A (zh) | 消息管理方法、装置及电子设备 | |
CN109388351A (zh) | 一种分布式数据存储的方法及相关装置 | |
CN104301990B (zh) | 一种数据同步的方法及装置 | |
CN109902059A (zh) | 一种cpu与gpu之间的数据传输方法 | |
CN110413845A (zh) | 基于物联网操作系统的资源存储方法及装置 | |
CN109561128A (zh) | 数据传输方法和装置 | |
CN105975345A (zh) | 一种基于分布式内存的视频帧数据动态均衡存储管理方法 | |
CN110275681A (zh) | 一种数据存储方法及数据存储系统 | |
CN108875035A (zh) | 分布式文件系统的数据存储方法及相关设备 | |
CN109739684A (zh) | 基于向量时钟的分布式键值数据库的副本修复方法与装置 | |
CN109271113A (zh) | 一种基于云存储的数据管理系统及方法 | |
CN112256433A (zh) | 基于Kafka集群的分区迁移方法和装置 | |
US10817512B2 (en) | Standing queries in memory | |
CN106201839A (zh) | 一种业务对象的信息加载方法和装置 | |
CN110502534A (zh) | 数据库高速缓存 | |
CN113347238A (zh) | 基于区块链的消息分区方法及系统、设备、存储介质 | |
CN107943615A (zh) | 基于分布式集群的数据处理方法与系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20190311 Address after: 214029 No. 999 Gaolang East Road, Binhu District, Wuxi City, Jiangsu Province (Software Development Building) 707 Applicant after: Chaozhou Zhuoshu Big Data Industry Development Co., Ltd. Address before: 250100 Ji'nan hi tech Zone No. 2877, Shandong Province Applicant before: Inspur Group Co., Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |