KSQL,用于Apache Kafka的流數(shù)據(jù)SQL引擎
Apache Kafka是一個(gè)分布式的、分區(qū)的、多復(fù)本的日志提交服務(wù),使用Scala編寫(xiě),以可水平擴(kuò)展和高吞吐率而被廣泛使用。Kafka最初是由LinkedIn開(kāi)發(fā),并于2011年初開(kāi)源,目標(biāo)是為實(shí)時(shí)數(shù)據(jù)處理提供一個(gè)統(tǒng)一、高通量、低等待的平臺(tái)。目前,越來(lái)越多的開(kāi)源分布式處理系統(tǒng)如Cloudera、Apache Storm、Spark都支持與Kafka集成。
Kafka的設(shè)計(jì)可以幫助用戶(hù)解決很多架構(gòu)上的問(wèn)題,其具備的高性能、低耦合、高可靠性、數(shù)據(jù)不丟失等特性,結(jié)合實(shí)際的應(yīng)用系統(tǒng)使用場(chǎng)景,能夠非常滿(mǎn)足用戶(hù)的需求。
8月28日,Kafka Summit大會(huì)在舊金山召開(kāi),同一天Confluent宣布Kafka新的里程碑:KSQL——用于Apache Kafka的流數(shù)據(jù)SQL引擎。KSQL(點(diǎn)擊查看demo)是分布式、可擴(kuò)展、可靠的和實(shí)時(shí)的,支持多種流式操作,包括聚合(aggregate)、連接(join)、時(shí)間窗口(window)、會(huì)話(huà)(session)等等。它為Kafka的流處理提供了一個(gè)簡(jiǎn)單而完整的SQL界面,而不需要再用編程語(yǔ)言(如Java或Python)編寫(xiě)代碼。
KSQL的兩個(gè)核心概念是流(Stream)和表(Table),集成流和表,允許將代表當(dāng)前狀態(tài)的表與代表當(dāng)前發(fā)生事件的流連接在一起。
事實(shí)上,KSQL與關(guān)系型數(shù)據(jù)庫(kù)中的SQL還是有很大不同的。傳統(tǒng)的SQL都是即時(shí)的一次性操作,不管是查詢(xún)還是更新都是在當(dāng)前的數(shù)據(jù)集上進(jìn)行。KSQL的查詢(xún)和更新是持續(xù)進(jìn)行的,而且數(shù)據(jù)集可以源源不斷地增加。簡(jiǎn)言之,KSQL所做的其實(shí)是轉(zhuǎn)換操作,也就是流式處理。
雖然項(xiàng)目基于Apache 2.0協(xié)議開(kāi)源,但目前還處于開(kāi)發(fā)者預(yù)覽階段,不建議用于生產(chǎn)集群中。在可預(yù)料的條件下,KSQL在實(shí)時(shí)監(jiān)控、安全檢測(cè)、在線(xiàn)數(shù)據(jù)集成、應(yīng)用開(kāi)發(fā)等場(chǎng)景擁有極大的潛力。
實(shí)時(shí)監(jiān)控:通過(guò)KSQL自定義業(yè)務(wù)層面的度量指標(biāo),可以實(shí)時(shí)獲得。底層的度量指標(biāo)無(wú)法告訴用戶(hù)應(yīng)用程序的實(shí)際行為,所以基于應(yīng)用程序生成的原始事件來(lái)自定義度量指標(biāo)可以更好地了解應(yīng)用程序的運(yùn)行狀況。另外,可以通過(guò)KSQL為應(yīng)用程序定義某種標(biāo)準(zhǔn),用于檢查應(yīng)用程序在生產(chǎn)環(huán)境中的行為是否達(dá)到預(yù)期;
安全檢測(cè):KSQL把事件流轉(zhuǎn)換成包含數(shù)值的時(shí)間序列數(shù)據(jù),通過(guò)可視化工具把這些數(shù)據(jù)展示在UI上,可以檢測(cè)到很多威脅安全的行為,比如欺詐、入侵等等;
在線(xiàn)數(shù)據(jù)集成:大部分的數(shù)據(jù)處理都會(huì)經(jīng)歷ETL過(guò)程,而這樣的系統(tǒng)通常都是通過(guò)定時(shí)的批次作業(yè)來(lái)完成數(shù)據(jù)處理的,但批次作業(yè)所帶來(lái)的延時(shí)在很多時(shí)候是無(wú)法被接受的。通過(guò)使用KSQL和Kafka連接器,可以將批次數(shù)據(jù)集成轉(zhuǎn)變成在線(xiàn)數(shù)據(jù)集成;
應(yīng)用開(kāi)發(fā):對(duì)于復(fù)雜應(yīng)用來(lái)說(shuō),使用Kafka的原生Streams API或許更合適。不過(guò)對(duì)于簡(jiǎn)單應(yīng)用,或者對(duì)于不喜歡Java編程的人來(lái)說(shuō),KSQL會(huì)是更好的選擇。
未來(lái),項(xiàng)目計(jì)劃增加更多的特性,包括支持更豐富的SQL語(yǔ)法,讓KSQL成為生產(chǎn)就緒的系統(tǒng)。相信KSQL為處理Kafka數(shù)據(jù)而提供的簡(jiǎn)單完整的可交互式SQL接口,能夠降低流式處理的門(mén)檻。