資源描述:
《Storm實(shí)時(shí)處理方案架構(gòu)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、1文檔說明該文檔描述的是以storm為主體的實(shí)時(shí)處理架構(gòu),該架構(gòu)包括了數(shù)據(jù)收集部分,實(shí)時(shí)處理部分,及數(shù)據(jù)落地部分。關(guān)于不同部分的技術(shù)選型與業(yè)務(wù)需求及個(gè)人對(duì)相關(guān)技術(shù)的熟悉度有關(guān),會(huì)一一進(jìn)行分析。該架構(gòu)是本人所掌握的一種架構(gòu),可能會(huì)與其他架構(gòu)冇相似的部分,個(gè)人會(huì)一一解釋對(duì)其的理解。這個(gè)文章寫的很詳細(xì),相信對(duì)人家在實(shí)時(shí)處理整體理解上會(huì)有幫助的。2實(shí)時(shí)處理架構(gòu)2.1整體架構(gòu)圖MetaQ館端業(yè)務(wù)系統(tǒng)數(shù)據(jù)獲IIZAPIIq莒監(jiān)控11■號(hào)數(shù)據(jù)接入閔:Starm實(shí)時(shí)處理系統(tǒng)數(shù)捱落地層IIDFS(hadoop)Lustrevvv.blogchong^QB架構(gòu)說明:整個(gè)數(shù)據(jù)處理流程包括四部分,一部分是數(shù)據(jù)接入層,
2、該部分從前端業(yè)務(wù)系統(tǒng)獲取數(shù)據(jù);中間部分是最重要的storm實(shí)時(shí)處理部分,數(shù)據(jù)從接入層接入,經(jīng)過實(shí)吋處理后傳入數(shù)據(jù)落地層;第三部分為數(shù)據(jù)落地層,該部分指定了數(shù)據(jù)的落地方式;第四部分元數(shù)據(jù)管理器。2.2數(shù)據(jù)接入層該部分有多種數(shù)據(jù)收集方式,包括使用消息隊(duì)列(MetaQ),直接通過網(wǎng)絡(luò)Socket傳輸數(shù)據(jù),前端業(yè)務(wù)系統(tǒng)專有數(shù)據(jù)采集API,對(duì)Log問價(jià)定時(shí)監(jiān)控。為什么選擇消息隊(duì)列?這或許是大家比較疑惑的地方,會(huì)疑惑為什么不把數(shù)據(jù)直接導(dǎo)入storm屮。使用消息隊(duì)列作為數(shù)據(jù)中間處理組件的原因是,在大批量數(shù)據(jù)處理時(shí),前端業(yè)務(wù)數(shù)據(jù)產(chǎn)生速度可能會(huì)很快,而實(shí)吋處理或者其他處理速度跟不上,會(huì)影響整個(gè)系統(tǒng)處理性能,引入
3、消息隊(duì)列之后,我們可以把數(shù)據(jù)臨時(shí)存儲(chǔ)在消息隊(duì)列中,后端處理速度就不會(huì)影響前端業(yè)務(wù)數(shù)據(jù)的產(chǎn)生,比較專業(yè)的術(shù)語叫做解除耦合,增加系統(tǒng)擴(kuò)展性,系統(tǒng)各組件異步運(yùn)行。為什么使用MetaQ?在消息隊(duì)列選擇上,kafka是一個(gè)比較通用的,開源吋間較長(zhǎng)的消息發(fā)布訂閱系統(tǒng),而MeteiQ是基于kafka發(fā)的,使用我們比較熟悉的Java發(fā),并且在此基礎(chǔ)上作了一定的改進(jìn),如數(shù)據(jù)可靠及事務(wù)處理等。另一方面,這是國(guó)人開源的東西,各方而的文檔比較完整,并且冇相關(guān)的實(shí)例接口。所以使用MetaQ作為消息中間件,開發(fā)成本比較低,乂有較好的性能。2.2.2Socket部分人使用網(wǎng)絡(luò)Socket編程實(shí)現(xiàn)Storm的數(shù)據(jù)接入。這是一
4、種比較直接的數(shù)據(jù)采集方式,并且確實(shí)有些Storm相關(guān)的項(xiàng)目使用這種數(shù)據(jù)接入方式。這種數(shù)據(jù)接入方式比較簡(jiǎn)單,維護(hù)成木較低,但數(shù)據(jù)量相對(duì)于使用消息中間件來說較小。難點(diǎn):使用Socket采集數(shù)據(jù)比較麻煩的是,F(xiàn)tlT*Storm的Spout,的地址是不定的,無法確定其地址,則前端業(yè)務(wù)系統(tǒng)就無法將數(shù)據(jù)準(zhǔn)確的發(fā)送的某個(gè)具體IP地址上的端口小。解決方法如下:(1)我們可以使用zookeeper作為傳輸詁,Spout執(zhí)行后,將本地冇效的1P地址及可用正在監(jiān)控的端口等信息寫入zookeeper中,前端業(yè)務(wù)系統(tǒng)從zookeeper口錄屮獲取該信息。(2)使用元數(shù)據(jù)指導(dǎo)前端業(yè)務(wù)系統(tǒng)數(shù)據(jù)發(fā)送,Spout將本地IP及
5、端口信息存入元數(shù)據(jù)管理器中,前端業(yè)務(wù)系統(tǒng)從元數(shù)據(jù)管理器中獲取該參數(shù)信息。2.2.3前端業(yè)務(wù)系統(tǒng)數(shù)據(jù)采集API這種數(shù)據(jù)采集方式就不多說了,前端業(yè)務(wù)系統(tǒng)為Spout專門設(shè)計(jì)的數(shù)據(jù)采集API,Spout只需調(diào)用該API就能獲取數(shù)據(jù)。2.2.4Log文件監(jiān)控有時(shí)候我們的數(shù)據(jù)源是已經(jīng)保存下來的log文件,那Spout就必須監(jiān)控Log文件的變化,及時(shí)將變化部分的數(shù)據(jù)提取寫入Storm+,這很難做到完全實(shí)時(shí)性。2.3Storm實(shí)時(shí)處理系統(tǒng)2.3.1說明前面部分?jǐn)?shù)據(jù)接入層其實(shí)已經(jīng)包含部分storm相關(guān)的內(nèi)容,例如一些數(shù)據(jù)采集接口就是屈于Storm的Spout部分,我把該部分單獨(dú)拿出來的意思是把實(shí)時(shí)處理核心部分
6、作為一個(gè)大章節(jié),即實(shí)時(shí)處理部分(除數(shù)據(jù)接入及數(shù)據(jù)落地的接口)。2.3.2使用Storm原因?yàn)楹芜x擇Storm作為實(shí)時(shí)處理的核心呢?Storm作為開源比較早的款實(shí)吋處理系統(tǒng),其功能比較完善,其failover機(jī)制相當(dāng)給力,無論是woker還是supervisor,甚至是task,只要掛掉都能口動(dòng)重啟;其性能經(jīng)過測(cè)試還是相當(dāng)不錯(cuò)的月?目前網(wǎng)絡(luò)相關(guān)資料較多,這就意味著開發(fā)代價(jià)會(huì)小很多;其擴(kuò)展性非常好,能夠橫向擴(kuò)展。Storm前的短處在與nimbus單點(diǎn),如果nimbus掛掉,整個(gè)系統(tǒng)會(huì)掛掉,這是Storm需要改進(jìn)的地方,不過nimbus的系統(tǒng)壓力不大,一般情況下也不會(huì)出現(xiàn)宕機(jī)。2.3.3實(shí)時(shí)處理業(yè)務(wù)
7、接口該部分需要捉供一個(gè)實(shí)時(shí)業(yè)務(wù)處理的接口,即將用戶的業(yè)務(wù)層需求轉(zhuǎn)換為實(shí)時(shí)處理的具體模式。例如模仿Hive提供一個(gè)類Sql的業(yè)務(wù)接口,我們將一類數(shù)據(jù)在元數(shù)據(jù)管理器屮描述是-個(gè)表,不同字段是表屮不同字段select固定數(shù)據(jù)查詢(異?;蛘吲K數(shù)據(jù)處理),max/min/avg最大最小值count/sum求和或次數(shù)統(tǒng)計(jì)(比女IIpv等)count(distinct)去重計(jì)數(shù)(典型的如UV)orderby排序