Apache Kafka是一個分佈式的、分區的、多複本的日誌提交服務,使用Scala編寫,以可水平擴展和高吞吐率而被普遍使用。Kafka最初是由LinkedIn開發,並於2011年初開源,目標是爲實時數據處理提供一個統1、高通量、低等待的平臺。目前,愈來愈多的開源分佈式處理系統如Cloudera、Apache Storm、Spark都支持與Kafka集成。數據庫
Kafka拓撲結構編程
Kafka的設計能夠幫助用戶解決不少架構上的問題,其具有的高性能、低耦合、高可靠性、數據不丟失等特性,結合實際的應用系統使用場景,可以很是知足用戶的需求。安全
8月28日,Kafka Summit大會在舊金山召開,同一天Confluent宣佈Kafka新的里程碑:KSQL——用於Apache Kafka的流數據SQL引擎。KSQL(點擊查看demo)是分佈式、可擴展、可靠的和實時的,支持多種流式操做,包括聚合(aggregate)、鏈接(join)、時間窗口(window)、會話(session)等等。它爲Kafka的流處理提供了一個簡單而完整的SQL界面,而不須要再用編程語言(如Java或Python)編寫代碼。session
KSQL的兩個核心概念是流(Stream)和表(Table),集成流和表,容許將表明當前狀態的表與表明當前發生事件的流鏈接在一塊兒。架構
KSQL項目架構app
事實上,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接口,可以下降流式處理的門檻。