如何擴(kuò)展FlinkSQL實(shí)現(xiàn)流與維表的join,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),臺(tái)安企業(yè)網(wǎng)站建設(shè),臺(tái)安品牌網(wǎng)站建設(shè),網(wǎng)站定制,臺(tái)安網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,臺(tái)安網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
拓展FlinkSQL實(shí)現(xiàn)流與維表的join
FlinkStreamSQL 已經(jīng)開(kāi)源在Github上 目前已獲380+Star
1、為什么要擴(kuò)展FlinkSQL?
實(shí)時(shí)計(jì)算需要完全SQL化
SQL是數(shù)據(jù)處理中使用最廣泛的語(yǔ)言。它允許用戶(hù)簡(jiǎn)明扼要地聲明他們的業(yè)務(wù)邏輯。大數(shù)據(jù)批計(jì)算使用SQL很常見(jiàn),但是支持SQL的實(shí)時(shí)計(jì)算并不多。其實(shí),用SQL開(kāi)發(fā)實(shí)時(shí)任務(wù)可以極大降低數(shù)據(jù)開(kāi)發(fā)的門(mén)檻,在袋鼠云數(shù)棧-實(shí)時(shí)計(jì)算模塊,我們決定實(shí)現(xiàn)完全SQL化。
數(shù)據(jù)計(jì)算采用SQL的優(yōu)勢(shì)
? 聲明式。用戶(hù)只需要表達(dá)我想要什么,至于怎么計(jì)算那是系統(tǒng)的事情,用戶(hù)不用關(guān)心。
? 自動(dòng)調(diào)優(yōu)。查詢(xún)優(yōu)化器可以為用戶(hù)的 SQL 生成最有的執(zhí)行計(jì)劃。用戶(hù)不需要了解它,就能自動(dòng)享受優(yōu)化器帶來(lái)的性能提升。
? 易于理解。很多不同行業(yè)不同領(lǐng)域的人都懂 SQL,SQL 的學(xué)習(xí)門(mén)檻很低,用 SQL 作為跨團(tuán)隊(duì)的開(kāi)發(fā)語(yǔ)言可以很大地提高效率。
? 穩(wěn)定。SQL 是一個(gè)擁有幾十年歷史的語(yǔ)言,是一個(gè)非常穩(wěn)定的語(yǔ)言,很少有變動(dòng)。所以當(dāng)我們升級(jí)引擎的版本時(shí),甚至替換成另一個(gè)引擎,都可以做到兼容地、平滑地升級(jí)。
實(shí)時(shí)計(jì)算還需要流與維表的JOIN
在實(shí)時(shí)計(jì)算的世界里不只是流與流的JOIN
還需要流與維表的JOIN
在實(shí)時(shí)計(jì)算的世界里不只是流與流的JOIN,還需要流與維表的JOIN。在去年,袋鼠云數(shù)棧V3.0版本研發(fā)期間,當(dāng)時(shí)最新版本——flink1.6中FlinkSQL,已經(jīng)將SQL的優(yōu)勢(shì)應(yīng)用到Flink引擎中,但還未支持流與維表的JOIN。
關(guān)于FlinkSQL
FlinkSQL于2017年7月開(kāi)始面向阿里巴巴集團(tuán)開(kāi)放流計(jì)算服務(wù)的,雖然是一個(gè)非常年輕的產(chǎn)品,但是到雙11期間已經(jīng)支撐了數(shù)千個(gè)作業(yè),在雙11期間,Blink 作業(yè)的處理峰值達(dá)到了5+億每秒,而其中僅 Flink SQL 作業(yè)的處理總峰值就達(dá)到了3億/秒。
參考鏈接:https://yq.aliyun.com/articles/457438
這里先解釋下什么是維表;維表是動(dòng)態(tài)表,表里所存儲(chǔ)的數(shù)據(jù)有可能不變,也有可能定時(shí)更新,但是更新頻率不是很頻繁。在業(yè)務(wù)開(kāi)發(fā)中一般的維表數(shù)據(jù)存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)如MySQL,oracle等,也可能存儲(chǔ)在hbase,redis等NoSql數(shù)據(jù)庫(kù)。
2、所以要用FlinkSQL實(shí)現(xiàn)流與維表的join 分兩步:
一、用Flink api實(shí)現(xiàn)維表的功能
要實(shí)現(xiàn)維表功能就要用到 Flink Aysnc I/O 這個(gè)功能,是由阿里巴巴貢獻(xiàn)給Apache Flink的。
Async I/O 是由阿里巴巴貢獻(xiàn)給社區(qū)的,于1.2版本引入,主要目的是為了解決與外部系統(tǒng)交互時(shí)網(wǎng)絡(luò)延遲成為了系統(tǒng)瓶頸的問(wèn)題。具體介紹可以看這篇文章:http://wuchong.me/blog/2017/05/17/flink-internals-async-io/
對(duì)應(yīng)到Flink 的api就是RichAsyncFunction 這個(gè)抽象類(lèi),繼層這個(gè)抽象類(lèi)實(shí)現(xiàn)里面的open(初始化),asyncInvoke(數(shù)據(jù)異步調(diào)用),close(停止的一些操作)方法,最主要的是實(shí)現(xiàn)asyncInvoke 里面的方法。
流與維表的join會(huì)碰到兩個(gè)問(wèn)題:
第一個(gè)是性能問(wèn)題。因?yàn)榱魉僖呛芸欤恳粭l數(shù)據(jù)都需要到維表做下join,但是維表的數(shù)據(jù)是存在第三方存儲(chǔ)系統(tǒng),如果實(shí)時(shí)訪問(wèn)第三方存儲(chǔ)系統(tǒng),不僅join的性能會(huì)差,每次都要走網(wǎng)絡(luò)io;還會(huì)給第三方存儲(chǔ)系統(tǒng)帶來(lái)很大的壓力,有可能會(huì)把第三方存儲(chǔ)系統(tǒng)搞掛掉。
所以解決的方法就是維表里的數(shù)據(jù)要緩存,可以全量緩存,這個(gè)主要是維表數(shù)據(jù)不大的情況,還有一個(gè)是LRU緩存,維表數(shù)據(jù)量比較大的情況。
LRU維表的實(shí)現(xiàn)
第二個(gè)問(wèn)題是流延遲過(guò)來(lái)的數(shù)據(jù)這么跟之前的維表數(shù)據(jù)做關(guān)聯(lián)。這個(gè)就涉及到維表數(shù)據(jù)需要存儲(chǔ)快照數(shù)據(jù),所以這樣的場(chǎng)景用HBase 做維表是比較適合的,因?yàn)镠Base 是天生支持?jǐn)?shù)據(jù)多版本的。
ALL維表的實(shí)現(xiàn)
二、解析流與維表join的SQL語(yǔ)法轉(zhuǎn)化成底層的FlinkAPI
因?yàn)镕linkSQL已經(jīng)做了大部分SQL場(chǎng)景,我們不可能在去解析SQL的所有語(yǔ)法,在把他轉(zhuǎn)化成底層FlinkAPI。
所以我們做的就是解析SQL語(yǔ)法,來(lái)找到j(luò)oin表里有沒(méi)有維表,如果有維表,那我們會(huì)把這個(gè)join的維表的語(yǔ)句單獨(dú)拆來(lái),用Flink的TableAPI和StreamAPi 生成新DataStream,在把這個(gè)DataStream與其他的表在做join這樣就能用SQL來(lái)實(shí)現(xiàn)流與維表的join語(yǔ)法了。
SQL解析的工具就是用Apache calcite,F(xiàn)link也是用這個(gè)框架做SQL解析的。所以所有語(yǔ)法都是可以解析的。
1. DEMO SQL
2. Calcite解析Insert into語(yǔ)句,拆分出子語(yǔ)句
3. Calcite繼續(xù)解析select語(yǔ)句
Calcite繼續(xù)解析select語(yǔ)句
Calcite繼續(xù)解析select語(yǔ)句
關(guān)于如何擴(kuò)展FlinkSQL實(shí)現(xiàn)流與維表的join問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
網(wǎng)站欄目:如何擴(kuò)展FlinkSQL實(shí)現(xiàn)流與維表的join
本文URL:http://aaarwkj.com/article10/pdigdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站營(yíng)銷(xiāo)、微信公眾號(hào)、網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷(xiāo)推廣、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
網(wǎng)頁(yè)設(shè)計(jì)公司知識(shí)