实时计算pv/uv Demo演示
作者 | 鄧小勇(靜行),阿里巴巴高級技術(shù)專家
本文由阿里巴巴高級技術(shù)專家鄧小勇(靜行)分享,主要用 Demo 演示如何通過實時計算 Flink 實時計算pv/uv的場景。內(nèi)容將從以下幾部分進行:
首先為大家展示一個比較簡單的pv/uv場景。以下圖所示的APP為例,整個業(yè)務(wù)構(gòu)架需要幾個入口,包括用戶訪問入口、作者入口和運營人員入口。在運營人員入口進去可以查看系統(tǒng)的一些指標(biāo),比如app 的pv/uv。
在開始介紹如何計算實時pv/uv之前,可以先了解下上圖的10個字段和它們對應(yīng)的含義。通過這些字段可以了解到,用戶在APP上的任何一次操作都會在數(shù)據(jù)庫中留下一條對應(yīng)的記錄,所有記錄就是該用戶在APP上的操作流水。
那么如何實時計算pv/uv呢?
有兩種方案。
方案一,MySQL的變更數(shù)據(jù)同步到Kafka后進行實時計算。由于 Flink在設(shè)計之初是具有流表二象性的,所以在 Flink 1.1版本之后,就可以實現(xiàn) Flink 對 Kafka變更數(shù)據(jù)的處理了,包括處理一些修改、刪除等操作。處理后的結(jié)果會放到阿里云Hologress里,方便用戶進行大數(shù)據(jù)查詢和分析。
方案二,從上圖可以看到方案一比方案二只多了一個Kafka,在 Flink 1.11 版本之后,可以直接通過Debezium連接MySQL,然后經(jīng)過Flink 實時計算,也可以完成同樣功能。
兩個方案都可以實現(xiàn),那么如何選擇呢?主要取決于業(yè)務(wù)。如果數(shù)據(jù)只是暫存,日志需要展示或是需要多個下游使用,需要保存到Kafka;如果日志不需要回溯,或是沒有下游使用,那么方案二更適合。
實戰(zhàn)演示
如下圖所示,我們選擇方案二(MySQL-CDC源表方式)來演示。
首先打開實時計算 Flink平臺,點擊左側(cè)SQL編輯器,然后通過Create Table方式設(shè)定上文提到的10個字段。這樣就定義了數(shù)據(jù)的源頭。
定義源頭之后,接下來要構(gòu)建目標(biāo)表。如下圖所示,在構(gòu)建目標(biāo)表時,定義了blackhole_pv_uv表,構(gòu)造了一個無實際存儲的目標(biāo)端,充當(dāng)調(diào)試作用,先把邏輯跑通,然后再去往目標(biāo)端去寫代碼。Blackhole 會吸收掉輸出結(jié)果數(shù)據(jù),先處理掉源端和計算的問題。
以上的表會落到 Flink Catalog里,對于實時計算pv/uv上下游表格的準(zhǔn)備就完成了。如果需要調(diào)整表,也可以通過DDL SQL語句完成。
做好建表準(zhǔn)備后,如何實時計算想要達到的目標(biāo)呢?以最簡單的方式來演示。
先把數(shù)據(jù)寫到Blackhole里,然后把4個字段值計算出來,比如cuurenttime,event_hour等。
通過上圖所示的代碼可以計算出,數(shù)據(jù)是什么時候輸入的,數(shù)據(jù)的pv/uv值等等。
運行剛剛寫入的作業(yè):
然后點擊創(chuàng)建SQL作業(yè),
創(chuàng)建完成后,點擊啟動。
啟動后可以點擊 Flink UI 來查看運行狀態(tài)。查看時候可以看到下端有顯示記錄了8條數(shù)據(jù):
回到數(shù)據(jù)庫也能看到對應(yīng)的8條數(shù)據(jù):
如何把實際的結(jié)果寫到holo里呢?
核心邏輯與上文實時計算的邏輯是一樣的,唯一不一樣的是,要把計算的結(jié)果既輸出到holo_pv_uv里去,同時也輸出到backhole里去,也就是要把同樣的結(jié)果輸出兩份,這是在流計算里經(jīng)常會遇到的情況。甚至還有在同一作業(yè)里不同的業(yè)務(wù)邏輯或計算結(jié)果,也要輸出到不同的目標(biāo)端的情況。
打開實時計算 Flink 頁面的SQL編輯器,在輸入框中創(chuàng)建 temporary view,把數(shù)據(jù)記錄到blackhole 里和holo里。
為了實現(xiàn)這個目標(biāo),需要增加一個叫begin statement set和end的語法,這其實是定義了一個計算邏輯,使得在它們中間的邏輯任務(wù)就會同時運行。
然后完成部署、創(chuàng)建作業(yè)和啟動后,就能看到這個計算邏輯已經(jīng)成功了。
原文鏈接:https://developer.aliyun.com/article/781195?
版權(quán)聲明:本文內(nèi)容由阿里云實名注冊用戶自發(fā)貢獻,版權(quán)歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請查看《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識產(chǎn)權(quán)保護指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權(quán)投訴表單進行舉報,一經(jīng)查實,本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的实时计算pv/uv Demo演示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mPaaS 客户端问题排查之突如其来的“
- 下一篇: mPaas 研发流程和线上运维介绍