一種分配分區(qū)的方法、裝置及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種分配分區(qū)的方法、裝置及系統(tǒng),該方法包括:根據(jù)確定的當(dāng)前的不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系,對(duì)于獲取到的包括消息的目標(biāo)任務(wù):當(dāng)存在目標(biāo)任務(wù)對(duì)應(yīng)的目標(biāo)分區(qū)時(shí),將消息發(fā)送給該目標(biāo)分區(qū);當(dāng)不存在該目標(biāo)分區(qū)但存在空閑分區(qū)時(shí),將消息發(fā)送給任一空閑分區(qū),并更新所述對(duì)應(yīng)關(guān)系;當(dāng)不存在該目標(biāo)分區(qū)且不存在空閑分區(qū)時(shí),將消息發(fā)送給具有目標(biāo)偏移量的分區(qū),并更新所述對(duì)應(yīng)關(guān)系。由于在獲取到每一個(gè)任務(wù)時(shí)均可以根據(jù)不同情況將任務(wù)發(fā)送給一個(gè)分區(qū),故可以使多個(gè)任務(wù)同時(shí)占用全部分區(qū)。因此,本方案能夠提高任務(wù)并發(fā)量。
【專利說(shuō)明】
一種分配分區(qū)的方法、裝置及系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種分配分區(qū)的方法、裝置及系統(tǒng)。
【背景技術(shù)】
[0002]Kafka集群通常包括至少一個(gè)處理器,且每一個(gè)處理器上可以對(duì)應(yīng)有至少一個(gè)分區(qū)。通過(guò)Kafka集群,可以將各生產(chǎn)者發(fā)布的消息路由至各分區(qū)中,以使各消費(fèi)者可以消費(fèi)這些已發(fā)布的消息。
[0003]目前,對(duì)于生產(chǎn)者發(fā)布的一個(gè)任務(wù),可以將該任務(wù)中包括的大量消息均衡路由至各分區(qū)中。當(dāng)獲取到新任務(wù)時(shí),可以待分區(qū)中的消息被消費(fèi)完成時(shí),將新任務(wù)的消息均衡路由至各空閑分區(qū)。
[0004]可以看出,現(xiàn)有的實(shí)現(xiàn)方式會(huì)存在單一任務(wù)占用較多分區(qū)的情況,故任務(wù)并發(fā)量較低。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供了一種分配分區(qū)的方法、裝置及系統(tǒng),能夠提高任務(wù)并發(fā)量。
[0006]為了達(dá)到上述目的,本發(fā)明是通過(guò)如下技術(shù)方案實(shí)現(xiàn)的:
[0007]第一方面,本發(fā)明提供了一種分配分區(qū)的方法,包括:
[0008]S1:確定當(dāng)前的不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系;
[0009]S2:根據(jù)獲取到的目標(biāo)任務(wù)和所述對(duì)應(yīng)關(guān)系,判斷是否存在所述目標(biāo)任務(wù)對(duì)應(yīng)的目標(biāo)分區(qū),若是,將所述目標(biāo)任務(wù)中包括的消息發(fā)送給所述目標(biāo)分區(qū),并結(jié)束當(dāng)前流程,否貝IJ,執(zhí)行S3;
[0010]S3:判斷是否存在空閑分區(qū),若是,確定目標(biāo)空閑分區(qū),將所述目標(biāo)任務(wù)中包括的消息發(fā)送給所述目標(biāo)空閑分區(qū),通過(guò)確定所述目標(biāo)空閑分區(qū)對(duì)應(yīng)的任務(wù)為所述目標(biāo)任務(wù),更新所述對(duì)應(yīng)關(guān)系,并結(jié)束當(dāng)前流程,否則,執(zhí)行S4;
[0011 ] S4:獲取每一個(gè)所述分區(qū)的偏移量,確定其中的目標(biāo)偏移量,將所述目標(biāo)任務(wù)中包括的消息發(fā)送給具有所述目標(biāo)偏移量的分區(qū),通過(guò)確定具有所述目標(biāo)偏移量的分區(qū)對(duì)應(yīng)的任務(wù)包括所述目標(biāo)任務(wù),更新所述對(duì)應(yīng)關(guān)系。
[0012]進(jìn)一步地,該方法還包括:
[0013]Al:判斷是否存在對(duì)應(yīng)于至少兩個(gè)任務(wù)的共用分區(qū),若是,執(zhí)行A2;
[0014]A2:判斷是否存在空閑分區(qū),若是,確定所述至少兩個(gè)任務(wù)中的任一目的任務(wù),通過(guò)確定所述空閑分區(qū)對(duì)應(yīng)的任務(wù)為所述目的任務(wù),以及確定所述共用分區(qū)對(duì)應(yīng)的任務(wù)不包括所述目的任務(wù),更新所述對(duì)應(yīng)關(guān)系。
[0015]進(jìn)一步地,所述目標(biāo)空閑分區(qū)包括:所述空閑分區(qū)中的最小分區(qū)號(hào)對(duì)應(yīng)的分區(qū)。
[0016]進(jìn)一步地,所述獲取每一個(gè)所述分區(qū)的偏移量,確定其中的目標(biāo)偏移量包括:利用Kafka API (Applicat1n Programming Interface,應(yīng)用程序編程接口)計(jì)算每一個(gè)所述分區(qū)的偏移量,并確定其中的最小偏移量為目標(biāo)偏移量。[0017 ] 進(jìn)一步地,該方法還包括:在外部Cassandra數(shù)據(jù)庫(kù)中存儲(chǔ)不同key值與不同分區(qū)的對(duì)應(yīng)關(guān)系,且不同任務(wù)具有不同key值;
[0018]通過(guò)storm接收二進(jìn)制數(shù)據(jù),通過(guò)解析所述二進(jìn)制數(shù)據(jù)將其反序列化為目標(biāo)任務(wù),并獲取所述目標(biāo)任務(wù)的key值;
[0019]所述確定當(dāng)前的不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系包括:利用內(nèi)存緩存所述Cassandra數(shù)據(jù)庫(kù)中當(dāng)前存儲(chǔ)的所述對(duì)應(yīng)關(guān)系;
[°02°]所述更新所述對(duì)應(yīng)關(guān)系包括:更新所述Cassandra數(shù)據(jù)庫(kù)中存儲(chǔ)的所述對(duì)應(yīng)關(guān)系。[0021 ]第二方面,本發(fā)明提供了一種分配分區(qū)的裝置,包括:
[0022]緩存單元,用于確定當(dāng)前的不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系;
[0023]固定分區(qū)處理單元,用于根據(jù)獲取到的目標(biāo)任務(wù)和所述對(duì)應(yīng)關(guān)系,判斷是否存在所述目標(biāo)任務(wù)對(duì)應(yīng)的目標(biāo)分區(qū),若是,將所述目標(biāo)任務(wù)中包括的消息發(fā)送給所述目標(biāo)分區(qū),并結(jié)束當(dāng)前流程,否則,觸發(fā)分區(qū)空閑處理單元;
[0024]所述分區(qū)空閑處理單元,用于判斷是否存在空閑分區(qū),若是,確定目標(biāo)空閑分區(qū),將所述目標(biāo)任務(wù)中包括的消息發(fā)送給所述目標(biāo)空閑分區(qū),通過(guò)確定所述目標(biāo)空閑分區(qū)對(duì)應(yīng)的任務(wù)為所述目標(biāo)任務(wù),更新所述對(duì)應(yīng)關(guān)系,并結(jié)束當(dāng)前流程,否則,觸發(fā)超分區(qū)處理單元;
[0025]所述超分區(qū)處理單元,用于獲取每一個(gè)所述分區(qū)的偏移量,確定其中的目標(biāo)偏移量,將所述目標(biāo)任務(wù)中包括的消息發(fā)送給具有所述目標(biāo)偏移量的分區(qū),通過(guò)確定具有所述目標(biāo)偏移量的分區(qū)對(duì)應(yīng)的任務(wù)包括所述目標(biāo)任務(wù),更新所述對(duì)應(yīng)關(guān)系。
[0026]進(jìn)一步地,該分配分區(qū)的裝置還包括:分區(qū)均衡單元;
[0027]所述分區(qū)均衡單元,用于判斷是否存在對(duì)應(yīng)于至少兩個(gè)任務(wù)的共用分區(qū),若是,判斷是否存在空閑分區(qū),且在判斷結(jié)果包括存在空閑分區(qū)時(shí),確定所述至少兩個(gè)任務(wù)中的任一目的任務(wù),通過(guò)確定所述空閑分區(qū)對(duì)應(yīng)的任務(wù)為所述目的任務(wù),以及確定所述共用分區(qū)對(duì)應(yīng)的任務(wù)不包括所述目的任務(wù),更新所述對(duì)應(yīng)關(guān)系。
[0028]進(jìn)一步地,所述分區(qū)空閑處理單元,具體用于確定所述空閑分區(qū)中的最小分區(qū)號(hào)對(duì)應(yīng)的分區(qū)。
[0029]進(jìn)一步地,所述超分區(qū)處理單元,具體用于利用Kafka API計(jì)算每一個(gè)所述分區(qū)的偏移量,并確定其中的最小偏移量為目標(biāo)偏移量。
[°03°]進(jìn)一步地,所述緩存單元,具體用于根據(jù)外部Cassandra數(shù)據(jù)庫(kù)中存儲(chǔ)的不同key值與不同分區(qū)的對(duì)應(yīng)關(guān)系,且不同任務(wù)具有不同key值,利用內(nèi)存緩存所述Cassandra數(shù)據(jù)庫(kù)中當(dāng)前存儲(chǔ)的所述對(duì)應(yīng)關(guān)系;通過(guò)storm接收二進(jìn)制數(shù)據(jù),通過(guò)解析所述二進(jìn)制數(shù)據(jù)將其反序列化為目標(biāo)任務(wù),并獲取所述目標(biāo)任務(wù)的key值;
[0031]所述分區(qū)空閑處理單元,和/或,所述超分區(qū)處理單元,具體用于更新所述Cassandra數(shù)據(jù)庫(kù)中存儲(chǔ)的所述對(duì)應(yīng)關(guān)系。
[0032]第三方面,本發(fā)明提供了一種分配分區(qū)的系統(tǒng),包括:
[0033]上述任一所述的分配分區(qū)的裝置,以及至少一個(gè)分區(qū),其中,
[0034]每一個(gè)所述分區(qū),用于接收并消費(fèi)所述分配分區(qū)的裝置發(fā)來(lái)的消息。
[0035]進(jìn)一步地,該分配分區(qū)的系統(tǒng)還包括:Cassandra數(shù)據(jù)庫(kù);
[0036]所述Cassandra數(shù)據(jù)庫(kù),用于存儲(chǔ)不同key值與不同分區(qū)的對(duì)應(yīng)關(guān)系,且不同任務(wù)具有不同key值。
[0037]本發(fā)明提供了一種分配分區(qū)的方法、裝置及系統(tǒng),根據(jù)確定的當(dāng)前的不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系,對(duì)于獲取到的包括消息的目標(biāo)任務(wù):當(dāng)存在目標(biāo)任務(wù)對(duì)應(yīng)的目標(biāo)分區(qū)時(shí),將消息發(fā)送給該目標(biāo)分區(qū);當(dāng)不存在該目標(biāo)分區(qū)但存在空閑分區(qū)時(shí),將消息發(fā)送給任一空閑分區(qū),并更新所述對(duì)應(yīng)關(guān)系;當(dāng)不存在該目標(biāo)分區(qū)且不存在空閑分區(qū)時(shí),將消息發(fā)送給具有目標(biāo)偏移量的分區(qū),并更新所述對(duì)應(yīng)關(guān)系。由于在獲取到每一個(gè)任務(wù)時(shí)均可以根據(jù)不同情況將任務(wù)發(fā)送給一個(gè)分區(qū),故可以使多個(gè)任務(wù)同時(shí)占用全部分區(qū)。因此,本發(fā)明能夠提高任務(wù)并發(fā)量。
【附圖說(shuō)明】
[0038]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0039]圖1是本發(fā)明一實(shí)施例提供的一種分配分區(qū)的方法的流程圖;
[0040]圖2是本發(fā)明一實(shí)施例提供的另一種分配分區(qū)的方法的流程圖;
[0041]圖3是本發(fā)明一實(shí)施例提供的一種分配分區(qū)的裝置的示意圖;
[0042]圖4是本發(fā)明一實(shí)施例提供的另一種分配分區(qū)的裝置的示意圖;
[0043]圖5是本發(fā)明一實(shí)施例提供的一種分配分區(qū)的系統(tǒng)的示意圖;
[0044]圖6是本發(fā)明一實(shí)施例提供的另一種分配分區(qū)的系統(tǒng)的示意圖。
【具體實(shí)施方式】
[0045]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例,基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0046]如圖1所示,本發(fā)明實(shí)施例提供了一種分配分區(qū)的方法,可以包括以下步驟:
[0047]步驟101:確定當(dāng)前的不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系。
[0048]步驟102:根據(jù)獲取到的目標(biāo)任務(wù)和所述對(duì)應(yīng)關(guān)系,判斷是否存在所述目標(biāo)任務(wù)對(duì)應(yīng)的目標(biāo)分區(qū),若是,將所述目標(biāo)任務(wù)中包括的消息發(fā)送給所述目標(biāo)分區(qū),并結(jié)束當(dāng)前流程,否則,執(zhí)行步驟103。
[0049]步驟103:判斷是否存在空閑分區(qū),若是,確定目標(biāo)空閑分區(qū),將所述目標(biāo)任務(wù)中包括的消息發(fā)送給所述目標(biāo)空閑分區(qū),通過(guò)確定所述目標(biāo)空閑分區(qū)對(duì)應(yīng)的任務(wù)為所述目標(biāo)任務(wù),更新所述對(duì)應(yīng)關(guān)系,并結(jié)束當(dāng)前流程,否則,執(zhí)行步驟104。
[0050]步驟104:獲取每一個(gè)所述分區(qū)的偏移量,確定其中的目標(biāo)偏移量,將所述目標(biāo)任務(wù)中包括的消息發(fā)送給具有所述目標(biāo)偏移量的分區(qū),通過(guò)確定具有所述目標(biāo)偏移量的分區(qū)對(duì)應(yīng)的任務(wù)包括所述目標(biāo)任務(wù),更新所述對(duì)應(yīng)關(guān)系。
[0051]本發(fā)明實(shí)施例提供了一種分配分區(qū)的方法,根據(jù)確定的當(dāng)前的不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系,對(duì)于獲取到的包括消息的目標(biāo)任務(wù):當(dāng)存在目標(biāo)任務(wù)對(duì)應(yīng)的目標(biāo)分區(qū)時(shí),將消息發(fā)送給該目標(biāo)分區(qū);當(dāng)不存在該目標(biāo)分區(qū)但存在空閑分區(qū)時(shí),將消息發(fā)送給任一空閑分區(qū),并更新所述對(duì)應(yīng)關(guān)系;當(dāng)不存在該目標(biāo)分區(qū)且不存在空閑分區(qū)時(shí),將消息發(fā)送給具有目標(biāo)偏移量的分區(qū),并更新所述對(duì)應(yīng)關(guān)系。由于在獲取到每一個(gè)任務(wù)時(shí)均可以根據(jù)不同情況將任務(wù)發(fā)送給一個(gè)分區(qū),故可以使多個(gè)任務(wù)同時(shí)占用全部分區(qū)。因此,本發(fā)明實(shí)施例能夠提尚任務(wù)并發(fā)量。
[0052]在本發(fā)明的一個(gè)實(shí)施例中,為了能夠?qū)灿梅謪^(qū)對(duì)應(yīng)的任務(wù)進(jìn)行拆分,所以該方法可以進(jìn)一步包括:
[0053]步驟105:判斷是否存在對(duì)應(yīng)于至少兩個(gè)任務(wù)的共用分區(qū),若是,執(zhí)行步驟106;
[0054]步驟106:判斷是否存在空閑分區(qū),若是,確定所述至少兩個(gè)任務(wù)中的任一目的任務(wù),通過(guò)確定所述空閑分區(qū)對(duì)應(yīng)的任務(wù)為所述目的任務(wù),以及確定所述共用分區(qū)對(duì)應(yīng)的任務(wù)不包括所述目的任務(wù),更新所述對(duì)應(yīng)關(guān)系。
[0055]詳細(xì)地,這一分區(qū)均衡策略可以定時(shí)執(zhí)行或?qū)崟r(shí)執(zhí)行。通過(guò)對(duì)共用分區(qū)對(duì)應(yīng)的任務(wù)進(jìn)行拆分,可以減小共用分區(qū)的消息消費(fèi)壓力。
[0056]在本發(fā)明的一個(gè)實(shí)施例中,所述目標(biāo)空閑分區(qū)包括:所述空閑分區(qū)中的最小分區(qū)號(hào)對(duì)應(yīng)的分區(qū)。
[0057]當(dāng)獲取到?jīng)]有對(duì)應(yīng)固定分區(qū)的任務(wù),但集群中當(dāng)前存在多個(gè)空閑分區(qū)時(shí),可以首先選用分區(qū)號(hào)相對(duì)最小的分區(qū)用于消息消費(fèi)。依次類推,從而順序使用各空閑分區(qū)。這一實(shí)現(xiàn)方式能夠簡(jiǎn)化空閑分區(qū)的應(yīng)用管理。
[0058]在本發(fā)明的一個(gè)實(shí)施例中,所述獲取每一個(gè)所述分區(qū)的偏移量,確定其中的目標(biāo)偏移量包括:利用Kafka API計(jì)算每一個(gè)所述分區(qū)的偏移量,并確定其中的最小偏移量為目標(biāo)偏移量。
[0059]詳細(xì)地,可以通過(guò)統(tǒng)一的KafkaAPI計(jì)算各分區(qū)當(dāng)前的偏移量,偏移量越小,分區(qū)的消息消費(fèi)壓力越小。利用消息消費(fèi)壓力最小的分區(qū)以同時(shí)處理新獲取的任務(wù),可以避免出現(xiàn)個(gè)別分區(qū)消費(fèi)壓力過(guò)大的情況。
[0000]在本發(fā)明的一個(gè)實(shí)施例中,該方法可以進(jìn)一步包括:在外部Cassandra數(shù)據(jù)庫(kù)中存儲(chǔ)不同key值與不同分區(qū)的對(duì)應(yīng)關(guān)系,且不同任務(wù)具有不同key值;
[0061 ]通過(guò)storm接收二進(jìn)制數(shù)據(jù),通過(guò)解析所述二進(jìn)制數(shù)據(jù)將其反序列化為目標(biāo)任務(wù),并獲取所述目標(biāo)任務(wù)的key值;
[0062]所述確定當(dāng)前的不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系包括:利用內(nèi)存緩存所述Cassandra數(shù)據(jù)庫(kù)中當(dāng)前存儲(chǔ)的所述對(duì)應(yīng)關(guān)系;
[0063]所述更新所述對(duì)應(yīng)關(guān)系包括:更新所述Cassandra數(shù)據(jù)庫(kù)中存儲(chǔ)的所述對(duì)應(yīng)關(guān)系。
[0064]為了能夠記錄不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系,以及能夠根據(jù)該對(duì)應(yīng)關(guān)系進(jìn)行分區(qū)快速查詢,故可以將對(duì)應(yīng)關(guān)系存儲(chǔ)于外部Cassandra數(shù)據(jù)庫(kù)中以進(jìn)行記錄,同時(shí)將該對(duì)應(yīng)關(guān)系同步緩存于內(nèi)存中以進(jìn)行快速查詢。對(duì)應(yīng)地,當(dāng)需要更新對(duì)應(yīng)關(guān)系時(shí),需要對(duì)數(shù)據(jù)庫(kù)中存儲(chǔ)的對(duì)應(yīng)關(guān)系進(jìn)行更新,且內(nèi)存中緩存的對(duì)應(yīng)關(guān)系實(shí)時(shí)更新。
[0065]此外,由于不同類型的任務(wù)可以有不同的key值,故可以建立不同key值與不同分區(qū)的對(duì)應(yīng)關(guān)系。在獲取到任務(wù)時(shí),可以根據(jù)該任務(wù)的key值以確定其對(duì)應(yīng)的分區(qū)。
[0066]如圖2所示,本發(fā)明一個(gè)實(shí)施例提供了另一種分配分區(qū)的方法,該方法以基于Cassandra數(shù)據(jù)庫(kù)的Kafka分區(qū)策略為例,具體包括以下步驟:
[0067]步驟201:在Cassandra數(shù)據(jù)庫(kù)中存儲(chǔ)不同key值與不同分區(qū)的對(duì)應(yīng)關(guān)系。
[0068]詳細(xì)地,對(duì)于Kafka集群中的每一個(gè)服務(wù)器,可以根據(jù)服務(wù)器中磁盤的數(shù)目確定分區(qū)數(shù)。例如,一個(gè)服務(wù)器對(duì)應(yīng)的分區(qū)數(shù)可以等于服務(wù)器中磁盤的數(shù)目。
[0069]為便于系統(tǒng)識(shí)別,可以確定每一個(gè)分區(qū)的唯一分區(qū)號(hào)。例如,本實(shí)施例中包括10個(gè)分區(qū),分別為分區(qū)1、分區(qū)2、......、分區(qū)10。
[0070]為了提高任務(wù)并發(fā)量,避免單一任務(wù)占用大量分區(qū)情況的發(fā)生,可以預(yù)先設(shè)置不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系。此外,由于不同任務(wù)的key值不同,故詳細(xì)地,可以設(shè)置不同key值與不同分區(qū)的對(duì)應(yīng)關(guān)系。例如,本發(fā)明實(shí)施例中,可以設(shè)置key值I對(duì)應(yīng)于分區(qū)1、key值2對(duì)應(yīng)于分區(qū)2、……、key值8對(duì)應(yīng)于分區(qū)8,分區(qū)9和分區(qū)10暫時(shí)均無(wú)對(duì)應(yīng)key值。
[0071]在本發(fā)明一個(gè)實(shí)施例中,key值可以為任務(wù)ID。
[0072]為了能夠記錄不同key值與不同分區(qū)的對(duì)應(yīng)關(guān)系,可以將該對(duì)應(yīng)關(guān)系存儲(chǔ)于Cassandra數(shù)據(jù)庫(kù)中。
[0073]步驟202:利用內(nèi)存緩存Cassandra數(shù)據(jù)庫(kù)中當(dāng)前存儲(chǔ)的對(duì)應(yīng)關(guān)系。
[0074]當(dāng)數(shù)據(jù)庫(kù)中存儲(chǔ)的對(duì)應(yīng)關(guān)系較多時(shí),在數(shù)據(jù)庫(kù)中進(jìn)行對(duì)應(yīng)關(guān)系查詢的效率相對(duì)較低,故可以將數(shù)據(jù)庫(kù)中存儲(chǔ)的對(duì)應(yīng)關(guān)系實(shí)時(shí)緩存至內(nèi)存中。當(dāng)獲取到任一任務(wù)時(shí),可以在內(nèi)存中快速確定出任務(wù)的key值對(duì)應(yīng)的分區(qū)。
[0075]此外,當(dāng)數(shù)據(jù)庫(kù)中存儲(chǔ)的對(duì)應(yīng)關(guān)系發(fā)生改變時(shí),可以實(shí)時(shí)在內(nèi)存中緩存數(shù)據(jù)庫(kù)中的當(dāng)前對(duì)應(yīng)關(guān)系,以保證數(shù)據(jù)庫(kù)中存儲(chǔ)的對(duì)應(yīng)關(guān)系和內(nèi)存中緩存的對(duì)應(yīng)關(guān)系保持一致。
[0076]步驟203:通過(guò)storm接收二進(jìn)制數(shù)據(jù),通過(guò)解析二進(jìn)制數(shù)據(jù)將其反序列化為目標(biāo)任務(wù),并獲取目標(biāo)任務(wù)的key值。
[0077]例如,獲取到的目標(biāo)任務(wù)的key值可以為key值10。
[0078]步驟204:根據(jù)獲取到的目標(biāo)任務(wù)的key值和內(nèi)存中緩存的對(duì)應(yīng)關(guān)系,判斷是否存在key值對(duì)應(yīng)的目標(biāo)分區(qū),若是,將目標(biāo)任務(wù)中包括的消息發(fā)送給目標(biāo)分區(qū),并結(jié)束當(dāng)前流程,否則,執(zhí)行步驟205。
[0079]對(duì)于獲取到的目標(biāo)任務(wù)的key值,當(dāng)緩存的對(duì)應(yīng)關(guān)系中包括該key值對(duì)應(yīng)的目標(biāo)分區(qū)時(shí),可以直接將目標(biāo)任務(wù)中包括的消息發(fā)送給該目標(biāo)分區(qū),從而完成分區(qū)的分配,故可以結(jié)束當(dāng)前流程。
[0080]詳細(xì)地,每一個(gè)分區(qū)在接收到發(fā)來(lái)的消息時(shí),可以進(jìn)行消息的消費(fèi)。
[0081]在本實(shí)施例中,通過(guò)步驟203可以獲取到key值10,經(jīng)判斷,內(nèi)存中緩存的對(duì)應(yīng)關(guān)系中不存在key值1對(duì)應(yīng)的分區(qū),故需要繼續(xù)執(zhí)行步驟205。
[0082]步驟205:判斷是否存在空閑分區(qū),若是,確定其中的最小分區(qū)號(hào)對(duì)應(yīng)的目標(biāo)空閑分區(qū),將目標(biāo)任務(wù)中包括的消息發(fā)送給目標(biāo)空閑分區(qū),通過(guò)確定目標(biāo)空閑分區(qū)對(duì)應(yīng)的任務(wù)為目標(biāo)任務(wù),更新Cassandra數(shù)據(jù)庫(kù)中存儲(chǔ)的對(duì)應(yīng)關(guān)系,并結(jié)束當(dāng)前流程,否則,執(zhí)行步驟206。
[0083]詳細(xì)地,根據(jù)內(nèi)存中緩存的對(duì)應(yīng)關(guān)系,可以快速確定出全部分區(qū)中的空閑分區(qū)。例如,可以確定出當(dāng)前存在2個(gè)空閑分區(qū):分區(qū)9和分區(qū)10。
[0084]在本發(fā)明一個(gè)實(shí)施例中,可以在內(nèi)存中緩存一個(gè)空閑分區(qū)列表,以記錄全部空閑分區(qū)。其中,空閑分區(qū)可以為沒(méi)有對(duì)應(yīng)key值的分區(qū),也可以為有對(duì)應(yīng)key值,但分區(qū)中當(dāng)前無(wú)可消費(fèi)消息的分區(qū)。當(dāng)然,若沒(méi)有緩存該空閑分區(qū)列表,則可以根據(jù)緩存的對(duì)應(yīng)關(guān)系,實(shí)時(shí)確定當(dāng)前的空閑分區(qū)。
[0085]當(dāng)在步驟204中判斷出獲取到的任務(wù)無(wú)對(duì)應(yīng)分區(qū)時(shí),可以利用該空閑分區(qū)列表中記錄的任一空閑分區(qū)。此外,為便于系統(tǒng)管理,可以首先使用分區(qū)號(hào)相對(duì)最小的分區(qū)。因此,可以將key值10對(duì)應(yīng)于分區(qū)9,并將任務(wù)中包括的消息發(fā)送給分區(qū)9,從而完成分區(qū)的分配,故可以結(jié)束當(dāng)前流程。當(dāng)獲取到新任務(wù)且需要再次使用空閑分區(qū)時(shí),可以使用空閑分區(qū)列表中記錄的分區(qū)10。
[0086]為便于再次獲取到具有key值10的任務(wù)時(shí),能夠?qū)⒃撊蝿?wù)直接發(fā)送給分區(qū)9,故可以將key值10與分區(qū)9的對(duì)應(yīng)關(guān)系記錄至數(shù)據(jù)庫(kù)中,并同時(shí)緩存至內(nèi)存中。由于分區(qū)9之前沒(méi)有對(duì)應(yīng)的key值,故可以直接新增該對(duì)應(yīng)關(guān)系。
[0087]在本發(fā)明一個(gè)實(shí)施例中,若分區(qū)9為有對(duì)應(yīng)key值,但分區(qū)中當(dāng)前無(wú)可消費(fèi)消息的空閑分區(qū),如數(shù)據(jù)庫(kù)中記錄有分區(qū)9對(duì)應(yīng)于key值9,說(shuō)明具有key值9的任務(wù)的出現(xiàn)概率可能相對(duì)較低,可以釋放這一對(duì)應(yīng)關(guān)系資源,故可以將數(shù)據(jù)庫(kù)中記錄的分區(qū)9與key值9的對(duì)應(yīng)關(guān)系替換為分區(qū)9與key值10的對(duì)應(yīng)關(guān)系。
[0088]步驟206:利用KafkaAPI計(jì)算每一個(gè)分區(qū)的偏移量,并確定其中的最小偏移量,將目標(biāo)任務(wù)中包括的消息發(fā)送給具有最小偏移量的分區(qū),通過(guò)確定具有最小偏移量的分區(qū)對(duì)應(yīng)的任務(wù)包括目標(biāo)任務(wù),更新Cassandra數(shù)據(jù)庫(kù)中存儲(chǔ)的對(duì)應(yīng)關(guān)系。
[0089]詳細(xì)地,可以通過(guò)統(tǒng)一的KafkaAPI計(jì)算各分區(qū)當(dāng)前的偏移量,其中,偏移量可以為分區(qū)中可消費(fèi)消息的總數(shù)量。偏移量越小,分區(qū)的消息消費(fèi)壓力越小。利用消息消費(fèi)壓力最小的分區(qū)以同時(shí)處理新獲取的任務(wù),可以避免出現(xiàn)個(gè)別分區(qū)消費(fèi)壓力過(guò)大的情況,以使各分區(qū)的消費(fèi)壓力相對(duì)較為均衡。
[0090]對(duì)于獲取到的任務(wù),若沒(méi)有該任務(wù)的key值對(duì)應(yīng)的分區(qū),且同時(shí)沒(méi)有空閑分區(qū)時(shí),可以將該任務(wù)中包括的消息發(fā)送給當(dāng)前的具有最小偏移量的分區(qū),以共用該分區(qū)。
[0091 ]例如,對(duì)于當(dāng)前新獲取到的任務(wù),其key值為key值11,且判斷出無(wú)key值11對(duì)應(yīng)的固定分區(qū)且無(wú)空閑分區(qū),則需要共用分區(qū)。經(jīng)計(jì)算,若分區(qū)3當(dāng)前的偏移量相對(duì)最小,則可以使key值11和key值3均對(duì)應(yīng)于分區(qū)3,以共用分區(qū)3,故可以將新任務(wù)中包括的消息發(fā)送給分區(qū)3,并將key值11與分區(qū)3的對(duì)應(yīng)關(guān)系添加至數(shù)據(jù)庫(kù)并同步緩存至內(nèi)存中,故分區(qū)3同時(shí)對(duì)應(yīng)于key值11和key值3。
[0092]本發(fā)明實(shí)施例中,通過(guò)利用當(dāng)前偏移量最小的分區(qū)作為共用分區(qū),有益于保證各分區(qū)間的消息消費(fèi)壓力相對(duì)較為均衡,避免出現(xiàn)個(gè)別分區(qū)壓力超負(fù)荷的情況,從而保證集群的整體消息消費(fèi)能力。
[0093]步驟207:定期判斷是否存在對(duì)應(yīng)于至少兩個(gè)任務(wù)的共用分區(qū),若是,執(zhí)行步驟208,否則,結(jié)束當(dāng)前流程。
[0094]由于共用分區(qū)的消息消費(fèi)壓力較其他分區(qū)大,故可以在存在空閑分區(qū)時(shí),對(duì)共用分區(qū)進(jìn)行拆分。因此,根據(jù)內(nèi)存中緩存的對(duì)應(yīng)關(guān)系,可以定期,如每隔Ih進(jìn)行一次判斷,首先判斷是否存在共用分區(qū),在判斷結(jié)果為存在共用分區(qū)時(shí),執(zhí)行步驟208。
[0095]當(dāng)然,在本發(fā)明一個(gè)實(shí)施例中,還可以在確定出存在空閑分區(qū)時(shí),實(shí)時(shí)判斷是否存在共用分區(qū),從而可以實(shí)時(shí)利用空閑分區(qū)對(duì)共用分區(qū)進(jìn)行拆分,以緩解共用分區(qū)的消息消費(fèi)壓力。
[0096]步驟208:判斷是否存在空閑分區(qū),若是,確定至少兩個(gè)任務(wù)中的任一目的任務(wù),通過(guò)確定空閑分區(qū)對(duì)應(yīng)的任務(wù)為目的任務(wù),以及確定共用分區(qū)對(duì)應(yīng)的任務(wù)不包括目的任務(wù),更新Cas sandra數(shù)據(jù)庫(kù)中存儲(chǔ)的對(duì)應(yīng)關(guān)系,否則,結(jié)束當(dāng)前流程。
[0097]在步驟207中首先判斷出存在共用分區(qū)時(shí),再次判斷是否存在空閑分區(qū),若存在空閑分區(qū),可以拆分共用分區(qū)。例如,由于分區(qū)3同時(shí)對(duì)應(yīng)于key值11和key值3,且對(duì)應(yīng)于key值I的分區(qū)I當(dāng)前空閑,則可以重新確定key值11對(duì)應(yīng)于分區(qū)3和key值3對(duì)應(yīng)于分區(qū)I,并利用新確定的對(duì)應(yīng)關(guān)系在數(shù)據(jù)庫(kù)中對(duì)原對(duì)應(yīng)關(guān)系進(jìn)行更新替換。
[0098]本發(fā)明實(shí)施例中,通過(guò)利用空閑分區(qū)對(duì)共用分區(qū)進(jìn)行拆分,可以將消息消費(fèi)壓力在各分區(qū)間進(jìn)行均衡,以避免個(gè)別分區(qū)長(zhǎng)時(shí)間壓力超負(fù)荷的情況,有益于提高集群的整體消息消費(fèi)能力。
[0099]本發(fā)明實(shí)施例中,在獲取到任一任務(wù)時(shí),可以將該任務(wù)發(fā)送給對(duì)應(yīng)的固定分區(qū),或發(fā)送給任一空閑分區(qū),或發(fā)送給偏移量最小的當(dāng)前非空閑分區(qū),從而可以避免任務(wù)堆積且不能及時(shí)被消費(fèi)的情況。由于同一類任務(wù)通常僅占用一個(gè)分區(qū),故可以同時(shí)消費(fèi)多類任務(wù),從而可以避免單一消費(fèi)、消費(fèi)一元化的問(wèn)題,從而提高任務(wù)并發(fā)量。
[0100]如圖3所示,本發(fā)明一個(gè)實(shí)施例提供了一種分配分區(qū)的裝置30,包括:
[0101]緩存單元301,用于確定當(dāng)前的不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系;
[0102]固定分區(qū)處理單元302,用于根據(jù)獲取到的目標(biāo)任務(wù)和所述對(duì)應(yīng)關(guān)系,判斷是否存在所述目標(biāo)任務(wù)對(duì)應(yīng)的目標(biāo)分區(qū),若是,將所述目標(biāo)任務(wù)中包括的消息發(fā)送給所述目標(biāo)分區(qū),并結(jié)束當(dāng)前流程,否則,觸發(fā)分區(qū)空閑處理單元303;
[0103]所述分區(qū)空閑處理單元303,用于判斷是否存在空閑分區(qū),若是,確定目標(biāo)空閑分區(qū),將所述目標(biāo)任務(wù)中包括的消息發(fā)送給所述目標(biāo)空閑分區(qū),通過(guò)確定所述目標(biāo)空閑分區(qū)對(duì)應(yīng)的任務(wù)為所述目標(biāo)任務(wù),更新所述對(duì)應(yīng)關(guān)系,并結(jié)束當(dāng)前流程,否則,觸發(fā)超分區(qū)處理單元304;
[0104]所述超分區(qū)處理單元304,用于獲取每一個(gè)所述分區(qū)的偏移量,確定其中的目標(biāo)偏移量,將所述目標(biāo)任務(wù)中包括的消息發(fā)送給具有所述目標(biāo)偏移量的分區(qū),通過(guò)確定具有所述目標(biāo)偏移量的分區(qū)對(duì)應(yīng)的任務(wù)包括所述目標(biāo)任務(wù),更新所述對(duì)應(yīng)關(guān)系。
[0105]詳細(xì)地,所述分區(qū)空閑處理單元303可以根據(jù)所述緩存單元301中確定的當(dāng)前的對(duì)應(yīng)關(guān)系,以判斷是否存在空閑分區(qū)。
[0106]在本發(fā)明一個(gè)實(shí)施例中,請(qǐng)參考圖4,該分配分區(qū)的裝置30還可以包括:分區(qū)均衡單元401 ;
[0107]所述分區(qū)均衡單元401,用于判斷是否存在對(duì)應(yīng)于至少兩個(gè)任務(wù)的共用分區(qū),若是,判斷是否存在空閑分區(qū),且在判斷結(jié)果包括存在空閑分區(qū)時(shí),確定所述至少兩個(gè)任務(wù)中的任一目的任務(wù),通過(guò)確定所述空閑分區(qū)對(duì)應(yīng)的任務(wù)為所述目的任務(wù),以及確定所述共用分區(qū)對(duì)應(yīng)的任務(wù)不包括所述目的任務(wù),更新所述對(duì)應(yīng)關(guān)系。
[0108]詳細(xì)地,所述分區(qū)均衡單元401可以根據(jù)所述緩存單元301中確定的當(dāng)前的對(duì)應(yīng)關(guān)系,以判斷是否存在共用分區(qū),以及判斷是否空閑分區(qū)。
[0109]在本發(fā)明一個(gè)實(shí)施例中,所述分區(qū)空閑處理單元303,具體用于確定所述空閑分區(qū)中的最小分區(qū)號(hào)對(duì)應(yīng)的分區(qū)。
[Ο??Ο] 在本發(fā)明一個(gè)實(shí)施例中,所述超分區(qū)處理單元304,具體用于利用Kafka API計(jì)算每一個(gè)所述分區(qū)的偏移量,并確定其中的最小偏移量為目標(biāo)偏移量。
[O111]在本發(fā)明一個(gè)實(shí)施例中,所述緩存單元301,具體用于根據(jù)外部Cassandra數(shù)據(jù)庫(kù)中存儲(chǔ)的不同key值與不同分區(qū)的對(duì)應(yīng)關(guān)系,且不同任務(wù)具有不同key值,利用內(nèi)存緩存所述Cassandra數(shù)據(jù)庫(kù)中當(dāng)前存儲(chǔ)的所述對(duì)應(yīng)關(guān)系;通過(guò)storm接收二進(jìn)制數(shù)據(jù),通過(guò)解析所述二進(jìn)制數(shù)據(jù)將其反序列化為目標(biāo)任務(wù),并獲取所述目標(biāo)任務(wù)的key值;
[0112]所述分區(qū)空閑處理單元303,和/或,所述超分區(qū)處理單元304,具體用于更新所述Cas sandra數(shù)據(jù)庫(kù)中存儲(chǔ)的所述對(duì)應(yīng)關(guān)系。
[0113]如圖5所示,本發(fā)明實(shí)施例提供了一種分配分區(qū)的系統(tǒng),包括:
[0114]上述任一所述的分配分區(qū)的裝置30,以及至少一個(gè)分區(qū)50,其中,
[0115]每一個(gè)所述分區(qū)50,用于接收并消費(fèi)所述分配分區(qū)的裝置30發(fā)來(lái)的消息。
[0116]在本發(fā)明一個(gè)實(shí)施例中,該分配分區(qū)的系統(tǒng)可以進(jìn)一步包括:Cassandra數(shù)據(jù)庫(kù)60;
[0117]所述Cassandra數(shù)據(jù)庫(kù)60,用于存儲(chǔ)不同key值與不同分區(qū)的對(duì)應(yīng)關(guān)系,且不同任務(wù)具有不同key值。
[0118]詳細(xì)地,所述分配分區(qū)的裝置30可以將所述Cassandra數(shù)據(jù)庫(kù)60中存儲(chǔ)的對(duì)應(yīng)關(guān)系實(shí)時(shí)緩存至內(nèi)部?jī)?nèi)存中,且當(dāng)所述Cassandra數(shù)據(jù)庫(kù)60中存儲(chǔ)的對(duì)應(yīng)關(guān)系發(fā)生改變時(shí),將發(fā)生改變后的對(duì)應(yīng)關(guān)系緩存至內(nèi)存中,以保證兩處的對(duì)應(yīng)關(guān)系實(shí)時(shí)保持一致。
[0119]上述裝置內(nèi)的各單元之間的信息交互、執(zhí)行過(guò)程等內(nèi)容,由于與本發(fā)明方法實(shí)施例基于同一構(gòu)思,具體內(nèi)容可參見本發(fā)明方法實(shí)施例中的敘述,此處不再贅述。
[0120]綜上所述,本發(fā)明的各個(gè)實(shí)施例至少具有如下有益效果:
[0121]1、本發(fā)明實(shí)施例中,根據(jù)確定的當(dāng)前的不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系,對(duì)于獲取到的包括消息的目標(biāo)任務(wù):當(dāng)存在目標(biāo)任務(wù)對(duì)應(yīng)的目標(biāo)分區(qū)時(shí),將消息發(fā)送給該目標(biāo)分區(qū);當(dāng)不存在該目標(biāo)分區(qū)但存在空閑分區(qū)時(shí),將消息發(fā)送給任一空閑分區(qū),并更新所述對(duì)應(yīng)關(guān)系;當(dāng)不存在該目標(biāo)分區(qū)且不存在空閑分區(qū)時(shí),將消息發(fā)送給具有目標(biāo)偏移量的分區(qū),并更新所述對(duì)應(yīng)關(guān)系。由于在獲取到每一個(gè)任務(wù)時(shí)均可以根據(jù)不同情況將任務(wù)發(fā)送給一個(gè)分區(qū),故可以使多個(gè)任務(wù)同時(shí)占用全部分區(qū)。因此,本發(fā)明實(shí)施例能夠提高任務(wù)并發(fā)量。
[0122]2、本發(fā)明實(shí)施例中,通過(guò)利用當(dāng)前偏移量最小的分區(qū)作為共用分區(qū),有益于保證各分區(qū)間的消息消費(fèi)壓力相對(duì)較為均衡,避免出現(xiàn)個(gè)別分區(qū)壓力超負(fù)荷的情況,從而保證集群的整體消息消費(fèi)能力。
[0123]3、本發(fā)明實(shí)施例中,通過(guò)利用空閑分區(qū)對(duì)共用分區(qū)進(jìn)行拆分,可以將消息消費(fèi)壓力在各分區(qū)間進(jìn)行均衡,以避免個(gè)別分區(qū)長(zhǎng)時(shí)間壓力超負(fù)荷的情況,有益于提高集群的整體消息消費(fèi)能力。
[0124]4、本發(fā)明實(shí)施例中,在獲取到任一任務(wù)時(shí),可以將該任務(wù)發(fā)送給對(duì)應(yīng)的固定分區(qū),或發(fā)送給任一空閑分區(qū),或發(fā)送給偏移量最小的當(dāng)前非空閑分區(qū),從而可以避免任務(wù)堆積且不能及時(shí)被消費(fèi)的情況。由于同一類任務(wù)通常僅占用一個(gè)分區(qū),故可以同時(shí)消費(fèi)多類任務(wù),從而可以避免單一消費(fèi)、消費(fèi)一元化的問(wèn)題,從而提高任務(wù)并發(fā)量。
[0125]需要說(shuō)明的是,在本文中,諸如第一和第二之類的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)......”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同因素。
[0126]本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過(guò)程序指令相關(guān)的硬件來(lái)完成,前述的程序可以存儲(chǔ)在計(jì)算機(jī)可讀取的存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)中。
[0127]最后需要說(shuō)明的是:以上所述僅為本發(fā)明的較佳實(shí)施例,僅用于說(shuō)明本發(fā)明的技術(shù)方案,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種分配分區(qū)的方法,其特征在于,包括: S1:確定當(dāng)前的不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系; S2:根據(jù)獲取到的目標(biāo)任務(wù)和所述對(duì)應(yīng)關(guān)系,判斷是否存在所述目標(biāo)任務(wù)對(duì)應(yīng)的目標(biāo)分區(qū),若是,將所述目標(biāo)任務(wù)中包括的消息發(fā)送給所述目標(biāo)分區(qū),并結(jié)束當(dāng)前流程,否則,執(zhí)行S3; S3:判斷是否存在空閑分區(qū),若是,確定目標(biāo)空閑分區(qū),將所述目標(biāo)任務(wù)中包括的消息發(fā)送給所述目標(biāo)空閑分區(qū),通過(guò)確定所述目標(biāo)空閑分區(qū)對(duì)應(yīng)的任務(wù)為所述目標(biāo)任務(wù),更新所述對(duì)應(yīng)關(guān)系,并結(jié)束當(dāng)前流程,否則,執(zhí)行S4; S4:獲取每一個(gè)所述分區(qū)的偏移量,確定其中的目標(biāo)偏移量,將所述目標(biāo)任務(wù)中包括的消息發(fā)送給具有所述目標(biāo)偏移量的分區(qū),通過(guò)確定具有所述目標(biāo)偏移量的分區(qū)對(duì)應(yīng)的任務(wù)包括所述目標(biāo)任務(wù),更新所述對(duì)應(yīng)關(guān)系。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括: Al:判斷是否存在對(duì)應(yīng)于至少兩個(gè)任務(wù)的共用分區(qū),若是,執(zhí)行A2; A2:判斷是否存在空閑分區(qū),若是,確定所述至少兩個(gè)任務(wù)中的任一目的任務(wù),通過(guò)確定所述空閑分區(qū)對(duì)應(yīng)的任務(wù)為所述目的任務(wù),以及確定所述共用分區(qū)對(duì)應(yīng)的任務(wù)不包括所述目的任務(wù),更新所述對(duì)應(yīng)關(guān)系。3.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述目標(biāo)空閑分區(qū)包括:所述空閑分區(qū)中的最小分區(qū)號(hào)對(duì)應(yīng)的分區(qū); 和/或, 所述獲取每一個(gè)所述分區(qū)的偏移量,確定其中的目標(biāo)偏移量包括:利用Kafka應(yīng)用程序編程接口Kafka API計(jì)算每一個(gè)所述分區(qū)的偏移量,并確定其中的最小偏移量為目標(biāo)偏移量。4.根據(jù)權(quán)利要求1至3中任一所述的方法,其特征在于, 進(jìn)一步包括:在外部Cassandra數(shù)據(jù)庫(kù)中存儲(chǔ)不同key值與不同分區(qū)的對(duì)應(yīng)關(guān)系,且不同任務(wù)具有不同key值; 通過(guò)storm接收二進(jìn)制數(shù)據(jù),通過(guò)解析所述二進(jìn)制數(shù)據(jù)將其反序列化為目標(biāo)任務(wù),并獲取所述目標(biāo)任務(wù)的key值; 所述確定當(dāng)前的不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系包括:利用內(nèi)存緩存所述Cassandra數(shù)據(jù)庫(kù)中當(dāng)前存儲(chǔ)的所述對(duì)應(yīng)關(guān)系; 所述更新所述對(duì)應(yīng)關(guān)系包括:更新所述Cassandra數(shù)據(jù)庫(kù)中存儲(chǔ)的所述對(duì)應(yīng)關(guān)系。5.一種分配分區(qū)的裝置,其特征在于,包括: 緩存單元,用于確定當(dāng)前的不同任務(wù)與不同分區(qū)的對(duì)應(yīng)關(guān)系; 固定分區(qū)處理單元,用于根據(jù)獲取到的目標(biāo)任務(wù)和所述對(duì)應(yīng)關(guān)系,判斷是否存在所述目標(biāo)任務(wù)對(duì)應(yīng)的目標(biāo)分區(qū),若是,將所述目標(biāo)任務(wù)中包括的消息發(fā)送給所述目標(biāo)分區(qū),并結(jié)束當(dāng)前流程,否則,觸發(fā)分區(qū)空閑處理單元; 所述分區(qū)空閑處理單元,用于判斷是否存在空閑分區(qū),若是,確定目標(biāo)空閑分區(qū),將所述目標(biāo)任務(wù)中包括的消息發(fā)送給所述目標(biāo)空閑分區(qū),通過(guò)確定所述目標(biāo)空閑分區(qū)對(duì)應(yīng)的任務(wù)為所述目標(biāo)任務(wù),更新所述對(duì)應(yīng)關(guān)系,并結(jié)束當(dāng)前流程,否則,觸發(fā)超分區(qū)處理單元; 所述超分區(qū)處理單元,用于獲取每一個(gè)所述分區(qū)的偏移量,確定其中的目標(biāo)偏移量,將所述目標(biāo)任務(wù)中包括的消息發(fā)送給具有所述目標(biāo)偏移量的分區(qū),通過(guò)確定具有所述目標(biāo)偏移量的分區(qū)對(duì)應(yīng)的任務(wù)包括所述目標(biāo)任務(wù),更新所述對(duì)應(yīng)關(guān)系。6.根據(jù)權(quán)利要求5所述的分配分區(qū)的裝置,其特征在于,進(jìn)一步包括:分區(qū)均衡單元; 所述分區(qū)均衡單元,用于判斷是否存在對(duì)應(yīng)于至少兩個(gè)任務(wù)的共用分區(qū),若是,判斷是否存在空閑分區(qū),且在判斷結(jié)果包括存在空閑分區(qū)時(shí),確定所述至少兩個(gè)任務(wù)中的任一目的任務(wù),通過(guò)確定所述空閑分區(qū)對(duì)應(yīng)的任務(wù)為所述目的任務(wù),以及確定所述共用分區(qū)對(duì)應(yīng)的任務(wù)不包括所述目的任務(wù),更新所述對(duì)應(yīng)關(guān)系。7.根據(jù)權(quán)利要求5所述的分配分區(qū)的裝置,其特征在于, 所述分區(qū)空閑處理單元,具體用于確定所述空閑分區(qū)中的最小分區(qū)號(hào)對(duì)應(yīng)的分區(qū); 和/或, 所述超分區(qū)處理單元,具體用于利用Kafka應(yīng)用程序編程接口Kafka API計(jì)算每一個(gè)所述分區(qū)的偏移量,并確定其中的最小偏移量為目標(biāo)偏移量。8.根據(jù)權(quán)利要求5至7中任一所述的分配分區(qū)的裝置,其特征在于, 所述緩存單元,具體用于根據(jù)外部Cassandra數(shù)據(jù)庫(kù)中存儲(chǔ)的不同key值與不同分區(qū)的對(duì)應(yīng)關(guān)系,且不同任務(wù)具有不同key值,利用內(nèi)存緩存所述Cassandra數(shù)據(jù)庫(kù)中當(dāng)前存儲(chǔ)的所述對(duì)應(yīng)關(guān)系;通過(guò)storm接收二進(jìn)制數(shù)據(jù),通過(guò)解析所述二進(jìn)制數(shù)據(jù)將其反序列化為目標(biāo)任務(wù),并獲取所述目標(biāo)任務(wù)的key值; 所述分區(qū)空閑處理單元,和/或,所述超分區(qū)處理單元,具體用于更新所述Cassandra數(shù)據(jù)庫(kù)中存儲(chǔ)的所述對(duì)應(yīng)關(guān)系。9.一種分配分區(qū)的系統(tǒng),其特征在于,包括: 如權(quán)利要求5至8中任一所述的分配分區(qū)的裝置,以及至少一個(gè)分區(qū),其中, 每一個(gè)所述分區(qū),用于接收并消費(fèi)所述分配分區(qū)的裝置發(fā)來(lái)的消息。10.根據(jù)權(quán)利要求9所述的分配分區(qū)的系統(tǒng),其特征在于,進(jìn)一步包括-Cassandra數(shù)據(jù)庫(kù); 所述Cassandra數(shù)據(jù)庫(kù),用于存儲(chǔ)不同key值與不同分區(qū)的對(duì)應(yīng)關(guān)系,且不同任務(wù)具有不同key值。
【文檔編號(hào)】G06F9/50GK106095589SQ201610506839
【公開日】2016年11月9日
【申請(qǐng)日】2016年6月30日
【發(fā)明人】楊勝華
【申請(qǐng)人】浪潮軟件集團(tuán)有限公司