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