實時業務處理的需求越來越多,也有各種處理方案,比如storm,spark等都可以。那以資料流的方向可以總結成資料源-資料搜集-緩存隊列-實時處理計算-資料展現。本文就用阿裡雲産品簡單實作了一個實時處理的方案。
一,總體架構
按照資料流向
資料采集:flume(配置故障轉移)
緩存隊列:datahub
<a href="https://help.aliyun.com/product/53345.html?spm=5176.7618386.3.4.cigk2v">https://help.aliyun.com/product/53345.html?spm=5176.7618386.3.4.cigk2v</a>
資料計算:阿裡流計算(streamcompute)
<a href="https://help.aliyun.com/video_list/54212.html?spm=5176.7618386.3.2.cogp6l">https://help.aliyun.com/video_list/54212.html?spm=5176.7618386.3.2.cogp6l</a>
資料落地:rds(mysql)
<a href="https://help.aliyun.com/document_detail/26092.html?spm=5176.7841871.6.539.9ftjxu">https://help.aliyun.com/document_detail/26092.html?spm=5176.7841871.6.539.9ftjxu</a>
資料展現:quick-bi
<a href="https://data.aliyun.com/product/bi?spm=5176.8142029.388261.284.spvis0">https://data.aliyun.com/product/bi?spm=5176.8142029.388261.284.spvis0</a>
或者大屏顯示 data-v
<a href="https://data.aliyun.com/visual/datav?spm=5176.8142029.388261.283.spvis0">https://data.aliyun.com/visual/datav?spm=5176.8142029.388261.283.spvis0</a>
二,搭建過程
1,flume配置搭建
flume在資料采集的開源架構中還是比較常用的,但是在采集輸送到datahub中有可能網絡斷了或者伺服器挂了。那這裡配置了故障轉移,如圖,其中sink1和sink2為上面架構中的agenta和agentb.把agenta和agentb分别部署在兩台伺服器上。
那看下配置檔案
agenta和agentb的配置檔案出了ip位址不一樣,其他完全一緻,這裡貼其中一個
三台服務配置完成後啟動flume(先啟動agenta和agentb)預期結果是agent1發送資料到agenta(優先級高的),如果停止agenta服務,會自動轉換發送到agentb。重新開機agegta的服務後,再次切回到agenta。
如圖:正常啟動資料正常傳輸經過agent1-agentb-datahub
此時,停掉agenta服務,日志報錯,故障轉移。
重新開機agenta服務,恢複到之前狀态,切回到sink1
2,datahub建立,
在datahub控制台建立項目和topic,
設定分片和生命周期,具體方法見連結
datahub中看到有flume傳過來的資料
3,配置阿裡流計算
注冊資料源datahub/rds(也支援阿裡其他類型資料源)-編寫流計算腳本-調試-上線-啟動
如圖先注冊資料源供腳本使用。必須要有資料來源表和資料結果表。
在編寫腳本時,可以直接引用表,會自動插入表結構和配置資訊,非常友善
那開始編寫腳本必須包括三部分
1,建立資料來源表,這裡是datahub表
2,建立資料結果表,這裡是rds表
3,将來源表資料寫入結果表,并進行計算
如圖
三、測試
最後,我們把整個流程全部啟動,到rds中看結果如圖
需要在maxcompute中建立好對應表即可自動歸檔存儲。詳細配置如下
<a href="https://help.aliyun.com/document_detail/47453.html?spm=5176.doc47439.6.555.3gnrrs">https://help.aliyun.com/document_detail/47453.html?spm=5176.doc47439.6.555.3gnrrs</a>
好神奇,幾句sql資料就源源不斷的流過來,那麼前端或者其他業務層可以過來拿資料展示了,資料還可以界面化配置歸檔入庫,十分友善。如果有複雜邏輯計算的,可以申請開通流計算的udf功能,這樣看來,學好sql和java,走遍天下都不怕。