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