開源流處理框架SreamCQL架構(gòu)的解析
大?。?/span>0.4 MB 人氣: 2017-10-13 需要積分:1
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
標(biāo)簽:sreamcql架構(gòu)(1704)
StreamCQL是一個(gè)類SQL的聲明式語言,它用于在流(streams)和可更新關(guān)系(updatable relation)上的可持續(xù)查詢,目的是在流處理平臺(tái)分布式計(jì)算能力之上,通過使用簡易通用的類SQL語言,使得業(yè)務(wù)邏輯的開發(fā)變得統(tǒng)一和簡易。在功能上,StreamCQL彌補(bǔ)了傳統(tǒng)流處理平臺(tái)上一些基本業(yè)務(wù)功能的缺失,除了過濾、轉(zhuǎn)換等基本SQL能力之外, 還引入基于內(nèi)存窗口的計(jì)算、統(tǒng)計(jì)、關(guān)聯(lián)等能力,以及流數(shù)據(jù)的拆分、合并等功能。StreamCQL重要概念介紹
流:流是一組(無窮)元素的集合,流上的每個(gè)元素都屬于同一個(gè)schema;每個(gè)元素都和邏輯時(shí)間有關(guān);即流包含了元組和時(shí)間的雙重屬性。流上的任何一個(gè)元素,都可以用Element的方式來表示,tuple是元組,包含了數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)內(nèi)容,Time就是該數(shù)據(jù)的邏輯時(shí)間。Window:窗口(window)是流處理中解決事件的無邊界(unbounded)及流動(dòng)性的一種重要手段,把事件流在某一時(shí)刻變成靜態(tài)的視圖,以便進(jìn)行類似數(shù)據(jù)庫表的各種查詢操作。在stream上可以定義window,窗口有兩種類型,時(shí)間窗口(time-based)和記錄窗口(row-based)。兩種窗口都支持兩種模式,滑動(dòng)(slide)和跳動(dòng)(tumble)。算子:算子是包含了一系列運(yùn)算關(guān)系的組合,比如聚合算子,就包含了查詢(select),窗口,聚合(aggregate),排序(sort),窗口前過濾(filter before window),窗口之后的過濾(where),聚合之后的過濾(having)等功能,除此之外,還有流拆分算子,流合并算子等。StreamCQL中的算子分為三類:輸入算子、輸出算子、功能算子。
StreamCQL架構(gòu)介紹StreamCQL總體架構(gòu)如下圖所示:

圖1 StreamCQL架構(gòu)圖
StreamCQL的總體架構(gòu)分為引擎、功能、業(yè)務(wù)接口三層,每隔層次之間分工明確,責(zé)任清晰,可以輕易進(jìn)行功能拓展。
1. 引擎
StreamCQL的引擎層,可以適配各種不同的流處理引擎,比如Flink等,目前主要適配Storm。
引擎層的作用在于完成完成對(duì)各類算子對(duì)底層不同流處理引擎的接口適配、拓?fù)涞臉?gòu)建、提交查看刪除等操作。
以Storm適配為例,在Storm中,對(duì)外接口分為Spout和Bolt,其中,Spout就對(duì)應(yīng)輸入算子,Bolt對(duì)應(yīng)輸出算子和功能算子;StreamCQL中所有操作是以算子為單位的,各類運(yùn)算都發(fā)生在不同的算子內(nèi)部。算子分為輸入算子、輸出算子和功能算子,在Storm適配層中,就包含輸入算子對(duì)Spout的適配,輸出算子和功能算子對(duì)Bolt的適配,以及emit的適配,topology builder的適配。只要通過幾百行代碼就可以完成對(duì)Storm引擎的適配工作。
StreamCQL引擎層和Streaming的對(duì)外接口如下圖所示:

圖2 StreamCQL底層解耦架構(gòu)
StreamCQL在Storm自身的IRichSpout,IRichBolt接口基礎(chǔ)上,實(shí)現(xiàn)了StormSpout、StormBolt和StormOutputBolt來屏蔽底層不同引擎帶來的接口變更。
StreamApapter是一個(gè)適配器,主要作用就是將Streaming算子注入到Spout和Bolt中。
IInputStreamOperator、IFunctionStreamOperator和IOutputStreamOperator是所有的輸入輸出和功能性算子的接口,同用戶自定義接口一致。
該架構(gòu)使用依賴注入的原則,實(shí)現(xiàn)了各個(gè)每個(gè)層級(jí)算子之間的解耦。
2. 功能功能層以Stream和Window為基礎(chǔ),構(gòu)建出了Join,Aggregate等算子。
Stream即流,該功能構(gòu)建出了整個(gè)流處理平臺(tái)數(shù)據(jù)流的基礎(chǔ)。定義了數(shù)據(jù)流動(dòng)、解析和分發(fā)規(guī)則。
Window:window是流上一段時(shí)間內(nèi)數(shù)據(jù)的集合。StreamCQL上絕大部分的計(jì)算,都是基于窗口的。
流和窗口構(gòu)成了整個(gè)流處理平臺(tái)的核心。
StreamCQL功能層的算子包含Join算子、Aggregate算子、Split算子、Merge算子、Functor算子、filter算子、union算子、輸入算子和輸出算子,模式匹配算子目前暫時(shí)沒有實(shí)現(xiàn)。
Join算子提供的功能類似關(guān)系型數(shù)據(jù)庫的Join功能。目前StreamCQL支持的Join類型包含Inner Join,Left (outer) Join,Right (outer) Join,F(xiàn)ull (outer) Join ,Cross Join四種類型。目前只支持雙流Join。由于流的特殊性,Join的時(shí)候,兩個(gè)流的數(shù)據(jù)都是在不斷發(fā)生變化的,所以兩個(gè)流任何一個(gè)流的數(shù)據(jù)變化,都會(huì)觸發(fā)Join操作。如果只想讓某個(gè)流觸發(fā)Join,那么就應(yīng)該使用UNIDIRECTION關(guān)鍵字。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
