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 中流数据的处理,虽然还不能在产品中使用,能够提早了解一下