KSQL 是一個 Kafka 的 SQL 引擎,可讓咱們在流數據上持續執行 SQL 查詢web
例如,有一個用戶點擊流的topic,和一個可持續更新的用戶信息表,使用 KSQL 對點擊流數據、用戶表進行建模,並把兩者鏈接起來,以後 KSQL 會持續查詢這個topic的數據流,並放入表中數據庫
KSQL 是開源的、分佈式的,具備高可靠、可擴展、實時的特性安全
KSQL 支持強大的流處理操做,包括聚合、鏈接、窗口、會話等等app
KSQL 的主要目的是爲了下降流處理的操做門檻,爲 Kafka 提供了簡單而完善的 SQL 交互接口分佈式
以前,爲了使用流處理引擎,須要熟悉一些開發語言,例如 Java, C#, Python,Kafka 的流處理引擎做爲 Kafka 項目的一部分,是一個 Java 庫,須要使用者有熟練的 Java 技能spa
相對的,KSQL 只須要使用者熟悉 SQL 便可,這使得 Kafka Stream 可以進入更廣闊的應用領域,例如商業分析,熟悉 SQL 的分析人員就能夠操做,而不用必定是開發人員命令行
CREATE TABLE error_counts AS SELECT error_code, count(*)FROM monitoring_stream WINDOW TUMBLING (SIZE 1 MINUTE) WHERE type = 'ERROR'
KSQL 可讓咱們對應用產生的事件流自定義測量指標,如日誌事件、數據庫更新事件等等日誌
例如在一個 web app 中,每當有新用戶註冊時都須要進行一些檢查,如歡迎郵件是否發送了、一個新的用戶記錄是否建立了、信用卡是否綁定了……,這些點可能分佈在多個服務中,這時可使用 KSQL 對事件流進行統一的監控分析code
好比對於欺詐、入侵等非法行爲,能夠定義出檢查模型,經過 KSQL 對實時數據流進行檢測orm
CREATE STREAM possible_fraud AS SELECT card_number, count(*) FROM authorization_attempts WINDOW TUMBLING (SIZE 5 SECONDS) GROUP BY card_number HAVING count(*) > 3;
KSQL 能夠把事件流轉換成數值化的時間序列數據,而後經過 Kafka-Elastic connector
導入到 Elastic,並經過 Grafana UI 視圖化的展現出來
stream 是一個無限的結構化數據序列,這個數據是不可修改的,新的數據能夠進入流中,但流中的數據是不能夠被修改和刪除的
stream 能夠從一個 kafka topic 中建立,或者從已存在的流或表中派生出來
CREATE STREAM pageviews (viewtime BIGINT, userid VARCHAR, pageid VARCHAR) WITH (kafka_topic='pageviews', value_format=’JSON’);
table 是一個流或者其餘表的視圖,是流中數據的一個集合,table 中的數據是可變的,能夠插入,也能夠修改、刪除
table 一樣能夠從一個 kafka topic 中建立,或者從已存在的流或表中派生出來
CREATE TABLE users (registertime BIGINT, gender VARCHAR, regionid VARCHAR, userid VARCHAR) WITH (kafka_topic='users', value_format='DELIMITED');
KSQL server 進程用來執行請求,多個 KSQL server 構成一個集羣,能夠動態增長 KSQL server 的數量來提示處理能力
KSQL server 具備自動容錯能力,若是一個失敗,其餘的會自動接替他的工做
KSQL 有一個命令行終端,輸入的命令會經過 REST API 發送到集羣,經過命令行,咱們能夠檢查全部流和表、執行查詢、查看請求的狀態信息等等
大致上看,KSQL 的構成包括:
Kafka 的 Streams API
分佈式 SQL 引擎
REST API
KSQL 是 confluent 剛剛發佈的,目前是開發預覽版,很快會發布正式版
KSQL 極大方便了 Kafka 中流數據的處理,雖然還不能在產品中使用,能夠提早了解一下