Kafka 流数据 SQL 引擎 -- KSQL

核能气质少年 提交于 2019-12-12 19:46:39

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

KSQL 是什么?

KSQL 是一个 Kafka 的 SQL 引擎,可以让我们在流数据上持续执行 SQL 查询

例如,有一个用户点击流的topic,和一个可持续更新的用户信息表,使用 KSQL 对点击流数据、用户表进行建模,并把二者连接起来,之后 KSQL 会持续查询这个topic的数据流,并放入表中

KSQL 是开源的、分布式的,具有高可靠、可扩展、实时的特性

KSQL 支持强大的流处理操作,包括聚合、连接、窗口、会话等等

KSQL 解决了什么问题?

KSQL 的主要目的是为了降低流处理的操作门槛,为 Kafka 提供了简单而完善的 SQL 交互接口

之前,为了使用流处理引擎,需要熟悉一些开发语言,例如 Java, C#, Python,Kafka 的流处理引擎作为 Kafka 项目的一部分,是一个 Java 库,需要使用者有熟练的 Java 技能

相对的,KSQL 只需要使用者熟悉 SQL 即可,这使得 Kafka Stream 能够进入更广阔的应用领域,例如商业分析,熟悉 SQL 的分析人员就可以操作,而不用一定是开发人员

KSQL 的应用场景有哪些?

1. 实时监控 实时分析

CREATE TABLE error_counts AS
SELECT error_code, count(*)FROM monitoring_stream
WINDOW TUMBLING (SIZE 1 MINUTE)
WHERE type = 'ERROR'

KSQL 可以让我们对应用产生的事件流自定义测量指标,如日志事件、数据库更新事件等等

例如在一个 web app 中,每当有新用户注册时都需要进行一些检查,如欢迎邮件是否发送了、一个新的用户记录是否创建了、信用卡是否绑定了……,这些点可能分布在多个服务中,这时可以使用 KSQL 对事件流进行统一的监控分析

2. 安全和异常检查

比如对于欺诈、入侵等非法行为,可以定义出检查模型,通过 KSQL 对实时数据流进行检测

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 视图化的展示出来

KSQL 的核心概念

1. STREAM 流

stream 是一个无限的结构化数据序列,这个数据是不可修改的,新的数据可以进入流中,但流中的数据是不可以被修改和删除的

stream 可以从一个 kafka topic 中创建,或者从已存在的流或表中派生出来

CREATE STREAM pageviews (viewtime BIGINT, userid VARCHAR, pageid VARCHAR) 
WITH (kafka_topic='pageviews', value_format=’JSON’);

2. TABLE 表

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 的构成包括:

  1. Kafka 的 Streams API 

  2. 分布式 SQL 引擎

  3. REST API

小结

KSQL 是 confluent 刚刚发布的,目前是开发预览版,很快会发布正式版

KSQL 极大方便了 Kafka 中流数据的处理,虽然还不能在产品中使用,可以提前了解一下

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!