Flink實(shí)時(shí)計(jì)算指標(biāo)對數(shù)方案
分類:互聯(lián)網(wǎng)熱點(diǎn)
編輯:互聯(lián)網(wǎng)觀察
瀏覽量:1
2020-07-13 16:55:23
對于一個(gè)實(shí)時(shí)數(shù)據(jù)產(chǎn)品人員、或者開發(fā)人員來說,產(chǎn)品上展示的實(shí)時(shí)數(shù)據(jù),pv、uv、gmv等等,怎么知道這些數(shù)據(jù)是不是正確的呢?當(dāng)其他的小組開發(fā)的產(chǎn)品的數(shù)據(jù)(或者其他的數(shù)據(jù)提供方)又是另外一個(gè)數(shù)字,那么究竟該如何判斷自己的數(shù)據(jù)還是別人的數(shù)據(jù)是正確的呢?這就需要一套實(shí)時(shí)數(shù)據(jù)對數(shù)方案,本文主要從背景、實(shí)時(shí)數(shù)據(jù)計(jì)算方案、對數(shù)方案、總結(jié)四方面來介紹,說服老板或者讓其他人相信自己的數(shù)據(jù)是準(zhǔn)確的、無誤的。
一、背景:
相信做過實(shí)時(shí)數(shù)據(jù)統(tǒng)計(jì)的朋友,肯定會遇到一個(gè)問題,怎么知道自己算的數(shù)據(jù)是不是對的呢?比如:pv、uv、dau、gmv、訂單等等統(tǒng)計(jì)數(shù)據(jù)。
二、實(shí)時(shí)數(shù)據(jù)統(tǒng)計(jì)方案
上述流程圖描述了一般的實(shí)時(shí)數(shù)據(jù)計(jì)算流程,接收日志或者M(jìn)Q到kafka,用F
link進(jìn)行處理和計(jì)算,將最終計(jì)算結(jié)果存儲在redis中,最后查詢出redis中的數(shù)據(jù)給大屏、看板等展示。
但是在整個(gè)過程中,不得不思考一下,最后計(jì)算出來的存儲在redis中指標(biāo)數(shù)據(jù)是不是正確的呢?怎么能給用戶或者老板一個(gè)信服的理由呢?相信這個(gè)問題一定是困擾所有做實(shí)時(shí)數(shù)據(jù)開發(fā)的朋友。
比如說:離線的同事說離線昨天的數(shù)據(jù)訂單是1w,實(shí)時(shí)昨天的數(shù)據(jù)確實(shí)2w,存在這么大的誤差,到底是實(shí)時(shí)計(jì)算出問題了,還是離線出問題了呢?
三、對數(shù)
解決方案
為了方便理解,還是拿上面離線和實(shí)時(shí)的下單金額為例。
某
電商雙11實(shí)時(shí)數(shù)據(jù)大屏最終展示的GMV是200億,小李當(dāng)晚匯報(bào)給老板,雙11GMV是200億。第二天晨會,離線的同事小王匯報(bào)給老板,雙11GMV是300億。同時(shí)又有一個(gè)數(shù)據(jù)部門的同事小趙說,我們這邊計(jì)算的是192億。老板聽到這么多數(shù)據(jù),一瞬間就不知道該相信誰的呢?然后就說,小李、小王你們兩數(shù)據(jù)差距最大,你們對一下吧,匯報(bào)我一個(gè)最終結(jié)果。
于是,小王看著自己數(shù)據(jù)告訴小李:某人在我們平臺下了30個(gè)iphone x合計(jì)多少錢、某人又在我們這里買了10臺聯(lián)想筆記本電腦合計(jì)多少錢 .......
小李看著最終展示在大屏上的200億GMV,瞬間就蒙了,心里想道:我這里不知道誰買了多少個(gè)iphone呀,也不知道他們花了多少錢呀?
于是小李回去請教了自己的導(dǎo)師,導(dǎo)師說你把上面的實(shí)時(shí)寬表數(shù)據(jù)存儲下來,就可以和他們對了,就知道誰買了多少個(gè)iphone x了,誰有買了多少個(gè)聯(lián)想電腦了。
小李想了想,按照導(dǎo)師的思路開發(fā)如下的寬表加工方案:
(1)用Flink將實(shí)時(shí)寬表數(shù)據(jù)存儲至elasticsearch
將加工的寬表數(shù)據(jù)通過Flink寫入es,這樣可以得到所有數(shù)據(jù)的明細(xì)數(shù)據(jù),拿著明細(xì)和其他數(shù)據(jù)提供方進(jìn)行比對即可。
(2)用Flink實(shí)時(shí)寬表數(shù)據(jù)存儲至HDFS,通過Hive進(jìn)行查詢
但是有一些朋友可能會說,es對應(yīng)的sql count、group by語法操作,非常復(fù)雜,況且也不是用來做線上服務(wù),而只是用與對數(shù),所以時(shí)效性也不需要完全考慮,這樣的話,就可以考慮將數(shù)據(jù)回寫至HDFS了。
因此可以考慮采用下圖的方案,將加工的寬表通過Flink寫入到HDFS,然后新建hive表進(jìn)行關(guān)聯(lián)HDFS數(shù)據(jù)進(jìn)行關(guān)聯(lián)查詢。
寫HDFS與es相比,存在非常明顯的優(yōu)點(diǎn):
a.學(xué)習(xí)成本低、會sql的基本就可以了,而不需要重新學(xué)習(xí)es負(fù)責(zé)的count、group by 等語法操作
b.可以非常方便地和離線表數(shù)據(jù)進(jìn)行關(guān)聯(lián)查詢(大多數(shù)情況下都是和離線數(shù)據(jù)比對),兩張Hive表的關(guān)聯(lián)查詢,容易找出兩張表的數(shù)據(jù)差異
最終小李拿著自己存儲的明細(xì)數(shù)據(jù)和小王對了一下,發(fā)現(xiàn)是小王的口徑不一樣,沒有排除一些預(yù)售訂單,最終小李將匯報(bào)給老板,得到了老板的嘉獎。
四、總結(jié)
實(shí)時(shí)計(jì)算能提供給用戶查看當(dāng)前的實(shí)時(shí)統(tǒng)計(jì)數(shù)據(jù),但是數(shù)據(jù)的準(zhǔn)確性確實(shí)一個(gè)很大的問題,如何說服用戶或者領(lǐng)導(dǎo)數(shù)據(jù)計(jì)算是沒有問題的,就需要和其他的數(shù)據(jù)提供方進(jìn)行比對了。問題的關(guān)鍵就在于,只要有明細(xì)數(shù)據(jù),就可以和任意一方進(jìn)行比對,畢竟有明細(xì)數(shù)據(jù)。不服?我們就對一對啊。
明細(xì)數(shù)據(jù)的存儲、設(shè)計(jì)也很有講究,可以和離線或者其他提供方的數(shù)據(jù)字段進(jìn)行對齊,這樣就非常方便進(jìn)行比對了,而采用hive這種方式又是最簡便的方式了,畢竟大多數(shù)人都是會sql的,無論開發(fā)人員還是數(shù)據(jù)人員或者BI人員。
聲明:免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請發(fā)
送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)
需注明出處:新網(wǎng)idc知識百科