1. 清洗了點(diǎn)數(shù)據(jù)

        共 3146字,需瀏覽 7分鐘

         ·

        2022-03-02 18:29

        我是3y,一年CRUD經(jīng)驗(yàn)用十年的markdown程序員???????常年被譽(yù)為職業(yè)八股文選手

        最近如果拉過(guò)austin項(xiàng)目代碼的同學(xué),可能就會(huì)發(fā)現(xiàn)多了一個(gè)austin-stream模塊。其實(shí)并不會(huì)意外,因?yàn)檫@一切都在計(jì)劃當(dāng)中進(jìn)行。

        這個(gè)模塊主要是接入流式處理平臺(tái)(flink),用于實(shí)時(shí)計(jì)算清洗數(shù)據(jù)給到業(yè)務(wù)以及系統(tǒng)維護(hù)者更方便去使用消息推送平臺(tái)austin

        這篇文章主要來(lái)聊聊接入的背景以及我淺薄的經(jīng)驗(yàn)吧

        01、為什么流式處理平臺(tái)

        我在老東家有過(guò)處理數(shù)據(jù)相關(guān)的經(jīng)驗(yàn),也看到過(guò)站內(nèi)廣告「效果數(shù)據(jù)」的發(fā)展歷程。

        所謂效果數(shù)據(jù),說(shuō)白了則是商家在平臺(tái)上投放了廣告,我們需要給商家看到廣告帶來(lái)的效果,最核心的是「曝光」「點(diǎn)擊」「訂單」,基于這幾項(xiàng)數(shù)據(jù)再聚合些類roi的指標(biāo)。

        下面來(lái)聊聊這個(gè)「發(fā)展歷程」,看完這個(gè)過(guò)程或許可以更好地了解為什么需要流式處理平臺(tái)

        1、PHP階段:在最初時(shí)業(yè)務(wù)以及系統(tǒng)結(jié)構(gòu)都比較簡(jiǎn)單,把「點(diǎn)擊」和「訂單」都存入數(shù)據(jù)庫(kù)表,一把梭通過(guò)定時(shí)任務(wù)全量聚合,得到最終的效果數(shù)據(jù),而「曝光」數(shù)據(jù)則是次日再寫入效果數(shù)據(jù)表中。

        在這個(gè)階段里,由于數(shù)據(jù)量不大,通過(guò)定時(shí)任務(wù)全量來(lái)聚合數(shù)據(jù)也不是不可以,那時(shí)候商家都能接受該業(yè)務(wù)的延遲性,大概5min出效果數(shù)據(jù)。

        2、Java階段:隨著業(yè)務(wù)的發(fā)展,逐漸摒棄PHP化并且廣告三層結(jié)構(gòu)成型、數(shù)據(jù)量日益提升、站內(nèi)中間件服務(wù)平臺(tái)也發(fā)展起來(lái)。通過(guò)中間件團(tuán)隊(duì)提供的消費(fèi)binlog框架,從架構(gòu)上改變聚合模式,并這個(gè)階段可以更快地給商家展示效果數(shù)據(jù),大概1min出效果數(shù)據(jù)

        3、流式處理平臺(tái)階段:流式處理平臺(tái)是對(duì)「計(jì)算」或者說(shuō)處理數(shù)據(jù)時(shí)的抽象,在這抽象基礎(chǔ)上它更能充分利用系統(tǒng)的資源(一個(gè)大的任務(wù)被拆分多個(gè)小任務(wù),然后分發(fā)到不同的機(jī)器上執(zhí)行)

        4、廣告效果數(shù)據(jù)是先用的Storm作為流式處理平臺(tái),數(shù)據(jù)跑了幾年都挺穩(wěn)定的,性能吞吐量上也是滿足業(yè)務(wù)使用的。后來(lái)Flink興起,支持SQL、Exactly-Once、流批一體化等,隨著公司內(nèi)推廣,我將廣告效果數(shù)據(jù)從Strom改至Flink體系上,大概級(jí)出效果數(shù)據(jù)。(其實(shí)還可以壓縮,但需要兼顧DB的性能成本,只要業(yè)務(wù)上能接受即可。Traff-off?。?/p>

        在第三點(diǎn)我提出了「數(shù)據(jù)處理時(shí)的抽象」,我是這樣理解的。在Storm里,定義spout為輸入,bolt為中間處理或輸出,而中間的數(shù)據(jù)流轉(zhuǎn)為tuple,用shuffle機(jī)制來(lái)控制數(shù)據(jù)的流向

        Flink里,就有更加明確的語(yǔ)義來(lái)說(shuō)明輸入和輸出了(程序的API也更有語(yǔ)義性)

        這些流處理平臺(tái)都會(huì)數(shù)據(jù)處理進(jìn)行了抽象,讓我們更加方便且高效去處理數(shù)據(jù),比如一般會(huì)以下的功能:

        02、austin哪里用到了流式處理平臺(tái)

        在前面austin系統(tǒng)已經(jīng)設(shè)計(jì)了一部分的埋點(diǎn)信息了,在日志上都已經(jīng)打印了下來(lái)。

        但針對(duì)這一部分?jǐn)?shù)據(jù),遲遲沒(méi)有做處理(不過(guò)之前有一起跟著學(xué)austin的小伙伴給我截了日志,我一眼就知道是哪里出了問(wèn)題)。

        而接入流式處理平臺(tái)就能對(duì)這一部分?jǐn)?shù)據(jù)進(jìn)行清洗(根據(jù)下發(fā)者維度、根據(jù)模板消息維度等等),得到清洗后的數(shù)據(jù)再給到接口去展示或者排查問(wèn)題使用,能大大提高排查或者業(yè)務(wù)方的使用效率

        03、Flink入門

        Flink從2018年開(kāi)始流行,現(xiàn)在已經(jīng)有很多的公司都在用Flink作為實(shí)時(shí)大數(shù)據(jù)處理的流式平臺(tái)。至于我為什么會(huì)選擇Flink的話,原因有以下:

        1、我懂點(diǎn)兒Flink(主要是懶得學(xué)其他的了,目前還夠用)

        2、Flink發(fā)展了幾年,成熟且被很多大公司用,社區(qū)活躍

        3、Flink的官方文檔挺不錯(cuò)的,適合學(xué)習(xí)和排查問(wèn)題

        首先我們安裝下Flinkdocker-compose.yml文件內(nèi)容:

        version:?"2.2"
        services:
        ??jobmanager:
        ????image:?flink:latest
        ????ports:
        ??????-?"8081:8081"
        ????command:?jobmanager
        ????environment:
        ??????-?|
        ????????FLINK_PROPERTIES=
        ????????jobmanager.rpc.address:?jobmanager

        ??taskmanager:
        ????image:?flink:latest
        ????depends_on:
        ??????-?jobmanager
        ????command:?taskmanager
        ????scale:?1
        ????environment:
        ??????-?|
        ????????FLINK_PROPERTIES=
        ????????jobmanager.rpc.address:?jobmanager
        ????????taskmanager.numberOfTaskSlots:?2

        完了之后直接docker-compose up -d就可以啟動(dòng)flink了,我們?cè)L問(wèn)在瀏覽器輸入ip:8081端口就能看到flink的后臺(tái)了


        簡(jiǎn)單看了下后臺(tái),就能知道我們?cè)诒镜亻_(kāi)發(fā)完打包成jar就可以在Submit New Job提交jar包給Flink去跑了

        而在寫代碼的時(shí)候,可以參考官方文檔給出的mvn命令去構(gòu)建Flink的基礎(chǔ)環(huán)境

        當(dāng)然啦,現(xiàn)在我已經(jīng)搭好了,你們可以直接拉代碼下來(lái)看austin-stream模塊就完事了。如果你們是自己從零搭的話可能還要注意的是,pom里的plugin需要改動(dòng)(不然打包會(huì)失敗的),可參考我的pom文件

        04、austin代碼

        從目前的代碼結(jié)構(gòu)和邏輯上看,還是非常簡(jiǎn)單的,沒(méi)有學(xué)過(guò)Flink的同學(xué)應(yīng)該都能看懂:

        目前主要實(shí)現(xiàn)了將數(shù)據(jù)實(shí)時(shí)聚合到Redis,分了兩個(gè)維度:用戶和消息模板(對(duì)應(yīng)的Redis結(jié)構(gòu)都已經(jīng)寫在了代碼的注釋上了)

        跟著做austin項(xiàng)目的小伙伴,只要在kafka創(chuàng)建對(duì)應(yīng)的topic(我這里定義的topicName是austinLog),并且在AustinFlinkConstant中填寫Kafka的Broker信息以及Redis信息后,編譯打包就完了。

        提交到Flink平臺(tái)之后就可以跑了:

        05、后續(xù)

        經(jīng)過(guò)Flink的處理已經(jīng)把數(shù)據(jù)寫入到Redis里邊了,最近我已經(jīng)在寫Controller層開(kāi)發(fā)接口在頁(yè)面上將清洗后的數(shù)據(jù)在頁(yè)面上做展示了。

        從前面的頁(yè)面實(shí)現(xiàn)上如果有了解過(guò)的同學(xué)可能就知道我用的是低代碼平臺(tái)amis,而amis我看了下圖表的文檔用的是echarts進(jìn)行渲染的。

        應(yīng)該問(wèn)題不大,過(guò)兩天估計(jì)就開(kāi)發(fā)完了,主要就是適配參數(shù)的問(wèn)題了,到時(shí)候看起來(lái)應(yīng)該就算比較完整了。

        最近已經(jīng)有小伙伴提了pull request寫了微信服務(wù)號(hào)的接入了,我已經(jīng)merge了代碼,但還沒(méi)調(diào)試。主要比較麻煩的是,我沒(méi)有營(yíng)業(yè)執(zhí)照,就不好開(kāi)服務(wù)號(hào)進(jìn)行調(diào)試,我后面再想想辦法。

        今天就聊到這吧,對(duì)Flink感興趣的同學(xué)可以看看我以往的幾篇文章和官網(wǎng)入門下,我建議先可以把austin的代碼先拉下來(lái),部署一把自己體驗(yàn)體驗(yàn),然后再看理論的知識(shí)。

        1、Flink入門

        2Flink背壓機(jī)制

        3、Flink CheckPoint機(jī)制


        對(duì)線面試官》公眾號(hào)還在持續(xù)分享面試題,沒(méi)關(guān)注的同學(xué)可以關(guān)注一波!這是austin項(xiàng)目的上一個(gè)系列,質(zhì)量桿桿的


        austin項(xiàng)目Gitee鏈接https://gitee.com/zhongfucheng/austin

        austin項(xiàng)目GitHub鏈接:https://github.com/ZhongFuCheng3y/austin

        閱讀原文可跳轉(zhuǎn)austin倉(cāng)庫(kù)

        瀏覽 118
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 操嫩d电影成人网 | 免费一级婬片AA片观看 | 影音先锋aV成人无码电影 | 性爱无码免费视频 | 被振动器折磨强制高潮 |