實(shí)時(shí)離線一體化助力渠道分析系統(tǒng)
背景
渠道分析系統(tǒng),是一個(gè)多維度數(shù)據(jù)分析系統(tǒng),旨在為渠道運(yùn)營和渠道評(píng)估提供數(shù)據(jù)支持。隨著精細(xì)化運(yùn)營需求的日益增長(zhǎng),對(duì)渠道數(shù)據(jù)的時(shí)效性和準(zhǔn)確性要求也越來越高。第一代渠道分析系統(tǒng),數(shù)據(jù)主要依賴離線計(jì)算產(chǎn)生,最小時(shí)間粒度為小時(shí),其中,“新增用戶數(shù)”對(duì)運(yùn)營人員及時(shí)調(diào)整策略起到至關(guān)重要的作用,但該數(shù)據(jù)的滯后性比較明顯,導(dǎo)致相應(yīng)的運(yùn)營決策比較被動(dòng),決策效果較差。
本文實(shí)現(xiàn)了一種實(shí)時(shí)計(jì)算與離線計(jì)算一體化的解決方案,為渠道新增數(shù)據(jù)提供實(shí)時(shí)、準(zhǔn)確、高效的數(shù)據(jù)支撐。本文將從面臨挑戰(zhàn)、解決方案、難點(diǎn)攻克等幾個(gè)方面來詳細(xì)描述整個(gè)方案實(shí)施過程。
面臨挑戰(zhàn)
渠道數(shù)據(jù)涉及多種產(chǎn)品線,因此數(shù)據(jù)打點(diǎn)分散,數(shù)據(jù)源較多,其中包括數(shù)據(jù)中心數(shù)據(jù)、商業(yè)化數(shù)據(jù)、反作弊數(shù)據(jù)等。為了建立通用的渠道評(píng)估機(jī)制,全面的評(píng)估渠道質(zhì)量從而指導(dǎo)結(jié)算,由此面臨的挑戰(zhàn)總結(jié)如下:
- 數(shù)據(jù)量大。渠道數(shù)據(jù)匯聚了多個(gè)產(chǎn)品的數(shù)據(jù),每天數(shù)據(jù)量約為5~6TB,高峰期可達(dá)100MB/s。
- 數(shù)據(jù)復(fù)雜度高。產(chǎn)品的多樣性使得數(shù)據(jù)源種類繁多,且原始日志經(jīng)過多重加密,增加了日志解析的復(fù)雜度。
- 低延遲。渠道運(yùn)營數(shù)據(jù)延遲越低,對(duì)運(yùn)營決策的價(jià)值越高,而新增數(shù)據(jù)由于其依賴歷史數(shù)據(jù),其本身計(jì)算邏輯存在復(fù)雜性,增加了低延遲的處理難度。
- 數(shù)據(jù)準(zhǔn)確性要求高。保證渠道評(píng)估的準(zhǔn)確性才能做到精準(zhǔn)投放和公平結(jié)算,因此對(duì)渠道數(shù)據(jù)的準(zhǔn)確性要求較高,需要有數(shù)據(jù)校準(zhǔn)機(jī)制。
解決方案
1. 總體設(shè)計(jì)
基于面臨的挑戰(zhàn)本文采用了實(shí)時(shí)計(jì)算分流、離線計(jì)算補(bǔ)充校準(zhǔn)的方式來滿足上述數(shù)據(jù)要求,以下是整體數(shù)據(jù)處理架構(gòu)圖。
圖1 架構(gòu)圖
從圖1中可以看到,本文采用雙寫的方式存儲(chǔ)原始數(shù)據(jù):實(shí)時(shí)流式消息隊(duì)列存儲(chǔ)和分布式存儲(chǔ),通過實(shí)時(shí)計(jì)算分流與離線計(jì)算補(bǔ)充的方式來實(shí)現(xiàn)實(shí)時(shí)更新數(shù)據(jù),實(shí)時(shí)查詢數(shù)據(jù)和實(shí)時(shí)展現(xiàn)數(shù)據(jù)。
2. 具體實(shí)現(xiàn)
正如上文所提到的渠道分析的數(shù)據(jù)量級(jí)龐大,數(shù)據(jù)復(fù)雜度高,并且新增計(jì)算本身具有復(fù)雜性,同時(shí)需求本身在數(shù)據(jù)低延遲上的要求,在設(shè)計(jì)過程中,需要考慮:
- 實(shí)時(shí)流處理復(fù)雜數(shù)據(jù)的時(shí)間開銷,比如渠道原始數(shù)據(jù)經(jīng)多次加密和壓縮導(dǎo)致解析時(shí)間開銷增大;
- 實(shí)時(shí)計(jì)算引擎自身的特性,本文涉及到的是運(yùn)營投放和結(jié)算,對(duì)數(shù)據(jù)統(tǒng)計(jì)的正確性要求較高;
- 數(shù)據(jù)指標(biāo)計(jì)算的復(fù)雜性,新增數(shù)據(jù)計(jì)算嚴(yán)重依賴歷史庫的數(shù)據(jù)查詢效率;
- 網(wǎng)絡(luò)環(huán)境,當(dāng)不可抗力影響了實(shí)時(shí)數(shù)據(jù)的產(chǎn)出,及時(shí)報(bào)警并啟用離線方案校準(zhǔn)數(shù)據(jù)。
圖2 數(shù)據(jù)處理流程圖
從圖2中可以看出,為應(yīng)對(duì)大量復(fù)雜的數(shù)據(jù),盡可能降低處理延遲,實(shí)時(shí)計(jì)算部分采用了數(shù)據(jù)分層與分流相結(jié)合的技術(shù)路線,將數(shù)據(jù)計(jì)算流程拉長(zhǎng),采用單功能多階段的數(shù)據(jù)處理方式將數(shù)據(jù)處理拆分為三個(gè)階段:日志解析,產(chǎn)品分流和新增計(jì)算。在實(shí)時(shí)處理部分,采用了Flink 和Spark Streaming 相結(jié)合的方式。Flink 是一種具有高吞吐、低延遲的實(shí)時(shí)離線統(tǒng)一的流式數(shù)據(jù)處理引擎,非常適合本文場(chǎng)景中第一階段的日志解析。而Spark Streaming 是微批處理,可以將實(shí)時(shí)數(shù)據(jù)流輸入的數(shù)據(jù)劃分為一個(gè)個(gè)小批次數(shù)據(jù)流,保障后續(xù)新增計(jì)算中聚合操作穩(wěn)定的分鐘級(jí)響應(yīng)。為了將計(jì)算引擎的性能發(fā)揮到最大,將新增計(jì)算的延遲降到最低,在數(shù)據(jù)存儲(chǔ)部分,本方案采用了高性能的消息隊(duì)列Kafka 和索引速度快的ES 。另外,本文還設(shè)計(jì)了離線補(bǔ)充校準(zhǔn)數(shù)據(jù)的容災(zāi)方案,以確保異常情況下數(shù)據(jù)的準(zhǔn)確性。
下面分別對(duì)日志解析,產(chǎn)品分流,新增計(jì)算三個(gè)處理階段和容災(zāi)部分的數(shù)據(jù)校準(zhǔn)作詳細(xì)說明。
3. 日志解析
圖3 日志解析圖解
本階段采用高性能消息隊(duì)列Kafka 與低延遲計(jì)算引擎Flink相結(jié)合的方式進(jìn)行日志解析。利用Flink的雙流特性,在消費(fèi)原始日志消息隊(duì)列的同時(shí)會(huì)間隔一定時(shí)間同步產(chǎn)品標(biāo)識(shí)信息,在原始日志打點(diǎn)規(guī)則不變的情況下,動(dòng)態(tài)可配置的按需獲取數(shù)據(jù),提升了程序的可擴(kuò)展性和復(fù)用性。
4. 產(chǎn)品分流
圖4 產(chǎn)品分流圖解
本階段采用Spark Streaming和ES對(duì)合規(guī)數(shù)據(jù)進(jìn)行分流。經(jīng)過日志解析,數(shù)據(jù)的量級(jí)下降,此時(shí),使用Spark Streaming可以將流式數(shù)據(jù)轉(zhuǎn)換成微批處理,提高ES的更新效率。同時(shí),利用ES 的主鍵唯一性,按照不同的產(chǎn)品標(biāo)識(shí)進(jìn)行數(shù)據(jù)更新。因此,ES中始終維護(hù)著一個(gè)包含所有歷史記錄數(shù)據(jù)的大表,即累計(jì)新增庫。
5. 新增計(jì)算
本階段利用ES自身的高性能,按照產(chǎn)品類別定期查詢ES以達(dá)到統(tǒng)計(jì)小時(shí)新增和累計(jì)新增的目的。借助之前的兩個(gè)階段,日志解析和產(chǎn)品分流,將新增計(jì)算的響應(yīng)速度從小時(shí)級(jí)降到分鐘級(jí),使得運(yùn)營人員在做出決策調(diào)整投放策略后,可以在分鐘級(jí)看到投放效果。
6. 容災(zāi)
容災(zāi)的主要目的是在不可抗力因素發(fā)生,影響實(shí)時(shí)數(shù)據(jù)的情況下,盡可能快的將數(shù)據(jù)補(bǔ)回來,盡力保證數(shù)據(jù)的準(zhǔn)確性。我們方案實(shí)現(xiàn)了一套與實(shí)時(shí)功能等價(jià)的離線數(shù)據(jù)校準(zhǔn)流程。如上圖2所示,容災(zāi)過程通過離線數(shù)據(jù)處理完成主要分為兩個(gè)階段:
- 第一階段日志解析階段,此階段通過離線數(shù)據(jù)處理將數(shù)據(jù)按照產(chǎn)品分類的方式按小時(shí)解析完成存入HIVE引擎。
- 第二階段新增計(jì)算,通過與歷史累計(jì)新增表的對(duì)比計(jì)算出新增數(shù)據(jù)。
這兩個(gè)階段是獨(dú)立于實(shí)時(shí)數(shù)據(jù)處理按小時(shí)周期進(jìn)行的,當(dāng)發(fā)生實(shí)時(shí)數(shù)據(jù)異常時(shí),即會(huì)觸發(fā)補(bǔ)數(shù)流程進(jìn)行補(bǔ)數(shù)。這個(gè)方案通過幾次線上實(shí)操驗(yàn)證,能保證數(shù)據(jù)校準(zhǔn)的響應(yīng)維持在小時(shí)級(jí)別,數(shù)據(jù)誤差率控制在0.5%以內(nèi)。
方案效果
根據(jù)業(yè)務(wù)要求,渠道分析的數(shù)據(jù)延遲應(yīng)控制在10分鐘以內(nèi),分析本方案中各個(gè)階段處理性能,參數(shù)配置如下:
日志解析和產(chǎn)品分流階段的數(shù)據(jù)處理能力如下圖所示:
圖5 日志解析處理能力統(tǒng)計(jì)
圖6 產(chǎn)品分流處理能力統(tǒng)計(jì)
日志解析階段,如上圖5為一天內(nèi)所有數(shù)據(jù)的平均處理時(shí)間,可以看出,單條數(shù)據(jù)處理延遲約為1.43ms,無累積延遲。產(chǎn)品分流階段,如上圖6為一天內(nèi)所有批次的平均處理時(shí)間,可以看出,數(shù)據(jù)處理時(shí)間約為1.39s,遠(yuǎn)小于批時(shí)間,即本方案中數(shù)據(jù)消費(fèi)能力遠(yuǎn)大于數(shù)據(jù)生產(chǎn)速度,無累積延遲。
從分析結(jié)果可知,本方案整體數(shù)據(jù)延遲控制在秒級(jí)左右,遠(yuǎn)小于業(yè)務(wù)所要求的10分鐘,滿足業(yè)務(wù)需求。其中新增計(jì)算與實(shí)時(shí)查詢部分的延遲均為ms級(jí)別,可忽略不計(jì)。
難點(diǎn)攻克
1. 低延遲
渠道數(shù)據(jù)原始日志里包含眾多產(chǎn)品,在高峰期數(shù)據(jù)量可以達(dá)到100MB/s,并且打點(diǎn)結(jié)構(gòu)設(shè)計(jì)復(fù)雜,需要經(jīng)過多重解碼和結(jié)構(gòu)拆分才能得到所需字段。為了保證新增計(jì)算低延遲,本方案將數(shù)據(jù)處理流程拉長(zhǎng),通過數(shù)據(jù)分層,將一個(gè)復(fù)雜的數(shù)據(jù)流程分解成多個(gè)處理流程。雖然拉長(zhǎng)了數(shù)據(jù)處理流程,但可以針對(duì)性的對(duì)不同的處理階段進(jìn)行調(diào)優(yōu),例如,當(dāng)日志解析階段出現(xiàn)堆積,可以通過調(diào)整并行度提高執(zhí)行效率。細(xì)粒度的拆分?jǐn)?shù)據(jù)處理流程也提高了數(shù)據(jù)的利用率,原始數(shù)據(jù)經(jīng)過日志解析,將數(shù)據(jù)變成有效的規(guī)則的明細(xì)層數(shù)據(jù),再根據(jù)明細(xì)層數(shù)據(jù)進(jìn)行分流獲得不同產(chǎn)品的主題層數(shù)據(jù),最終根據(jù)主題層數(shù)據(jù)計(jì)算獲得應(yīng)用層數(shù)據(jù)。
2. 數(shù)據(jù)準(zhǔn)確性穩(wěn)定性保障
實(shí)時(shí)處理流程配置有完善的預(yù)警和報(bào)警措施,可一旦發(fā)生極端情況,如網(wǎng)絡(luò)或集群?jiǎn)栴}導(dǎo)致的實(shí)時(shí)任務(wù)失敗,數(shù)據(jù)丟失不可避免。因此,本方案同時(shí)設(shè)計(jì)了一套穩(wěn)定的小時(shí)級(jí)離線災(zāi)備流程,當(dāng)發(fā)現(xiàn)實(shí)時(shí)處理出現(xiàn)故障,可及時(shí)開啟離線補(bǔ)數(shù),矯正業(yè)務(wù)數(shù)據(jù)。離線校準(zhǔn)不僅為實(shí)時(shí)計(jì)算提供正確性校驗(yàn),更保證渠道評(píng)估的準(zhǔn)確性,為運(yùn)營做到精準(zhǔn)投放和公平結(jié)算保駕護(hù)航。
總結(jié)
本文實(shí)現(xiàn)了一種以實(shí)時(shí)計(jì)算為主體、離線計(jì)算為校準(zhǔn)的分鐘級(jí)累計(jì)新增計(jì)算解決方案,在原有的小時(shí)級(jí)離線新增基礎(chǔ)上,將新增統(tǒng)計(jì)提升到分鐘級(jí),有效的降低了響應(yīng)延遲,將運(yùn)營決策被動(dòng)等待轉(zhuǎn)換成主動(dòng)調(diào)整,為渠道運(yùn)營和渠道評(píng)估提供有力的數(shù)據(jù)支持。
【本文是51CTO專欄機(jī)構(gòu)360技術(shù)的原創(chuàng)文章,微信公眾號(hào)“360技術(shù)( id: qihoo_tech)”】



























