本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,具體涉及一種實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理方法和裝置。
背景技術(shù):
現(xiàn)有技術(shù)中,實(shí)時(shí)計(jì)算平臺可以基于計(jì)算框架進(jìn)行數(shù)據(jù)處理,實(shí)時(shí)計(jì)算平臺的統(tǒng)計(jì)處理過程是借助于計(jì)算框架本身集群的內(nèi)存來進(jìn)行的,實(shí)時(shí)計(jì)算平臺利用接收器的從數(shù)據(jù)源獲取待處理數(shù)據(jù)后,將待處理數(shù)據(jù)直接放入內(nèi)存中,再對內(nèi)存中的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)處理。對于一些數(shù)據(jù)源來說,接收器讀取數(shù)據(jù)的速度是一定的,例如,待處理數(shù)據(jù)為200G,接收器每秒讀取1G數(shù)據(jù),實(shí)時(shí)計(jì)算平臺1分鐘處理一次數(shù)據(jù),相當(dāng)于實(shí)時(shí)計(jì)算平臺一次批處理的數(shù)據(jù)量是60G,但是接收器的內(nèi)存才6G,根本沒辦法滿足實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理需求。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的一種實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理方法和裝置。
依據(jù)本發(fā)明的一個(gè)方面,提供了一種實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理方法,其中,該方法包括:
接收計(jì)算任務(wù),讀取該計(jì)算任務(wù)的配置信息;
根據(jù)所述配置信息中的數(shù)據(jù)源信息,確定該計(jì)算任務(wù)配置的數(shù)據(jù)源;
調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存;
根據(jù)所述配置信息中的處理規(guī)則,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行相應(yīng)處理。
可選地,所述計(jì)算任務(wù)配置的數(shù)據(jù)源為指定的Kafka數(shù)據(jù)源。
可選地,所述指定的Kafka數(shù)據(jù)源配置有一個(gè)Zookeeper服務(wù)器;
所述調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)包括:
調(diào)度多個(gè)接收器通過所述Zookeeper服務(wù)器與所述指定的Kafka數(shù)據(jù)源建立連接,從所述指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù),并將每次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息保存在所述Zookeeper服務(wù)器中。
可選地,所述從所述指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù)包括:
從所述Zookeeper服務(wù)器中獲取前一次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息,根據(jù)所述數(shù)據(jù)讀取位置信息,從所述指定的Kafka數(shù)據(jù)源中的相應(yīng)位置讀取待處理數(shù)據(jù)。
可選地,所述調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)包括:
調(diào)度多個(gè)接收器直接與所述指定的Kafka數(shù)據(jù)源建立連接,從所述指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù),并將每次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息保存在信息維護(hù)數(shù)據(jù)庫中。
可選地,所述從所述指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù)包括:
從所述信息維護(hù)數(shù)據(jù)庫中獲取前一次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息,根據(jù)該數(shù)據(jù)讀取位置信息,從所述指定的Kafka數(shù)據(jù)源中的相應(yīng)位置讀取待處理數(shù)據(jù)。
可選地,所述指定的Kafka數(shù)據(jù)源包括多個(gè)數(shù)據(jù)隊(duì)列;
所述調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存包括:
調(diào)度多個(gè)接收器從所述指定的Kafka數(shù)據(jù)源中的多個(gè)數(shù)據(jù)隊(duì)列中獲取待處理數(shù)據(jù)并保存,其中,所述多個(gè)數(shù)據(jù)隊(duì)列被均勻分配給所述多個(gè)接收器進(jìn)行數(shù)據(jù)讀取。
可選地,所述調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存包括:
每隔預(yù)設(shè)時(shí)間間隔,調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存。
可選地,所述調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存包括:
調(diào)度多個(gè)接收器,每個(gè)接收器開啟一個(gè)進(jìn)程,每個(gè)進(jìn)程調(diào)度一個(gè)或多個(gè)線程,通過所述多個(gè)進(jìn)程從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存。
可選地,所述計(jì)算任務(wù)配置的處理規(guī)則中包括:數(shù)據(jù)計(jì)算觸發(fā)時(shí)機(jī)和計(jì)算規(guī)則;
所述根據(jù)所述配置信息中的處理規(guī)則,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行相應(yīng)處理包括:
判斷是否達(dá)到所述數(shù)據(jù)計(jì)算觸發(fā)時(shí)機(jī),是則,從各接收器中讀取待處理數(shù)據(jù);
根據(jù)所述計(jì)算規(guī)則,對待處理數(shù)據(jù)進(jìn)行計(jì)算。
可選地,該方法進(jìn)一步包括:
預(yù)設(shè)數(shù)據(jù)清理觸發(fā)時(shí)機(jī);
當(dāng)達(dá)到所述數(shù)據(jù)清理觸發(fā)時(shí)機(jī)時(shí),判斷所述多個(gè)接收器中是否存在已過期數(shù)據(jù);
是則,對所述多個(gè)接收器中的已過期數(shù)據(jù)進(jìn)行清理。
可選地,所述計(jì)算任務(wù)配置的處理規(guī)則中還包括:解析條件;
則在所述對待處理數(shù)據(jù)進(jìn)行計(jì)算之前,所述根據(jù)所述計(jì)算任務(wù)配置的處理規(guī)則,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行相應(yīng)處理還包括:
根據(jù)所述解析條件,將待處理數(shù)據(jù)中符合解析條件的字段解析為指定格式的元數(shù)據(jù);
所述對待處理數(shù)據(jù)進(jìn)行計(jì)算包括:對指定格式的元數(shù)據(jù)進(jìn)行計(jì)算。
可選地,所述計(jì)算任務(wù)配置的處理規(guī)則中還包括:存儲規(guī)則;
則在所述對待處理數(shù)據(jù)進(jìn)行計(jì)算之后,該方法進(jìn)一步包括:
根據(jù)所述存儲規(guī)則,將計(jì)算結(jié)果存儲到相應(yīng)的存儲介質(zhì)中,供用戶對計(jì)算結(jié)果進(jìn)行查詢。
依據(jù)本發(fā)明的另一個(gè)方面,提供了一種實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理裝置,其中,該裝置包括:
任務(wù)接收單元,適于接收計(jì)算任務(wù),讀取該計(jì)算任務(wù)的配置信息;并適于根據(jù)所述配置信息中的數(shù)據(jù)源信息,確定該計(jì)算任務(wù)配置的數(shù)據(jù)源;
數(shù)據(jù)接收單元,適于調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存;
數(shù)據(jù)處理單元,適于根據(jù)所述配置信息中的處理規(guī)則,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行相應(yīng)處理。
可選地,所述計(jì)算任務(wù)配置的數(shù)據(jù)源為指定的Kafka數(shù)據(jù)源。
可選地,所述指定的Kafka數(shù)據(jù)源配置有一個(gè)Zookeeper服務(wù)器;
所述數(shù)據(jù)接收單元,適于調(diào)度多個(gè)接收器通過所述Zookeeper服務(wù)器與所述指定的Kafka數(shù)據(jù)源建立連接,從所述指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù),并將每次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息保存在所述Zookeeper服務(wù)器中。
可選地,所述數(shù)據(jù)接收單元,適于從所述Zookeeper服務(wù)器中獲取前一次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息,根據(jù)所述數(shù)據(jù)讀取位置信息,從所述指定的Kafka數(shù)據(jù)源中的相應(yīng)位置讀取待處理數(shù)據(jù)。
可選地,所述數(shù)據(jù)接收單元,適于調(diào)度多個(gè)接收器直接與所述指定的Kafka數(shù)據(jù)源建立連接,從所述指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù),并將每次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息保存在信息維護(hù)數(shù)據(jù)庫中。
可選地,所述數(shù)據(jù)接收單元,適于從所述信息維護(hù)數(shù)據(jù)庫中獲取前一次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息,根據(jù)該數(shù)據(jù)讀取位置信息,從所述指定的Kafka數(shù)據(jù)源中的相應(yīng)位置讀取待處理數(shù)據(jù)。
可選地,所述指定的Kafka數(shù)據(jù)源包括多個(gè)數(shù)據(jù)隊(duì)列;
所述數(shù)據(jù)接收單元,適于調(diào)度多個(gè)接收器從所述指定的Kafka數(shù)據(jù)源中的多個(gè)數(shù)據(jù)隊(duì)列中獲取待處理數(shù)據(jù)并保存,其中,所述多個(gè)數(shù)據(jù)隊(duì)列被均勻分配給所述多個(gè)接收器進(jìn)行數(shù)據(jù)讀取。
可選地,所述數(shù)據(jù)接收單元,適于每隔預(yù)設(shè)時(shí)間間隔,調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存。
可選地,所述數(shù)據(jù)接收單元,適于調(diào)度多個(gè)接收器,每個(gè)接收器開啟一個(gè)進(jìn)程,每個(gè)進(jìn)程調(diào)度一個(gè)或多個(gè)線程,通過所述多個(gè)進(jìn)程從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存。
可選地,所述計(jì)算任務(wù)配置的處理規(guī)則中包括:數(shù)據(jù)計(jì)算觸發(fā)時(shí)機(jī)和計(jì)算規(guī)則;
所述數(shù)據(jù)處理單元,適于判斷是否達(dá)到所述數(shù)據(jù)計(jì)算觸發(fā)時(shí)機(jī),是則,從各接收器中讀取待處理數(shù)據(jù);根據(jù)所述計(jì)算規(guī)則,對待處理數(shù)據(jù)進(jìn)行計(jì)算。
可選地,該裝置進(jìn)一步包括:
數(shù)據(jù)清理單元,適于預(yù)設(shè)數(shù)據(jù)清理觸發(fā)時(shí)機(jī);當(dāng)達(dá)到所述數(shù)據(jù)清理觸發(fā)時(shí)機(jī)時(shí),判斷所述多個(gè)接收器中是否存在已過期數(shù)據(jù);是則,對所述多個(gè)接收器中的已過期數(shù)據(jù)進(jìn)行清理。
可選地,所述計(jì)算任務(wù)配置的處理規(guī)則中還包括:解析條件;
則所述數(shù)據(jù)處理單元,進(jìn)一步適于在所述對待處理數(shù)據(jù)進(jìn)行計(jì)算之前,根據(jù)所述解析條件,將待處理數(shù)據(jù)中符合解析條件的字段解析為指定格式的元數(shù)據(jù);對指定格式的元數(shù)據(jù)進(jìn)行計(jì)算。
可選地,所述計(jì)算任務(wù)配置的處理規(guī)則中還包括:存儲規(guī)則;該裝置進(jìn)一步包括:
數(shù)據(jù)存儲單元,適于在所述對待處理數(shù)據(jù)進(jìn)行計(jì)算之后,將計(jì)算結(jié)果存儲到相應(yīng)的存儲介質(zhì)中,供用戶對計(jì)算結(jié)果進(jìn)行查詢。
由上述可知,本發(fā)明提供的技術(shù)方案描述了實(shí)時(shí)計(jì)算平臺上的數(shù)據(jù)處理流程,該數(shù)據(jù)處理流程是依據(jù)實(shí)時(shí)計(jì)算平臺接收到的計(jì)算任務(wù)的配置信息而展開的,確定該計(jì)算任務(wù)配置的數(shù)據(jù)源,調(diào)度多個(gè)接收器從數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行處理。依據(jù)本方案,相當(dāng)于利用多個(gè)相互獨(dú)立的進(jìn)程并行地完成從數(shù)據(jù)源獲取待處理數(shù)據(jù)并等待處理的過程,有效地提高了實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)吞吐量,滿足大數(shù)據(jù)處理需求。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說明
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理方法的流程圖;
圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理裝置的示意圖;
圖3示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的一種實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理裝置的示意圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理方法的流程圖。如圖1所示,該方法包括:
步驟S110,接收計(jì)算任務(wù),讀取該計(jì)算任務(wù)的配置信息。
步驟S120,根據(jù)配置信息中的數(shù)據(jù)源信息,確定該計(jì)算任務(wù)配置的數(shù)據(jù)源。
步驟S130,調(diào)度多個(gè)接收器從數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存。
步驟S140,根據(jù)配置信息中的處理規(guī)則,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行相應(yīng)處理。
可見,圖1所示的方法描述了實(shí)時(shí)計(jì)算平臺上的數(shù)據(jù)處理流程,該數(shù)據(jù)處理流程是依據(jù)實(shí)時(shí)計(jì)算平臺接收到的計(jì)算任務(wù)的配置信息而展開的,確定該計(jì)算任務(wù)配置的數(shù)據(jù)源,調(diào)度多個(gè)接收器從數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行處理。依據(jù)本方案,相當(dāng)于利用多個(gè)相互獨(dú)立的進(jìn)程并行地完成從數(shù)據(jù)源獲取待處理數(shù)據(jù)并等待處理的過程,有效地提高了實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)吞吐量,滿足大數(shù)據(jù)處理需求。
在本發(fā)明的一個(gè)實(shí)施例中,所接收的計(jì)算任務(wù)的配置信息是由用戶配置輸入的,具體地,實(shí)時(shí)計(jì)算平臺的前端與用戶進(jìn)行交互,根據(jù)用戶配置輸入的配置信息創(chuàng)建計(jì)算任務(wù),如以網(wǎng)頁頁面的形式向用戶展示多個(gè)輸入框,用戶通過在輸入框中進(jìn)行輸入設(shè)置來完成配置信息的配置過程;前端將創(chuàng)建的計(jì)算任務(wù)提交到實(shí)時(shí)計(jì)算平臺,實(shí)時(shí)計(jì)算平臺接收計(jì)算任務(wù),讀取該計(jì)算任務(wù)的配置信息,根據(jù)配置信息中的數(shù)據(jù)源信息展開相應(yīng)的數(shù)據(jù)處理國傳給你。該實(shí)時(shí)計(jì)算平臺為不同的數(shù)據(jù)處理需求開設(shè)了統(tǒng)一的接口,用戶無需為數(shù)據(jù)處理過程編寫完整的程序代碼,只需要將對應(yīng)于數(shù)據(jù)處理需求的配置信息輸入到前端創(chuàng)建計(jì)算任務(wù)即可,便于實(shí)施,十分省時(shí)省力,實(shí)時(shí)計(jì)算平臺的整合性好、實(shí)時(shí)性高、效率高、與用戶交互友好,且可以同時(shí)運(yùn)行多個(gè)計(jì)算任務(wù),符合當(dāng)前的大數(shù)據(jù)發(fā)展趨勢。
在本發(fā)明的一個(gè)實(shí)施例中,實(shí)時(shí)計(jì)算平臺所接收到的計(jì)算任務(wù)配置的數(shù)據(jù)源為指定的Kafka數(shù)據(jù)源,該指定的Kafka數(shù)據(jù)源配置有一個(gè)Zookeeper服務(wù)器;則步驟S130中調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)包括:調(diào)度多個(gè)接收器通過所述Zookeeper服務(wù)器與所述指定的Kafka數(shù)據(jù)源建立連接,從所述指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù),并將每次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息保存在所述Zookeeper服務(wù)器中。則上述從指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù)包括:從Zookeeper服務(wù)器中獲取前一次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息,根據(jù)數(shù)據(jù)讀取位置信息,從指定的Kafka數(shù)據(jù)源中的相應(yīng)位置讀取待處理數(shù)據(jù)。
Kafka數(shù)據(jù)源是一個(gè)基于推送訂閱分布式數(shù)據(jù)源,它具備快速、可擴(kuò)展、可持久化的特點(diǎn)。kafka對數(shù)據(jù)保存時(shí)根據(jù)主題(Topic)進(jìn)行歸類,發(fā)送數(shù)據(jù)者稱為制造者(Producer),數(shù)據(jù)接收者稱為消費(fèi)者(Consumer),Kafka數(shù)據(jù)源對應(yīng)于Kafka集群,Kafka集群有多個(gè)kafka服務(wù)器組成,每個(gè)kafka服務(wù)器稱為代理者(broker),無論是Kafka集群、制造者和消費(fèi)者都依賴于Zookeeper服務(wù)器來維持關(guān)聯(lián)可用性并保存Kafka集群的一些相關(guān)信息。在Kafka數(shù)據(jù)源中,一個(gè)主題的數(shù)據(jù)可以認(rèn)為是一類數(shù)據(jù),每個(gè)主題將被分成多個(gè)數(shù)據(jù)隊(duì)列(partition),對于每個(gè)數(shù)據(jù)隊(duì)列,任何發(fā)布到此數(shù)據(jù)隊(duì)列的數(shù)據(jù)都會(huì)被直接追加到該數(shù)據(jù)隊(duì)列的尾部,每條數(shù)據(jù)在數(shù)據(jù)隊(duì)列中的位置稱為偏移量(offset),偏移量為一個(gè)long型數(shù)字,它用來唯一地標(biāo)記一條數(shù)據(jù)的位置信息。
Kafka數(shù)據(jù)源使用Zookeeper服務(wù)器來存儲一些相關(guān)信息,并使用了Zookeeper watch機(jī)制來發(fā)現(xiàn)相關(guān)信息的變更并作出相應(yīng)的動(dòng)作(比如當(dāng)監(jiān)測到消費(fèi)者失效時(shí),觸發(fā)負(fù)載均衡等),當(dāng)一個(gè)Kafka服務(wù)器啟動(dòng)后,首先會(huì)向Zookeeper服務(wù)器注冊自己的節(jié)點(diǎn)信息(臨時(shí)znode),該Kafka服務(wù)器還會(huì)向Zookeeper服務(wù)器注冊自己持有的主題和數(shù)據(jù)隊(duì)列的相關(guān)信息,同時(shí)當(dāng)Kafka服務(wù)器和Zookeeper服務(wù)器斷開連接時(shí),此臨時(shí)節(jié)點(diǎn)信息也會(huì)被刪除,每個(gè)消費(fèi)者客戶端被創(chuàng)建時(shí),會(huì)向Zookeeper注冊自己的信息。
基于以上說明,在本實(shí)施例中,指定的Kafka數(shù)據(jù)源在其配置的Zookeeper服務(wù)器中注冊了每個(gè)Kafka服務(wù)器的節(jié)點(diǎn)信息以及每個(gè)Kafka服務(wù)器中持有的數(shù)據(jù)隊(duì)列的信息,各數(shù)據(jù)隊(duì)列中的數(shù)據(jù)即為本方案要獲取的待處理數(shù)據(jù);每個(gè)接收器作為指定的Kafka數(shù)據(jù)源的消費(fèi)者,在創(chuàng)建者向該指定的Kafka數(shù)據(jù)源配置的Zookeeper服務(wù)器中注冊了自己的相關(guān)信息;可以看到,Zookeeper服務(wù)器實(shí)質(zhì)上掌握了當(dāng)前Kafka數(shù)據(jù)源以及其中的數(shù)據(jù)的相關(guān)信息,也掌握了各接收器的相關(guān)信息,則上述調(diào)度多個(gè)接收器通過所述Zookeeper服務(wù)器與指定的Kafka數(shù)據(jù)源建立連接,從指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù)的過程為:通過Zookeeper服務(wù)器建立多個(gè)接收器和指定的Kafka數(shù)據(jù)源之間的連接,具體地,可以通過Zookeeper服務(wù)器建立各接收器和指定的Kafka數(shù)據(jù)源中的各Kafka服務(wù)器之間的連接,每個(gè)接收器從與其連接的Kafka服務(wù)器中的數(shù)據(jù)隊(duì)列中讀取待處理數(shù)據(jù)。
其中,每個(gè)接收器從Kafka服務(wù)器中的相應(yīng)的數(shù)據(jù)隊(duì)列中讀取待處理數(shù)據(jù)時(shí),Kafka服務(wù)器會(huì)將在該數(shù)據(jù)隊(duì)列中的相應(yīng)的數(shù)據(jù)讀取位置記錄下來并發(fā)送至Zookeeper服務(wù)器中進(jìn)行保存;則接收器在下一次從該數(shù)據(jù)隊(duì)列中讀取待處理數(shù)據(jù)時(shí),先要從Zookeeper服務(wù)器獲取前一次在該數(shù)據(jù)隊(duì)列中的數(shù)據(jù)讀取位置,從該數(shù)據(jù)讀取位置中的數(shù)據(jù)讀取結(jié)束位置開始,進(jìn)行下一次的讀取?;蛘撸總€(gè)接收器從Kafka服務(wù)器中的相應(yīng)的數(shù)據(jù)隊(duì)列中讀取待處理數(shù)據(jù)時(shí),Kafka服務(wù)器記錄本次讀取的最后一條數(shù)據(jù)的偏移量(offset)并發(fā)送至Zookeeper服務(wù)器中進(jìn)行保存;則接收器在下一次從該數(shù)據(jù)隊(duì)列中讀取待處理數(shù)據(jù)時(shí),先要從Zookeeper服務(wù)器獲取前一次在該數(shù)據(jù)隊(duì)列中讀取的最后一條數(shù)據(jù)的偏移量,從該偏移量開始,進(jìn)行下一次的讀取。
進(jìn)一步地在本發(fā)明的另一個(gè)實(shí)施例中,實(shí)時(shí)計(jì)算平臺所接收到的計(jì)算任務(wù)配置的數(shù)據(jù)源同樣也是指定的Kafka數(shù)據(jù)源,但與前一個(gè)實(shí)施例不同的是,本實(shí)施例所調(diào)度的多個(gè)接收器不通過指定的Kafka數(shù)據(jù)源配置的Zookeeper服務(wù)器獲取待處理數(shù)據(jù),也不根據(jù)獲取待處理數(shù)據(jù)的過程對Zookeeper服務(wù)器中的相關(guān)信息進(jìn)行更新,具體地,步驟S130中調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)包括:調(diào)度多個(gè)接收器直接與指定的Kafka數(shù)據(jù)源建立連接,從指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù),并將每次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息保存在信息維護(hù)數(shù)據(jù)庫中,該信息維護(hù)數(shù)據(jù)庫是實(shí)時(shí)計(jì)算平臺上的數(shù)據(jù)庫。則從指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù)包括:從信息維護(hù)數(shù)據(jù)庫中獲取前一次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息,根據(jù)該數(shù)據(jù)讀取位置信息,從指定的Kafka數(shù)據(jù)源中的相應(yīng)位置讀取待處理數(shù)據(jù)。
前文已經(jīng)對Kafka數(shù)據(jù)源的基本屬性進(jìn)行了說明,本實(shí)施例中調(diào)度多個(gè)接收器直接與指定的Kafka數(shù)據(jù)源建立連接,從指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù)的過程是:對于每個(gè)接收器,以Kafka數(shù)據(jù)源中的一個(gè)Kafka服務(wù)器中的一個(gè)數(shù)據(jù)隊(duì)列為目標(biāo),直接從該數(shù)據(jù)隊(duì)列中讀取待處理數(shù)據(jù)。
其中,每個(gè)接收器從Kafka服務(wù)器中的相應(yīng)的數(shù)據(jù)隊(duì)列中讀取待處理數(shù)據(jù)時(shí),該接收器還將在該數(shù)據(jù)隊(duì)列中的相應(yīng)的數(shù)據(jù)讀取位置保存到信息維護(hù)數(shù)據(jù)庫中;則接收器在下一次從該數(shù)據(jù)隊(duì)列中讀取待處理數(shù)據(jù)時(shí),先要從信息維護(hù)數(shù)據(jù)庫中查詢前一次在該數(shù)據(jù)隊(duì)列中的數(shù)據(jù)讀取位置,從該數(shù)據(jù)讀取位置中的數(shù)據(jù)讀取結(jié)束位置開始,進(jìn)行下一次的讀取。或者,每個(gè)接收器從Kafka服務(wù)器中的相應(yīng)的數(shù)據(jù)隊(duì)列中讀取待處理數(shù)據(jù)時(shí),該接收器還將本次讀取的最后一條數(shù)據(jù)的偏移量(offset)保存到信息維護(hù)數(shù)據(jù)庫中;則接收器在下一次從該數(shù)據(jù)隊(duì)列中讀取待處理數(shù)據(jù)時(shí),先要從信息維護(hù)數(shù)據(jù)庫中查詢前一次在該數(shù)據(jù)隊(duì)列中讀取的最后一條數(shù)據(jù)的偏移量,從該偏移量開始,進(jìn)行下一次的讀取。
前一個(gè)實(shí)施例是通過Zookeeper服務(wù)器將指定的Kafka數(shù)據(jù)源中的數(shù)據(jù)隊(duì)列分配給所調(diào)度的多個(gè)接收器,每個(gè)接收器從Zookeeper服務(wù)器分配的數(shù)據(jù)隊(duì)列中讀取待處理數(shù)據(jù),而本實(shí)施例是為各個(gè)接收器主動(dòng)確定作為目標(biāo)的數(shù)據(jù)隊(duì)列,每個(gè)接收器從自己確定的數(shù)據(jù)隊(duì)列中讀取待處理數(shù)據(jù),比較而言,Zookeeper服務(wù)器在分配時(shí)要考慮到指定的Kafka數(shù)據(jù)源中的各個(gè)工作組件的負(fù)載均衡,而本實(shí)施例的分配方式只需考慮多個(gè)接收器的負(fù)載均衡,本實(shí)施例的方式使得數(shù)據(jù)隊(duì)列相對于接收器來說分配更加均勻,且各接收器參與到了目標(biāo)數(shù)據(jù)隊(duì)列的確定、數(shù)據(jù)讀取、相關(guān)信息的記錄等過程,比前一個(gè)實(shí)施例中的參與程度更高,即本實(shí)施例中的接收器的利用程度更高。
可以知道,指定的Kafka數(shù)據(jù)源包括多個(gè)數(shù)據(jù)隊(duì)列;則步驟S130調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存包括:調(diào)度多個(gè)接收器從指定的Kafka數(shù)據(jù)源中的多個(gè)數(shù)據(jù)隊(duì)列中獲取待處理數(shù)據(jù)并保存,其中,多個(gè)數(shù)據(jù)隊(duì)列被均勻分配給多個(gè)接收器進(jìn)行數(shù)據(jù)讀取。例如,指定的Kafka數(shù)據(jù)源中包括20個(gè)數(shù)據(jù)隊(duì)列,可以調(diào)度10個(gè)接收器并行地從指定的Kafka數(shù)據(jù)源中獲取待處理數(shù)據(jù),每個(gè)接收器從2個(gè)數(shù)據(jù)隊(duì)列中讀取待處理數(shù)據(jù),使得待處理數(shù)據(jù)相對均衡地分散在每個(gè)接收器上。
在本發(fā)明的一個(gè)實(shí)施例中,步驟S130中調(diào)度多個(gè)接收器從數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存包括:每隔預(yù)設(shè)時(shí)間間隔,調(diào)度多個(gè)接收器從數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存。
在本發(fā)明的一個(gè)實(shí)施例中,步驟S130中調(diào)度多個(gè)接收器從數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存包括:調(diào)度多個(gè)接收器,每個(gè)接收器開啟一個(gè)進(jìn)程,每個(gè)進(jìn)程調(diào)度一個(gè)或多個(gè)線程,通過多個(gè)進(jìn)程從數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存。
在本發(fā)明的一個(gè)實(shí)施例中,預(yù)設(shè)數(shù)據(jù)清理觸發(fā)時(shí)機(jī);當(dāng)達(dá)到數(shù)據(jù)清理觸發(fā)時(shí)機(jī)時(shí),判斷多個(gè)接收器中是否存在已過期數(shù)據(jù);是則,對多個(gè)接收器中的已過期數(shù)據(jù)進(jìn)行清理。默認(rèn)地,接收器會(huì)每隔第一預(yù)設(shè)時(shí)間間隔,對自身保存的已過期數(shù)據(jù)進(jìn)行清理,但是在一些情況下,接收器對已過期數(shù)據(jù)的判斷失誤會(huì)導(dǎo)致清理不干凈,例如,一個(gè)接收器中保存有待處理數(shù)據(jù),在9:00時(shí)實(shí)時(shí)計(jì)算平臺對該接收器中保存的數(shù)據(jù)a進(jìn)行了相應(yīng)的計(jì)算處理,9:05時(shí),接收器判斷出后面的數(shù)據(jù)對該數(shù)據(jù)a存在依賴,認(rèn)為數(shù)據(jù)a還是有用的,不是已過期數(shù)據(jù),沒有對數(shù)據(jù)a進(jìn)行清理,在一些情況下,接收器的判斷是錯(cuò)誤的,后面的數(shù)據(jù)對數(shù)據(jù)a不存在依賴,使得數(shù)據(jù)a作為已過期數(shù)據(jù)被遺留在該接收器中,對于此種情況,當(dāng)達(dá)到數(shù)據(jù)清理觸發(fā)時(shí)機(jī)時(shí),判斷多個(gè)接收器中是否存在已過期數(shù)據(jù),即對該接收器中遺留下來的該接收器任務(wù)不是已過期數(shù)據(jù)的數(shù)據(jù)進(jìn)行再次判斷,提高判斷準(zhǔn)確率,對確定為已過期數(shù)據(jù)的數(shù)據(jù)a進(jìn)行清理。
在本發(fā)明的一個(gè)實(shí)施例中,計(jì)算任務(wù)配置的處理規(guī)則中包括:數(shù)據(jù)計(jì)算觸發(fā)時(shí)機(jī)和計(jì)算規(guī)則;則步驟S140根據(jù)配置信息中的處理規(guī)則,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行相應(yīng)處理包括:判斷是否達(dá)到數(shù)據(jù)計(jì)算觸發(fā)時(shí)機(jī),是則,從各接收器中讀取待處理數(shù)據(jù);根據(jù)計(jì)算規(guī)則,對待處理數(shù)據(jù)進(jìn)行計(jì)算。對于保存在多個(gè)接收器中的待處理數(shù)據(jù),本實(shí)施例提出了依據(jù)數(shù)據(jù)計(jì)算觸發(fā)時(shí)機(jī)啟動(dòng)后續(xù)計(jì)算處理過程的方案,數(shù)據(jù)計(jì)算觸發(fā)時(shí)機(jī)可以是預(yù)設(shè)的時(shí)間、預(yù)設(shè)的指令、預(yù)設(shè)的事件等,在此不作限制。
在本發(fā)明的一個(gè)實(shí)施例中,計(jì)算任務(wù)配置的處理規(guī)則中還包括:解析條件;則在對待處理數(shù)據(jù)進(jìn)行計(jì)算之前,步驟S140根據(jù)計(jì)算任務(wù)配置的處理規(guī)則,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行相應(yīng)處理還包括:根據(jù)解析條件,將待處理數(shù)據(jù)中符合解析條件的字段解析為指定格式的元數(shù)據(jù);則對待處理數(shù)據(jù)進(jìn)行計(jì)算包括:對指定格式的元數(shù)據(jù)進(jìn)行計(jì)算。
具體地,上述將待處理數(shù)據(jù)中符合解析條件的字段解析為指定格式的元數(shù)據(jù)包括:
方式一,根據(jù)待處理數(shù)據(jù)的格式,確定適配于待處理數(shù)據(jù)的一個(gè)或多個(gè)解析函數(shù);創(chuàng)建待處理數(shù)據(jù)對應(yīng)的解析器,在該解析器中動(dòng)態(tài)注冊所述一個(gè)或多個(gè)解析函數(shù);通過調(diào)用所創(chuàng)建的解析器將待處理數(shù)據(jù)中符合解析條件的字段解析為指定格式的元數(shù)據(jù)。
其中,解析函數(shù)包括如下一種或多種:Base64decode函數(shù)、base64encode函數(shù)、urldecode函數(shù)、urlencode函數(shù)、isNum函數(shù)、isVer函數(shù)、getDay函數(shù)、getHour函數(shù)、getMin函數(shù),其中,Base64decode函數(shù)用于對Base64編碼的數(shù)據(jù)進(jìn)行解碼,base64encode函數(shù)用于對數(shù)據(jù)進(jìn)行Base64編碼,urldecode函數(shù)用于還原url編碼字符串,urlencode函數(shù)用于對字符串進(jìn)行url編碼,isNum函數(shù)用于判斷是否是數(shù)字,isVer函數(shù)用于判斷是否是版本,getDay函數(shù)用于獲取時(shí)間的日期信息,getHour函數(shù)用于獲取時(shí)間的小時(shí)信息,getMin函數(shù)用于獲取時(shí)間的分鐘信息。本實(shí)施例通過在創(chuàng)建的解析器中動(dòng)態(tài)注冊解析待處理數(shù)據(jù)所需的解析函數(shù),實(shí)現(xiàn)了對解析器的動(dòng)態(tài)定制,可以動(dòng)態(tài)地適配待處理數(shù)據(jù)的形式的多樣化。
方式二,預(yù)存多個(gè)基本解析器,每個(gè)基本解析器適配于一種基本數(shù)據(jù)格式。具體地,基本解析器包括如下一種或多種:Apache日志解析器、Nginx日志解析器、數(shù)組日志解析器、Json日志解析器、分割符解析器,Apache日志解析器適配于Apache日志的數(shù)據(jù)格式,Nginx日志解析器適配于Nginx日志的數(shù)據(jù)格式,數(shù)組日志解析器適配于數(shù)組日志的數(shù)據(jù)格式,Json日志解析器適配于Json日志的數(shù)據(jù)格式,分割符解析器適配于以指定分割符進(jìn)行字段分割的數(shù)據(jù)格式。
當(dāng)待處理數(shù)據(jù)的格式為單一基本數(shù)據(jù)格式時(shí),從預(yù)存的多個(gè)基本解析器中查找適配于該基本數(shù)據(jù)格式的基本解析器,通過調(diào)用查找到的基本解析器將待處理數(shù)據(jù)中符合解析條件的字段解析為指定格式的元數(shù)據(jù)。
當(dāng)待處理數(shù)據(jù)的格式為多種基本數(shù)據(jù)格式的組合時(shí),對于每種基本數(shù)據(jù)格式,從預(yù)存的多個(gè)基本解析器中查找適配于該基本數(shù)據(jù)格式的基本解析器,通過調(diào)用查找到的多個(gè)基本解析器的組合將待處理數(shù)據(jù)中符合解析條件的字段解析為指定格式的元數(shù)據(jù)。
例如,接收到的待處理數(shù)據(jù)是Apache日志,對應(yīng)于Apache日志的數(shù)據(jù)格式,是單一基本數(shù)據(jù)格式,則對接收到的待處理數(shù)據(jù)進(jìn)行解析的過程是:從預(yù)存的多個(gè)基本解析器中查找到Apache日志解析器,通過調(diào)用該Apache日志解析器將待處理數(shù)據(jù)中的字段解析為指定格式的元數(shù)據(jù)?;蛘撸邮盏降拇幚頂?shù)據(jù)是由分割符進(jìn)行字段分割的,如“字段1&字段2”,其中“&”是分割符,字段1是數(shù)組格式,字段2是Json格式,則在對接收到的待處理數(shù)據(jù)進(jìn)行解析時(shí),需要調(diào)用分割符解析器、數(shù)組日志解析器和Json日志解析器的組合將待處理數(shù)據(jù)中的字段解析為指定格式的元數(shù)據(jù),數(shù)組日志解析器和Json日志解析器是并列式組合,分割符解析器與該并列式組合形成層級式組合,具體地,先通過調(diào)用分隔符解析器分別解析出字段1和字段2,再通過調(diào)用數(shù)組日志解析器對字段1進(jìn)行解析,以及通過調(diào)用Json日志解析器對字段2進(jìn)行解析。
進(jìn)一步地,在通過調(diào)用該條待處理數(shù)據(jù)對應(yīng)的解析器將該條待處理數(shù)據(jù)中符合所述解析條件的字段解析為指定格式的元數(shù)據(jù)之后,上述方法進(jìn)一步包括:將所調(diào)用的解析器放入指定全局變量數(shù)據(jù)庫中。則通過調(diào)用該條待處理數(shù)據(jù)對應(yīng)的解析器將該條待處理數(shù)據(jù)中符合解析條件的字段解析為指定格式的元數(shù)據(jù)包括:根據(jù)該條待處理數(shù)據(jù)的格式,從所述指定全局變量數(shù)據(jù)庫中查找該條待處理數(shù)據(jù)對應(yīng)的解析器;如果查找到,直接通過調(diào)用查找到的解析器將該條待處理數(shù)據(jù)中符合解析條件的字段解析為指定格式的元數(shù)據(jù);如果未查找到,創(chuàng)建該條待處理數(shù)據(jù)對應(yīng)的解析器,通過調(diào)用所創(chuàng)建的解析器將該條待處理數(shù)據(jù)中符合解析條件的字段解析為指定格式的元數(shù)據(jù)。
例如,從同一數(shù)據(jù)源接收到待處理數(shù)據(jù)1和待處理數(shù)據(jù)2,待處理數(shù)據(jù)1和待處理數(shù)據(jù)2具有相同的數(shù)據(jù)格式,先對待處理數(shù)據(jù)1進(jìn)行解析,創(chuàng)建待處理數(shù)據(jù)1對應(yīng)的解析器1,將待處理數(shù)據(jù)1中的字段解析為指定格式的元數(shù)據(jù),在解析之后,將解析器1放入指定全局變量數(shù)據(jù)庫中,使得該解析器1作為全局變量存在可以被方便地調(diào)用,則在對待處理數(shù)據(jù)2進(jìn)行解析時(shí),先從指定全局變量數(shù)據(jù)庫中查找是否有待處理數(shù)據(jù)2對應(yīng)的解析器,由于待處理數(shù)據(jù)2與待處理數(shù)據(jù)1的數(shù)據(jù)格式相同,解析器1同樣適配于待處理數(shù)據(jù)2,因此,直接通過調(diào)用指定全局變量數(shù)據(jù)庫中的解析器1對待處理數(shù)據(jù)2進(jìn)行解析,避免了適配于相同數(shù)據(jù)格式的解析器的重復(fù)創(chuàng)建,避免不必要的系統(tǒng)資源的使用,且直接全局地找解析器的過程比重新創(chuàng)建解析器的過程快得多,加快了解析過程,保證日志處理過程的實(shí)時(shí)性。
進(jìn)一步地,計(jì)算任務(wù)配置的處理規(guī)則中還包括:存儲規(guī)則;則在對待處理數(shù)據(jù)進(jìn)行計(jì)算之后,該方法進(jìn)一步包括:根據(jù)存儲規(guī)則,將計(jì)算結(jié)果存儲到相應(yīng)的存儲介質(zhì)中,供用戶對計(jì)算結(jié)果進(jìn)行查詢。其中,所述存儲介質(zhì)包括如下一種或多種:Redis數(shù)據(jù)庫,大存儲Redis數(shù)據(jù)庫,Mysql數(shù)據(jù)庫,HBase數(shù)據(jù)庫,HDFS數(shù)據(jù)庫,GreenPlum數(shù)據(jù)庫。不同的存儲介質(zhì)具有不同的特性,可以根據(jù)存儲需求選擇合適的存儲介質(zhì),如Redis數(shù)據(jù)庫是基于key-value形式在內(nèi)存中進(jìn)行存儲的,但當(dāng)數(shù)據(jù)量達(dá)到一定程度時(shí),可以采用基于磁盤進(jìn)行存儲的大存儲Redis數(shù)據(jù)庫來分擔(dān)存儲壓力,或者也可以采用分布式存儲的GreenPlum數(shù)據(jù)庫來分擔(dān)存儲壓力,使得往存儲介質(zhì)中寫數(shù)據(jù)以及從存儲介質(zhì)中讀取數(shù)據(jù)的過程較為快捷,保證實(shí)時(shí)計(jì)算平臺的實(shí)時(shí)性、有效性和穩(wěn)定性。
在一個(gè)具體的例子中,在將統(tǒng)計(jì)處理結(jié)果保存到存儲介質(zhì)中之前,還可以對統(tǒng)計(jì)處理結(jié)果進(jìn)行聚合處理,以減輕存儲介質(zhì)的壓力,或者,在實(shí)時(shí)程度要求范圍之內(nèi),設(shè)定觸發(fā)存儲的條件,在得到統(tǒng)計(jì)處理結(jié)果后,不直接進(jìn)行存儲,而是在滿足觸發(fā)存儲的條件后進(jìn)行存儲,同樣可以減輕存儲壓力。
圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理裝置的示意圖。如圖2所示,該實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理裝置200包括:
任務(wù)接收單元210,適于接收計(jì)算任務(wù),讀取該計(jì)算任務(wù)的配置信息;并適于根據(jù)配置信息中的數(shù)據(jù)源信息,確定該計(jì)算任務(wù)配置的數(shù)據(jù)源。
數(shù)據(jù)接收單元220,適于調(diào)度多個(gè)接收器從數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存。
數(shù)據(jù)處理單元230,適于根據(jù)配置信息中的處理規(guī)則,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行相應(yīng)處理。
可見,圖2所示的裝置執(zhí)行了實(shí)時(shí)計(jì)算平臺上的數(shù)據(jù)處理流程,該數(shù)據(jù)處理流程是依據(jù)實(shí)時(shí)計(jì)算平臺接收到的計(jì)算任務(wù)的配置信息而展開的,確定該計(jì)算任務(wù)配置的數(shù)據(jù)源,調(diào)度多個(gè)接收器從數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行處理。依據(jù)本方案,相當(dāng)于利用多個(gè)相互獨(dú)立的進(jìn)程并行地完成從數(shù)據(jù)源獲取待處理數(shù)據(jù)并等待處理的過程,有效地提高了實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)吞吐量,滿足大數(shù)據(jù)處理需求。
在本發(fā)明的一個(gè)實(shí)施例中,計(jì)算任務(wù)配置的數(shù)據(jù)源為指定的Kafka數(shù)據(jù)源。其中,指定的Kafka數(shù)據(jù)源配置有一個(gè)Zookeeper服務(wù)器。則數(shù)據(jù)接收單元220,適于調(diào)度多個(gè)接收器通過Zookeeper服務(wù)器與指定的Kafka數(shù)據(jù)源建立連接,從指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù),并將每次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息保存在Zookeeper服務(wù)器中。數(shù)據(jù)接收單元220還適于從Zookeeper服務(wù)器中獲取前一次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息,根據(jù)數(shù)據(jù)讀取位置信息,從指定的Kafka數(shù)據(jù)源中的相應(yīng)位置讀取待處理數(shù)據(jù)。
進(jìn)一步地,數(shù)據(jù)接收單元220,適于調(diào)度多個(gè)接收器直接與指定的Kafka數(shù)據(jù)源建立連接,從指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù),并將每次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息保存在信息維護(hù)數(shù)據(jù)庫中。數(shù)據(jù)接收單元220還適于從所述信息維護(hù)數(shù)據(jù)庫中獲取前一次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息,根據(jù)該數(shù)據(jù)讀取位置信息,從指定的Kafka數(shù)據(jù)源中的相應(yīng)位置讀取待處理數(shù)據(jù)。
具體地,指定的Kafka數(shù)據(jù)源包括多個(gè)數(shù)據(jù)隊(duì)列。則數(shù)據(jù)接收單元220,適于調(diào)度多個(gè)接收器從指定的Kafka數(shù)據(jù)源中的多個(gè)數(shù)據(jù)隊(duì)列中獲取待處理數(shù)據(jù)并保存,其中,多個(gè)數(shù)據(jù)隊(duì)列被均勻分配給多個(gè)接收器進(jìn)行數(shù)據(jù)讀取。
在本發(fā)明的一個(gè)實(shí)施例中,數(shù)據(jù)接收單元220,適于每隔預(yù)設(shè)時(shí)間間隔,調(diào)度多個(gè)接收器從數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存。
在本發(fā)明的一個(gè)實(shí)施例中,數(shù)據(jù)接收單元220,適于調(diào)度多個(gè)接收器,每個(gè)接收器開啟一個(gè)進(jìn)程,每個(gè)進(jìn)程調(diào)度一個(gè)或多個(gè)線程,通過多個(gè)進(jìn)程從數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存。
在本發(fā)明的一個(gè)實(shí)施例中,計(jì)算任務(wù)配置的處理規(guī)則中包括:數(shù)據(jù)計(jì)算觸發(fā)時(shí)機(jī)和計(jì)算規(guī)則.
則數(shù)據(jù)處理單元230,適于判斷是否達(dá)到所數(shù)據(jù)計(jì)算觸發(fā)時(shí)機(jī),是則,從各接收器中讀取待處理數(shù)據(jù);根據(jù)計(jì)算規(guī)則,對待處理數(shù)據(jù)進(jìn)行計(jì)算。
進(jìn)一步地,計(jì)算任務(wù)配置的處理規(guī)則中還包括:解析條件。
則數(shù)據(jù)處理單元230,進(jìn)一步適于在對待處理數(shù)據(jù)進(jìn)行計(jì)算之前,根據(jù)解析條件,將待處理數(shù)據(jù)中符合解析條件的字段解析為指定格式的元數(shù)據(jù);對指定格式的元數(shù)據(jù)進(jìn)行計(jì)算。
圖3示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的一種實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理裝置的示意圖。如圖3所示,該實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理裝置300包括:任務(wù)接收單元310、數(shù)據(jù)接收單元320、數(shù)據(jù)處理單元330、數(shù)據(jù)清理單元340和數(shù)據(jù)存儲單元350。
其中,任務(wù)接收單元310、數(shù)據(jù)接收單元320、數(shù)據(jù)處理單元330和圖2所示的任務(wù)接收單元210、數(shù)據(jù)接收單元220、數(shù)據(jù)處理單元230具有對應(yīng)相同的功能,相同的部分在此不再贅述。
數(shù)據(jù)清理單元340,適于預(yù)設(shè)數(shù)據(jù)清理觸發(fā)時(shí)機(jī);當(dāng)達(dá)到數(shù)據(jù)清理觸發(fā)時(shí)機(jī)時(shí),判斷多個(gè)接收器中是否存在已過期數(shù)據(jù);是則,對多個(gè)接收器中的已過期數(shù)據(jù)進(jìn)行清理。
在本實(shí)施例中,計(jì)算任務(wù)配置的處理規(guī)則中還包括:存儲規(guī)則。
數(shù)據(jù)存儲單元350,適于在對待處理數(shù)據(jù)進(jìn)行計(jì)算之后,將計(jì)算結(jié)果存儲到相應(yīng)的存儲介質(zhì)中,供用戶對計(jì)算結(jié)果進(jìn)行查詢。
需要說明的是,圖2-圖3所示裝置的各實(shí)施例與圖1所示方法的各實(shí)施例對應(yīng)相同,上文中已有詳細(xì)說明,在此不再贅述。
綜上所述,本發(fā)明提供的技術(shù)方案執(zhí)行了實(shí)時(shí)計(jì)算平臺上的數(shù)據(jù)處理流程,該數(shù)據(jù)處理流程是依據(jù)實(shí)時(shí)計(jì)算平臺接收到的計(jì)算任務(wù)的配置信息而展開的,確定該計(jì)算任務(wù)配置的數(shù)據(jù)源,調(diào)度多個(gè)接收器從數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行處理。依據(jù)本方案,相當(dāng)于利用多個(gè)相互獨(dú)立的進(jìn)程并行地完成從數(shù)據(jù)源獲取待處理數(shù)據(jù)并等待處理的過程,有效地提高了實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)吞吐量,滿足大數(shù)據(jù)處理需求。
需要說明的是:
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬裝置或者其它設(shè)備固有相關(guān)。各種通用裝置也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類裝置所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中。可以把實(shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的一種實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
本發(fā)明公開了A1、一種實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理方法,其中,該方法包括:
接收計(jì)算任務(wù),讀取該計(jì)算任務(wù)的配置信息;
根據(jù)所述配置信息中的數(shù)據(jù)源信息,確定該計(jì)算任務(wù)配置的數(shù)據(jù)源;
調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存;
根據(jù)所述配置信息中的處理規(guī)則,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行相應(yīng)處理。
A2、如A1所述的方法,其中,所述計(jì)算任務(wù)配置的數(shù)據(jù)源為指定的Kafka數(shù)據(jù)源。
A3、如A2所述的方法,其中,所述指定的Kafka數(shù)據(jù)源配置有一個(gè)Zookeeper服務(wù)器;
所述調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)包括:
調(diào)度多個(gè)接收器通過所述Zookeeper服務(wù)器與所述指定的Kafka數(shù)據(jù)源建立連接,從所述指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù),并將每次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息保存在所述Zookeeper服務(wù)器中。
A4、如A3所述的方法,其中,所述從所述指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù)包括:
從所述Zookeeper服務(wù)器中獲取前一次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息,根據(jù)所述數(shù)據(jù)讀取位置信息,從所述指定的Kafka數(shù)據(jù)源中的相應(yīng)位置讀取待處理數(shù)據(jù)。
A5、如A2所述的方法,其中,所述調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)包括:
調(diào)度多個(gè)接收器直接與所述指定的Kafka數(shù)據(jù)源建立連接,從所述指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù),并將每次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息保存在信息維護(hù)數(shù)據(jù)庫中。
A6、如A5所述的方法,其中,所述從所述指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù)包括:
從所述信息維護(hù)數(shù)據(jù)庫中獲取前一次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息,根據(jù)該數(shù)據(jù)讀取位置信息,從所述指定的Kafka數(shù)據(jù)源中的相應(yīng)位置讀取待處理數(shù)據(jù)。
A7、如A2所述的方法,其中,所述指定的Kafka數(shù)據(jù)源包括多個(gè)數(shù)據(jù)隊(duì)列;
所述調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存包括:
調(diào)度多個(gè)接收器從所述指定的Kafka數(shù)據(jù)源中的多個(gè)數(shù)據(jù)隊(duì)列中獲取待處理數(shù)據(jù)并保存,其中,所述多個(gè)數(shù)據(jù)隊(duì)列被均勻分配給所述多個(gè)接收器進(jìn)行數(shù)據(jù)讀取。
A8、如A1所述的方法,其中,所述調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存包括:
每隔預(yù)設(shè)時(shí)間間隔,調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存。
A9、如A1所述的方法,其中,所述調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存包括:
調(diào)度多個(gè)接收器,每個(gè)接收器開啟一個(gè)進(jìn)程,每個(gè)進(jìn)程調(diào)度一個(gè)或多個(gè)線程,通過所述多個(gè)進(jìn)程從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存。
A10、如A1所述的方法,其中,所述計(jì)算任務(wù)配置的處理規(guī)則中包括:數(shù)據(jù)計(jì)算觸發(fā)時(shí)機(jī)和計(jì)算規(guī)則;
所述根據(jù)所述配置信息中的處理規(guī)則,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行相應(yīng)處理包括:
判斷是否達(dá)到所述數(shù)據(jù)計(jì)算觸發(fā)時(shí)機(jī),是則,從各接收器中讀取待處理數(shù)據(jù);
根據(jù)所述計(jì)算規(guī)則,對待處理數(shù)據(jù)進(jìn)行計(jì)算。
A11、如A1所述的方法,其中,該方法進(jìn)一步包括:
預(yù)設(shè)數(shù)據(jù)清理觸發(fā)時(shí)機(jī);
當(dāng)達(dá)到所述數(shù)據(jù)清理觸發(fā)時(shí)機(jī)時(shí),判斷所述多個(gè)接收器中是否存在已過期數(shù)據(jù);
是則,對所述多個(gè)接收器中的已過期數(shù)據(jù)進(jìn)行清理。
A12、如A10所述的方法,其中,所述計(jì)算任務(wù)配置的處理規(guī)則中還包括:解析條件;
則在所述對待處理數(shù)據(jù)進(jìn)行計(jì)算之前,所述根據(jù)所述計(jì)算任務(wù)配置的處理規(guī)則,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行相應(yīng)處理還包括:
根據(jù)所述解析條件,將待處理數(shù)據(jù)中符合解析條件的字段解析為指定格式的元數(shù)據(jù);
所述對待處理數(shù)據(jù)進(jìn)行計(jì)算包括:對指定格式的元數(shù)據(jù)進(jìn)行計(jì)算。
A13、如A10所述的方法,其中,所述計(jì)算任務(wù)配置的處理規(guī)則中還包括:存儲規(guī)則;
則在所述對待處理數(shù)據(jù)進(jìn)行計(jì)算之后,該方法進(jìn)一步包括:
根據(jù)所述存儲規(guī)則,將計(jì)算結(jié)果存儲到相應(yīng)的存儲介質(zhì)中,供用戶對計(jì)算結(jié)果進(jìn)行查詢。
本發(fā)明還公開了B14、一種實(shí)時(shí)計(jì)算平臺的數(shù)據(jù)處理裝置,其中,該裝置包括:
任務(wù)接收單元,適于接收計(jì)算任務(wù),讀取該計(jì)算任務(wù)的配置信息;并適于根據(jù)所述配置信息中的數(shù)據(jù)源信息,確定該計(jì)算任務(wù)配置的數(shù)據(jù)源;
數(shù)據(jù)接收單元,適于調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存;
數(shù)據(jù)處理單元,適于根據(jù)所述配置信息中的處理規(guī)則,從各接收器中讀取待處理數(shù)據(jù)并進(jìn)行相應(yīng)處理。
B15、如B14所述的裝置,其中,所述計(jì)算任務(wù)配置的數(shù)據(jù)源為指定的Kafka數(shù)據(jù)源。
B16、如B15所述的裝置,其中,所述指定的Kafka數(shù)據(jù)源配置有一個(gè)Zookeeper服務(wù)器;
所述數(shù)據(jù)接收單元,適于調(diào)度多個(gè)接收器通過所述Zookeeper服務(wù)器與所述指定的Kafka數(shù)據(jù)源建立連接,從所述指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù),并將每次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息保存在所述Zookeeper服務(wù)器中。
B17、如B16所述的裝置,其中,
所述數(shù)據(jù)接收單元,適于從所述Zookeeper服務(wù)器中獲取前一次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息,根據(jù)所述數(shù)據(jù)讀取位置信息,從所述指定的Kafka數(shù)據(jù)源中的相應(yīng)位置讀取待處理數(shù)據(jù)。
B18、如B15所述的裝置,其中,
所述數(shù)據(jù)接收單元,適于調(diào)度多個(gè)接收器直接與所述指定的Kafka數(shù)據(jù)源建立連接,從所述指定的Kafka數(shù)據(jù)源讀取待處理數(shù)據(jù),并將每次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息保存在信息維護(hù)數(shù)據(jù)庫中。
B19、如B18所述的裝置,其中,
所述數(shù)據(jù)接收單元,適于從所述信息維護(hù)數(shù)據(jù)庫中獲取前一次數(shù)據(jù)讀取過程對應(yīng)的數(shù)據(jù)讀取位置信息,根據(jù)該數(shù)據(jù)讀取位置信息,從所述指定的Kafka數(shù)據(jù)源中的相應(yīng)位置讀取待處理數(shù)據(jù)。
B20、如B15所述的裝置,其中,所述指定的Kafka數(shù)據(jù)源包括多個(gè)數(shù)據(jù)隊(duì)列;
所述數(shù)據(jù)接收單元,適于調(diào)度多個(gè)接收器從所述指定的Kafka數(shù)據(jù)源中的多個(gè)數(shù)據(jù)隊(duì)列中獲取待處理數(shù)據(jù)并保存,其中,所述多個(gè)數(shù)據(jù)隊(duì)列被均勻分配給所述多個(gè)接收器進(jìn)行數(shù)據(jù)讀取。
B21、如B14所述的裝置,其中,
所述數(shù)據(jù)接收單元,適于每隔預(yù)設(shè)時(shí)間間隔,調(diào)度多個(gè)接收器從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存。
B22、如B14所述的裝置,其中,
所述數(shù)據(jù)接收單元,適于調(diào)度多個(gè)接收器,每個(gè)接收器開啟一個(gè)進(jìn)程,每個(gè)進(jìn)程調(diào)度一個(gè)或多個(gè)線程,通過所述多個(gè)進(jìn)程從所述數(shù)據(jù)源獲取待處理數(shù)據(jù)并保存。
B23、如B14所述的裝置,其中,所述計(jì)算任務(wù)配置的處理規(guī)則中包括:數(shù)據(jù)計(jì)算觸發(fā)時(shí)機(jī)和計(jì)算規(guī)則;
所述數(shù)據(jù)處理單元,適于判斷是否達(dá)到所述數(shù)據(jù)計(jì)算觸發(fā)時(shí)機(jī),是則,從各接收器中讀取待處理數(shù)據(jù);根據(jù)所述計(jì)算規(guī)則,對待處理數(shù)據(jù)進(jìn)行計(jì)算。
B24、如B14所述的裝置,其中,該裝置進(jìn)一步包括:
數(shù)據(jù)清理單元,適于預(yù)設(shè)數(shù)據(jù)清理觸發(fā)時(shí)機(jī);當(dāng)達(dá)到所述數(shù)據(jù)清理觸發(fā)時(shí)機(jī)時(shí),判斷所述多個(gè)接收器中是否存在已過期數(shù)據(jù);是則,對所述多個(gè)接收器中的已過期數(shù)據(jù)進(jìn)行清理。
B25、如B23所述的裝置,其中,所述計(jì)算任務(wù)配置的處理規(guī)則中還包括:解析條件;
則所述數(shù)據(jù)處理單元,進(jìn)一步適于在所述對待處理數(shù)據(jù)進(jìn)行計(jì)算之前,根據(jù)所述解析條件,將待處理數(shù)據(jù)中符合解析條件的字段解析為指定格式的元數(shù)據(jù);對指定格式的元數(shù)據(jù)進(jìn)行計(jì)算。
B26、如B23所述的裝置,其中,所述計(jì)算任務(wù)配置的處理規(guī)則中還包括:存儲規(guī)則;該裝置進(jìn)一步包括:
數(shù)據(jù)存儲單元,適于在所述對待處理數(shù)據(jù)進(jìn)行計(jì)算之后,將計(jì)算結(jié)果存儲到相應(yīng)的存儲介質(zhì)中,供用戶對計(jì)算結(jié)果進(jìn)行查詢。