直播推薦
企業(yè)動(dòng)態(tài)
- “+普惠、+性能、+智能”:華為“三板斧”破局商業(yè)市場(chǎng)全閃落地挑戰(zhàn)
- 端點(diǎn)科技攜手中物聯(lián),第六屆國(guó)有企業(yè)數(shù)智化采購(gòu)與供應(yīng)鏈論壇圓滿舉行!
- 銳呈GPS網(wǎng)絡(luò)時(shí)鐘在華能應(yīng)城熱電有限責(zé)任公司成功投運(yùn)
- 烈日下的跨城馳援:皓天技術(shù)團(tuán)隊(duì)為重慶企業(yè)解設(shè)備燃眉急
- 西馬克集團(tuán)亮相中國(guó)國(guó)際鋁工業(yè)展 創(chuàng)新助力行業(yè)可持續(xù)發(fā)展二十年
- 德國(guó)Kniel工業(yè)電源全線到貨!高效穩(wěn)定助力智能制造升級(jí)
- 為數(shù)智化而生,華為商業(yè)市場(chǎng)極簡(jiǎn)全閃數(shù)據(jù)中心Pro+引領(lǐng)全閃走向普惠
- 華為極簡(jiǎn)全閃數(shù)據(jù)中心Pro+:破解教育數(shù)智化難題 點(diǎn)亮智慧校園新燈塔
推薦展會(huì)
StreamCQL是一個(gè)類SQL的聲明式語(yǔ)言,它用于在流(streams)和可更新關(guān)系(updatable relation)上的可持續(xù)查詢,目的是在流處理平臺(tái)分布式計(jì)算能力之上,通過使用簡(jiǎn)易通用的類SQL語(yǔ)言,使得業(yè)務(wù)邏輯的開發(fā)變得統(tǒng)一和簡(jiǎn)易。在功能上,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, time="">的方式來表示,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ù)庫(kù)表的各種查詢操作。在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ù)庫(kù)的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)鍵字。

圖3 雙流Join示例
下表時(shí)當(dāng)有數(shù)據(jù)流動(dòng)的時(shí)候,雙向Join的輸出舉例。

圖4 雙流Join結(jié)果示例

圖5 雙流Join單流觸發(fā)Join示例

圖6 雙流Join單流觸發(fā)Join數(shù)據(jù)示例
Filter算子適合只有單純數(shù)據(jù)過濾的簡(jiǎn)單場(chǎng)景,不支持任何其他列轉(zhuǎn)換運(yùn)算,不支持窗口。
Functor算子在Filter算子的基礎(chǔ)上 添加了列轉(zhuǎn)換運(yùn)算,支持Select子句運(yùn)算。
Aggregate算子是一個(gè)大而全的算子,在Functor的基礎(chǔ)上,添加了窗口功能,并支持分組,聚合,窗口前過濾,窗口后過濾,聚合后過濾(having),排序功能。

圖7 aggregate聚合算子內(nèi)部關(guān)系說明
Split算子的主要作用在于完成單個(gè)流到多個(gè)流的拆分,支持每個(gè)流輸出不同數(shù)據(jù)。

圖8 Split算子示例

圖9 Split算子輸出舉例
Merge算子作用正好和Split算子相反,支持多流到單個(gè)流的合并。Merge算子要求每個(gè)流都有一個(gè)字段和其他流中的一個(gè)字段匹配,這樣才會(huì)合并做同一條數(shù)據(jù)。類似關(guān)系型數(shù)據(jù)庫(kù)中的多留等值Join。

圖10 Merge算子示例

圖11 Merge算子數(shù)據(jù)輸出示例
Union算子在CQL語(yǔ)法層面不支持,但是在CQL內(nèi)部,會(huì)自動(dòng)將滿足條件的算子優(yōu)化為Union算子。Union算子不支持任何過濾查詢運(yùn)算,只是簡(jiǎn)單進(jìn)行流合并。
Input和output算子是單純的輸入和輸出算子,其中包含數(shù)據(jù)的讀取,寫入,序列化、反序列化功能。
3. 業(yè)務(wù)接口
StreamCQL的業(yè)務(wù)接口構(gòu)建在Storm所有功能之上,分為CQL和IDE,其中IDE指的是類似Eclipse的開發(fā)IDE,這種IDE以功能層各類算子和窗口為基礎(chǔ),可以很容易進(jìn)行拖拉拽等流拓?fù)溟_發(fā);IDE功能目前還沒有實(shí)現(xiàn)。
CQL指的是CQL的語(yǔ)法,包含語(yǔ)法定義,語(yǔ)法解析,語(yǔ)義分析,流抽象拓?fù)錁?gòu)建等功能。CQL對(duì)StreamCQL對(duì)外功能展示的入口。相關(guān)CQL語(yǔ)法設(shè)計(jì)和對(duì)外拓展接口可以在Github上查看語(yǔ)法手冊(cè)。
免責(zé)聲明
- 凡本網(wǎng)注明"來源:智能制造網(wǎng)"的所有作品,版權(quán)均屬于智能制造網(wǎng),轉(zhuǎn)載請(qǐng)必須注明智能制造網(wǎng),http://m.xashilian.com。違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
- 企業(yè)發(fā)布的公司新聞、技術(shù)文章、資料下載等內(nèi)容,如涉及侵權(quán)、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔(dān)責(zé)任,本網(wǎng)有權(quán)刪除內(nèi)容并追溯責(zé)任。
- 本網(wǎng)轉(zhuǎn)載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品來源,并自負(fù)版權(quán)等法律責(zé)任。
- 如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
CIEME2025第二十三屆中國(guó)國(guó)際裝備制造業(yè)博覽會(huì)
展會(huì)城市:沈陽(yáng)市展會(huì)時(shí)間:2025-09-01