Kafka 流数据 SQL 引擎 -- KSQL

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 的构成

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

项目地址

https://github.com/confluentinc/ksql

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2017-09-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP在线

WordPress的可拓展性初探(一)

作者:西瓜玩偶(racnil070512 at hotmail dot com) WordPress是一个时下非常流行的网络信息发布平台,它的特性之一便是极强...

2969
来自专栏IT技术精选文摘

从程序员的角度深入理解MySQL

数据库基本原理 ? 第一,数据库的组成:存储 + 实例 不必多说,数据当然需要存储;存储了还不够,显然需要提供程序对存储的操作进行封装,对外提供增删改查的API...

1935
来自专栏杨建荣的学习笔记

SQL审核工具SQL Advisor简单体验

现在的很多大公司,都喜欢招丰富经验的人,从公司的角度来说,能把当前的事务性工作解决了,在这个基础上能够把你的理解和知识沉淀下来,那是极好的,说通俗一些,算是吸...

1922
来自专栏乐沙弥的世界

Oracle ADDM性能诊断利器及报告解读

性能优化是一个永恒的话题,性能优化也是最具有价值,最值得花费精力深入研究的一个课题,因为资源是有限的,时间是有限的。在Oracle数据库中,随着Oracle功能...

1302
来自专栏后端技术探索

当规模到亿级,MySQL是一个更好的NoSQL!

MySQL是一个更好的NoSQL数据库。当考虑到NoSQL的使用案例,比如对Key/Value键值存储来讲,MySQL在性能、易用性和稳定性方面更有意义。MyS...

1171
来自专栏IT派

如何用Python 编写知乎爬虫?So easy!

在爬虫系统中,待抓取 URL 队列是很重要的一部分。待抓取 URL 队列中的 URL 以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取...

1420
来自专栏编程

Elasticsearch6.0 IKAnalysis分词使用

Elasticsearch 内置的分词器对中文不友好,会把中文分成单个字来进行全文检索,不能达到想要的结果,在全文检索及新词发展如此快的互联网时代,IK可以进行...

2986
来自专栏数据和云

SQL之美 - Oracle 子查询优化系列精讲

题记:SQL优化及SQL审核,是从源头解决性能问题的根本手段,无论是开发人员还是DBA,都应当持续深入的学习SQL开发技能,从而为解决性能问题打下根基。 本系列...

3403

所有您需要了解的关于Elasticsearch 5.0:索引管理

我们看到两种主要的Elasticsearch索引使用模式 - 全局索引和滚动索引。多年来,Elasticsearch增加了一些功能,可以极大地改善这些模式的工作...

4003
来自专栏杨建荣的学习笔记

在线重定义的补充测试(r10笔记第26天)

在很多时候,我们都是需要保持业务的可持续性,尽管说DDL的过程持续时间很短,但是在线业务出现,就会阻塞DML,导致业务访问中断,事务收到影响,所以在有些...

3448

扫码关注云+社区