一種基于Kafka和Quartz的分布式爬蟲架構(gòu)及其實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及計(jì)算機(jī)數(shù)據(jù)挖掘技術(shù)領(lǐng)域,具體地說是一種基于Kafka和Quartz的分布式爬蟲架構(gòu)及其實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002]網(wǎng)絡(luò)爬蟲是搜索引擎技術(shù)的基礎(chǔ)組成部分。網(wǎng)絡(luò)爬蟲技術(shù)是從一個(gè)或若干個(gè)初始網(wǎng)頁的URL(Uniform Resource Locator,統(tǒng)一資源定位符)開始,活的初始網(wǎng)頁上的URL,在抓取網(wǎng)頁信息的過程中,根據(jù)網(wǎng)頁的抓取策略,不斷從當(dāng)前頁面上抽取新的URL放入隊(duì)列,直到滿足某種停止條件。然后將抓取到的網(wǎng)頁信息存儲(chǔ)在搜索引擎的服務(wù)器中,從而可以加快用戶的搜索速度。
[0003]隨著互聯(lián)網(wǎng)的爆炸性增長,網(wǎng)絡(luò)所承載的數(shù)據(jù)量已經(jīng)遠(yuǎn)遠(yuǎn)超出人們的想象。在大數(shù)據(jù)時(shí)代,面對(duì)如此巨大的數(shù)據(jù)量,如何快速精準(zhǔn)的檢索信息,如何能夠更高效的收集網(wǎng)絡(luò)信息,顯然變得至關(guān)重要。
[0004]為滿足上述的要求,作為抓取工具的爬蟲必須具備更加優(yōu)越的性能。具備單一節(jié)點(diǎn)的傳統(tǒng)爬蟲架構(gòu)無法滿足海量數(shù)據(jù)的抓取需求。因此,便產(chǎn)生了支持高并發(fā),多節(jié)點(diǎn)分布式部署的分布式爬蟲架構(gòu)。
[0005]對(duì)于分布式爬蟲來說,其中有兩個(gè)需要解決的重點(diǎn)問題是:一,爬取隊(duì)列消息的多節(jié)點(diǎn)分發(fā)問題;二,定時(shí)爬取問題;對(duì)于解決上述兩個(gè)問題,不同的分布式爬蟲架構(gòu)有不同的解決方案,就目前來講,因?yàn)榉植际脚老x架構(gòu)往往是各個(gè)公司的核心機(jī)密,所以一般不會(huì)公開分布式爬蟲的具體實(shí)現(xiàn)細(xì)節(jié)。已經(jīng)開源的常用的分布式爬蟲包括Google Crawler,Mercator ,Nutch等,但開源分布式爬蟲缺乏一定的定制性,不能很好的滿足多變的爬取需求。是否可以利用已有的成熟的單機(jī)爬蟲框架結(jié)合分布式工具完成分布式爬蟲的需求,使其可以滿足大部分的爬取需求,并具備高并發(fā),支持分布式等特征,成為眾多技術(shù)人員研究的方向。
[0006]綜上所述,如何能夠通過單機(jī)爬蟲框架結(jié)合分布式工具完成分布式爬蟲的需求,實(shí)現(xiàn)爬取隊(duì)列消息的多節(jié)點(diǎn)分發(fā)以及定時(shí)爬取是目前現(xiàn)有技術(shù)中存在的問題。
[0007]
【發(fā)明內(nèi)容】
本發(fā)明的技術(shù)任務(wù)是針對(duì)以上不足之處,提供一種基于Kafka和Quartz的分布式爬蟲架構(gòu)及其實(shí)現(xiàn)方法,來解決如何能夠通過單機(jī)爬蟲框架結(jié)合分布式工具完成分布式爬蟲的需求,實(shí)現(xiàn)爬取隊(duì)列消息的多節(jié)點(diǎn)分發(fā)以及定時(shí)爬取的問題。
[0008]本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:一種基于Kafka和Quartz的分布式爬蟲架構(gòu),該爬蟲架構(gòu)包括基礎(chǔ)爬蟲組件、URL存儲(chǔ)隊(duì)列、基于Kafka的URL消息分發(fā)機(jī)制、基于Quartz的爬蟲作業(yè)調(diào)度機(jī)制和前端控制臺(tái);
所述基礎(chǔ)爬蟲組件是基于開源的單機(jī)爬蟲組件,包括頁面解析生成URL、URL過濾器和頁面爬??;
所述URL存儲(chǔ)隊(duì)列,采用內(nèi)存數(shù)據(jù)庫,內(nèi)存數(shù)據(jù)庫用來存儲(chǔ)待爬取以及已經(jīng)爬取完成的URL消息隊(duì)列,實(shí)現(xiàn)分布式爬蟲的增量爬取;其中,URL存儲(chǔ)隊(duì)列利用高校的內(nèi)存數(shù)據(jù)庫來完成,如使用鍵值結(jié)構(gòu)自動(dòng)去重的Redis,或者是具備優(yōu)良性能的伯克利數(shù)據(jù)庫。
[0009]所述基于Kafka的消息分發(fā)機(jī)制,采用生產(chǎn)者-消費(fèi)者異步請求處理機(jī)制,一個(gè)生產(chǎn)者對(duì)應(yīng)N個(gè)消費(fèi)者,分別部署于不同的節(jié)點(diǎn);生產(chǎn)者負(fù)責(zé)產(chǎn)生待爬取的URL消息隊(duì)列,而消費(fèi)者負(fù)責(zé)從待爬取隊(duì)列中獲取URL消息隊(duì)列進(jìn)行爬取,并將已完成的爬取存入已爬取隊(duì)列;其中,Kafka是Linkedin開發(fā)的一種分布式的消息隊(duì)列系統(tǒng)(Message Queue),支持分布式部署,Kafka集群有多個(gè)Broker服務(wù)器組成,每個(gè)類型的消息被定義為topic內(nèi)部的消息按照一定的key和算法被分區(qū)(partit1n)存儲(chǔ)在不同的Broker Iafka采用生產(chǎn)者-消費(fèi)者模式來異步處理請求,信息生產(chǎn)者(Producer)和消費(fèi)者(Consumer)可以在多個(gè)Broker上生產(chǎn)和消費(fèi)topic,達(dá)到消除請求高峰的目的,從而提高系統(tǒng)穩(wěn)定性和吞吐量。
[0010]所述基于Quartz的作業(yè)調(diào)度機(jī)制,負(fù)責(zé)完成對(duì)分布式爬蟲架構(gòu)的爬取作業(yè)的調(diào)度,爬取作業(yè)分為生產(chǎn)者作業(yè)(Producer Job)和消費(fèi)者作業(yè)(Consumer Job)兩種類型,使用不同的作業(yè)調(diào)度規(guī)則進(jìn)行調(diào)度;其中,生產(chǎn)者作業(yè)與消費(fèi)者作業(yè)的對(duì)應(yīng)關(guān)系是I對(duì)N的關(guān)系,N不同,調(diào)度規(guī)則也不同,即由于N的不同,不同組的消費(fèi)者作業(yè)使用不同的調(diào)度規(guī)則,故消費(fèi)者作業(yè)使用不同的作業(yè)調(diào)度規(guī)則;消費(fèi)者端可以部署在多臺(tái)機(jī)器上,生產(chǎn)者僅需部署在一臺(tái)機(jī)器上,這樣就可以實(shí)現(xiàn)爬蟲作業(yè)的分布式部署,通過Quartz的調(diào)度就可以實(shí)現(xiàn)不同節(jié)點(diǎn)的分布式調(diào)度。Quartz是一種開源的輕量級(jí)作業(yè)調(diào)度框架,完全由java編寫,具備很大的靈活性而又不失簡單性,可以用來為執(zhí)行一個(gè)作業(yè)創(chuàng)建簡單或者復(fù)雜的調(diào)度,為確保可伸縮性,Quartz采用了基于多線程的架構(gòu),Quartz同樣支持分布式部署,能夠并發(fā)運(yùn)行多個(gè)作業(yè),可以很好的滿足分布式爬蟲作業(yè)的調(diào)度需求。
[0011]所述前端控制臺(tái),負(fù)責(zé)完成對(duì)分布式爬蟲的管理以及定制。
[0012]作為優(yōu)選,所述頁面解析生成URL負(fù)責(zé)從當(dāng)前頁面中提取URL鏈接。
[0013]更優(yōu)地,所述URL過濾器負(fù)責(zé)根據(jù)爬取規(guī)則將產(chǎn)生URL鏈接進(jìn)行過濾,得到符合規(guī)則的URL鏈接。
[0014]更優(yōu)地,所述頁面爬取負(fù)責(zé)符合爬取規(guī)則的URL鏈接進(jìn)行頁面抓取,定制頁面抓取內(nèi)容。
[0015]更優(yōu)地,所述前端控制臺(tái)負(fù)責(zé)完成爬取入口、爬取規(guī)則、爬取結(jié)果存儲(chǔ)方式和調(diào)度規(guī)則的參數(shù)設(shè)定以及完成對(duì)爬取作業(yè)的啟停管理和分布式爬蟲的集群部署管理。
[0016]更優(yōu)地,所述內(nèi)存數(shù)據(jù)庫自動(dòng)完成數(shù)據(jù)的去重存儲(chǔ),完成待爬取隊(duì)列的去重存儲(chǔ)以及已爬取隊(duì)列的存儲(chǔ),實(shí)現(xiàn)分布式爬蟲的增量爬取和中斷爬取。
[0017]—種基于Kafka和Quartz的分布式爬蟲架構(gòu)的實(shí)現(xiàn)方法,采用上述任意一種基于Kafka和Quartz的分布式爬蟲架構(gòu),包括如下步驟:
(1)、通過前端控制臺(tái)的頁面設(shè)定爬取入口、爬取規(guī)則、爬取結(jié)果存儲(chǔ)方式以及調(diào)度規(guī)則的參數(shù),同時(shí)選擇要部署的集群節(jié)點(diǎn)進(jìn)行部署;
(2)、生產(chǎn)者作業(yè)根據(jù)基于Quartz的作業(yè)調(diào)度機(jī)制,調(diào)用基礎(chǔ)爬蟲組件根據(jù)爬蟲入口,提取爬取URL鏈接,并去重存儲(chǔ)在待爬取隊(duì)列中;
(3)、各個(gè)結(jié)點(diǎn)的消費(fèi)者作業(yè)根據(jù)基于Quartz的作業(yè)調(diào)度機(jī)制,調(diào)用基礎(chǔ)爬蟲組件,通過獲取基于Kaf ka的消息分發(fā)機(jī)制分發(fā)到本節(jié)點(diǎn)的URL鏈接消息,對(duì)URL鏈接進(jìn)行解析爬取,并將結(jié)果存儲(chǔ)到系統(tǒng)中; (4)、通過前端控制臺(tái)的頁面完成對(duì)已部署爬取作業(yè)的啟停管理以及各個(gè)結(jié)點(diǎn)的消費(fèi)者作業(yè)增刪管理。
[0018]本發(fā)明的一種基于Kafka和Quartz的分布式爬蟲架構(gòu)及其實(shí)現(xiàn)方法和現(xiàn)有技術(shù)相比,具有以下有益效果:
1、本發(fā)明是基于開源組件構(gòu)建分布式爬蟲,可以在利用原有技術(shù)框架的基礎(chǔ)之上進(jìn)行深度開發(fā)定制,滿足特定的需求,節(jié)省開發(fā)成本;
2、Kafka與Quartz都是經(jīng)過實(shí)戰(zhàn)驗(yàn)證的開源分布式框架,可以很好的滿足分布式爬蟲的需求,可靈活的與其他框架相結(jié)合,從而在保證架構(gòu)性能的基礎(chǔ)之上,實(shí)現(xiàn)靈活開發(fā)定制;
3、本發(fā)明利用已有的成熟的單機(jī)爬蟲框架結(jié)合Kafka與Quartz分布式工具完成分布式爬蟲的需求,使其可以滿足大部分的爬取需求,并具備高并發(fā),支持分布式等特征,解決了爬取隊(duì)列消息的多節(jié)點(diǎn)分發(fā)以及定時(shí)爬取的問題。
[0019]由此可見,本發(fā)明具有設(shè)計(jì)合理、結(jié)構(gòu)簡單、使用方便、一物多用等特點(diǎn),因而,具有很好的推廣使用價(jià)值。
【附圖說明】
[0020]下面結(jié)合附圖對(duì)本發(fā)明進(jìn)一步說明。
[0021 ]