一個(gè)基于flinkSql 的實(shí)時(shí)計(jì)算平臺(tái)

一、可行性分析

Flink是一款分布式的計(jì)算引擎,它可以用來做批處理,即處理靜態(tài)的數(shù)據(jù)集、歷史的數(shù)據(jù)集;也可以用來做流處理,即實(shí)時(shí)地處理一些實(shí)時(shí)數(shù)據(jù)流,實(shí)時(shí)地產(chǎn)生數(shù)據(jù)的結(jié)果。既然是一個(gè)實(shí)時(shí)計(jì)算平臺(tái),這里主要用到他的流處理能力。他被稱之為繼storm、sparkStreaming 之后的第三代流處理引擎。

對(duì)于應(yīng)用Flink的開發(fā)者來說關(guān)系的是數(shù)據(jù)源是什么,做什么處理,數(shù)據(jù)落到哪里去。這是一個(gè)通用的數(shù)據(jù)處理邏輯,在flink中抽象成 source、operator、sink三部分。flinkSQL 中會(huì)把source定義成一張table,也就是tableSource。operator就是常寫的sql邏輯,比如count、group by 之類的。sink 在flinkSQl中稱為tableSink。在flinkSQL 編程過程中需要事先注冊(cè)TableSource 和 TableSink,也就是源表是什么,結(jié)果表是什么,中間的sql就是從源表select 進(jìn)行sql聚合計(jì)算之類的,insert into 到結(jié)果表。

對(duì)于tableSource來說最終對(duì)接的數(shù)據(jù)源可以是關(guān)系型數(shù)據(jù)庫oracle、mysql..;可以是消息隊(duì)列kafka,可以是NOSQL Hbase、redis 之類的、等等。需要思考的無非就是在獲取這些數(shù)據(jù)源的時(shí)候怎么轉(zhuǎn)換成flink內(nèi)部的tabe。

對(duì)于operator來說可以直接寫sql語句 + UDF函數(shù)就可以,當(dāng)然在流處理中還有一些特殊的計(jì)算比如window.。如果需要的話,那可能還需要?jiǎng)?chuàng)造sql之外的語法結(jié)構(gòu)。最好的是將這些非sql原生的在平臺(tái)內(nèi)部消化掉,盡量讓用戶覺得易用。

對(duì)于TableSink 來說同tableSource.因?yàn)槲覀兛赡軙?huì)把數(shù)據(jù)寫入各種組件。一個(gè)sql語句的在Flink里面是Row格式。我們需要做的就是解析SQL產(chǎn)生的Row結(jié)果寫入不同的組件。

二、平臺(tái)構(gòu)思

上面所述基本只是說明了這個(gè)平臺(tái)的可行性。該怎么實(shí)現(xiàn)呢?先對(duì)平臺(tái)進(jìn)行一下構(gòu)思。

一、平臺(tái)的通用性

既然是一個(gè)基于flinkSql實(shí)時(shí)計(jì)算平臺(tái)。希望用戶更多的是寫sql來解決用戶的需求。用戶可以選擇自己的數(shù)據(jù)源,然后編寫sql,然后選擇sql結(jié)果的落地方,便可以形成job進(jìn)行運(yùn)行。這部分需要有一個(gè)前臺(tái)系統(tǒng)去支持。這里不是重點(diǎn)。但是最終前臺(tái)sql的編排會(huì)形成一個(gè)job的描述這個(gè)描述可以是一個(gè)josn串。大概分為4部分。

1、source schema描述

主要是描述source是什么數(shù)據(jù)源,他有哪些字段,字段的類型是什么

2、業(yè)務(wù)邏輯sql

這個(gè)就是簡單了就是一個(gè)sql語言。和臨時(shí)表之類的

3、sink schema描述

主要是描述sink是什么數(shù)據(jù)源,他有哪些字段,字段的類型是什么

4、任務(wù)描述

主要描述這個(gè)任務(wù)在flink上運(yùn)行需要多少資源,等等一些flink內(nèi)部的參數(shù)

二、平臺(tái)怎么使用

上面所說的其實(shí)我們實(shí)現(xiàn)的只是一個(gè)在flink中適配各種數(shù)據(jù)存儲(chǔ)組件的程序包。他只是一個(gè)模板。他本身是不知道使用人員是要干啥。他必須拿到j(luò)ob的描述之后才能替開發(fā)sql的人員干活。job的描述相當(dāng)于是平臺(tái)的配置信息。下面是我的一個(gè)使用構(gòu)想圖。有更好方案的可以留言聯(lián)系我


三、后續(xù)進(jìn)展透露<敬請(qǐng)關(guān)注>

一、針對(duì)數(shù)據(jù)源是JSON格式的并且是有嵌套對(duì)象,嵌套數(shù)組的怎么解析成Table

http://www.itdecent.cn/p/848a399d977e

二、剖析fink中kafkaTbaleSource的實(shí)現(xiàn)? ? ?

http://www.itdecent.cn/p/53b0f149d33e

三、剖析fink中kafkaTbaleSink的實(shí)現(xiàn)

原理同?剖析fink中kafkaTbaleSource的實(shí)現(xiàn)

http://www.itdecent.cn/p/53b0f149d33e

四、改造kafkaTbaleSource

五、改造kafkaTbaleSink

六、實(shí)現(xiàn)HbaseTableSource

七、實(shí)現(xiàn)HbaseTbaleSink

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容