我很是高兴地宣布KSQL,这是面向Apache Kafka的一种数据流SQL引擎。KSQL下降了数据流处理这个领域的准入门槛,为使用Kafka处理数据提供了一种简单的、彻底交互的SQL界面。你再也不须要用Java或Python之类的编程语言编写代码了!KSQL具备这些特色:开源(采用Apache 2.0许可证)、分布式、可扩展、可靠、实时。它支持众多功能强大的数据流处理操做,包括聚合、链接、加窗(windowing)和sessionization(捕获单一访问者的网站会话时间范围内全部的点击流事件)等等。php
文章目录html
若是想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共账号:iteblog_hadoopsql
能够说它实际上与SQL数据库大不同。大多数数据库用于对存储的数据执行按需查找和改动。KSQL还没法执行查询,它所作的是连续转换――也就是说,数据流处理。好比设想一下:我有来自用户的点击流和账户信息表(这些信息关于不断更新的那些用户)。KSQL让我能够对该点击流和用户表进行建模,并将二者链接起来,尽管那二者当中的一个是无限的。数据库
因此,KSQL对Kafka话题中的数据流执行连续查询――随着新数据不断流入,转换在连续进行。相比之下,针对关系数据库的查询是一次性查询――对数据集运行一次便可完成,就像针对数据库中有限行的SELECT语句。apache
很好,如今你能够连续查询无限数据流。那有什么好处呢?编程
|
这方面的一个用途是,定义实时计算的自定义业务级别度量指标,你能够监控并发出警报,就像监控CPU负载那样。另外一个用途是,在KSQL中为应用程序定义正确性概念,并核实它在生产环境中运行时知足这个概念。咱们一提到监控,经常想到跟踪低级别性能统计数字的计数器(counter)和计量器(gauge)。这些种类的计量器经常能够告诉你CPU负载很高,但其实没法告诉你应用程序是否在作它应该作的事情。KSQL容许针对应用程序生成的原始事件流定义自定义度量指标,不管它们是日志事件、数据库更新仍是其余任何类型的事件。
好比说,一个Web应用程序可能须要核实:每当新客户注册,就发送欢迎电子邮件,建立新的用户记录,并对其信用卡计费。这些功能可能分散在不一样的服务或应用程序中,你须要监控,确保对每一个新客户而言,每一个操做都在某个服务级别协议(SLA)里面(好比30秒)。
|
这方面的简单版本是你在上面演示中看到的:KSQL查询将事件流转换成数值时间序列聚合,这些聚合使用Kafka-Elastic链接件输入到Elastic,并在Grafana UI中加以可视化。安全用例经常酷似监控和分析。你寻找欺诈、滥用、垃圾邮件、入侵或其余不良行为方面的模式,而不是监控应用程序行为或业务行为。KSQL为定义这些模式并查询实时数据流提供了一种简单、先进、实时的方法。
|
许多公司进行的数据处理大部分属于数据丰富(data enrichment)这个范畴:拿来来自几个数据库的数据,将其转换,链接起来,并将数据存储到键值存储库、搜索索引、缓存或其余数据服务系统。长期以来,用于数据整合的ETL(提取、转换和加载)做为按期的批处理做业来加以执行。好比说,实时转储原始数据,而后每隔几小时进行转换,以实现高效查询。对于许多用例而言,这种延迟是不可接受的。若是结合Kafka链接件使用,KSQL可以实现由批量数据整合转变为联机数据整合。你可使用数据流-表链接,借助存储在表中的元数据来丰富数据流,或者将数据流加载到另外一个系统以前,对PII(我的身份信息)数据执行简单的过滤。
许多应用程序将输入数据流转换成输出数据流。好比说,负责为在线商店从新排序库存少的产品的进程可能须要销售和发货方面的数据流,才能计算订单数据流。
至于用Java编写的更复杂的应用程序,Kafka的原生数据流API可能正是咱们所须要的。不过针对简单的应用程序,或者对Java编程不感兴趣的团队,简单的SQL界面也许正是它们所寻找的。
KSQL在内部使用Kafka的Streams API(https://kafka.apache.org/documentation/streams/),它们使用一样的核心抽象来用于Kafka端的数据流处理。KSQL中有两个核心抽象,它们对应于Kafka Streams中的两个核心抽象,让你能够处理Kafka主题:
一、STREAM:数据流是无限序列的结构化数据(“事实”,fact)。好比说,咱们可能有一个财务交易数据流,好比“Alice向Bob打款100美圆,而后Charlie向Bob打款50美圆”。数据流中的事实是不可变的,这意味着新的事实能够插入到数据流中,但现有的事实根本没法被更新或删除。数据流能够由Kafka主题来建立,或由现有的数据流和表来生成。
|
2.、TABLE:表是STREAM或另外一个TABLE的视图,它表示不断变化的事实的集合。好比说,咱们可能有一个表,含有最新的财务信息,好比“Bob当前的账户余额是150美圆”。它至关于传统的数据库表,可是由数据加窗之类的数据流语义加以丰富。表中的事实是不可变的,这意味着新的事实能够插入到表中,但现有的事实根本没法被更新或删除。表能够由Kafka主题来建立,或由现有的数据流和表来生成。
|
KSQL简化了数据流应用程序,由于它彻底整合了表和数据流这两个概念,容许将表明事实现状的数据流与表明当前发生的事件的表链接起来。Apache Kafka中的主题能够表示为KSQL中的STREAM或TABLE,具体取决于主题处理的预期语义。好比说,若是你想把主题中的数据做为一系列独立值来读取,可使用CREATE STREAM。这种数据流的一个示例是获取页面视图事件的主题,其中每一个页面视图事件是不相关的,彼此独立。另外一方面,若是你想把主题中的数据做为可更新值的不断变化的集合来读取,可使用CREATE TABLE。说到应该在KSQL中做为TABLE来读取的话题,这方面的一个例子是获取用户元数据的主题,其中每一个事件表示特定用户ID的最新元数据,不管是用户的姓名、地址仍是喜爱选择。
不妨看一个实际的演示。此演示显示了你如何将KSQL用于实时监控、异常检测和警报。针对点击流数据的实时日志分析有好几种形式。在本文例子中,咱们标记出了在测试Web服务器上占用太多带宽的恶意用户会话。监控恶意用户会话是sessionization的许多应用之一。不过笼统地说,会话是用户行为分析的基本模块。一旦你按照特定的会话标识符将用户和事件关联起来,就能够构建许多类型的分析机制,从简单的度量指标(好比访问次数),到更复杂的度量指标(好比客户转换漏斗和事件流),不一而足。咱们在演示的最后环节显示了如何在Elastic支持的Grafana仪表板上实时显示KSQL查询的输出结果。
视频播放器
00:00
05:09
若是想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共账号:iteblog_hadoop
有一个KSQL服务器进程执行查询。一组KSQL进程做为一个集群来运行。能够经过启动KSQL服务器的更多实例来动态添加更多的处理能力。这些实例具备容错性:若是一个实例失效,另外几个会接过它处理的工做。使用交互式KSQL命令行客户软件来启动查询,客户软件经过REST API向集群发送命令。命令行让你能够检查可用的数据流和表,执行新的查询,检查运行中查询的状态,并终止运行中查询。在内部,KSQL是使用Kafka的Streams API构建的;它继承了Kafka的弹性可扩展性、先进的状态管理及容错功能,还支持Kafka最近推出的只处理一次(exactly-once proecessing)语义。KSQL服务器嵌入这个机制,另外添加了分布式SQL引擎(包括一些新颖的功能,好比提高查询性能的字节码自动生成)以及用于查询和控制的REST API。
过去咱们谈论了颠覆数据库(https://www.confluent.io/blog/turning-the-database-inside-out-with-apache-samza/),如今咱们经过为由内到外发生变化的数据库添加SQL层来实现颠覆。
在关系数据库中,表是核心抽象,日志是实现细节。而在以事件为中心的世界,数据库已被颠覆,核心抽象不是表,而是日志。这些表只是来源于日志,随着新数据进入到日志,表不断更新。中央日志是Kafka,KSQL是引擎,让你能够建立所需的物化视图,并将它们表示为持续更新的表。而后,你能够针对这类流式表运行时间点查询(KSQL即将发布该功能),为日志中的每一个键得到最新值,采起持续不断的方式。
若是想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共账号:iteblog_hadoop
使用Kafka和KSQL完全颠覆数据库,这对公司中能够用数据流方式来表示和处理的全部数据派什么用场带来了很大的影响。Kafka日志是数据流的核心存储抽象,容许进入到离线数据仓库的相同数据如今可用于数据流处理。其余一切数据是基于日志的流式物化视图,不管是各类数据库、搜索索引仍是公司中的其余数据服务系统。如今可使用KSQL,以数据流的方式,执行建立这些派生视图所需的全部数据丰富和ETL。监控、安全、异常及威胁检测、分析以及故障应对能够实时执行,而不是为时太晚才执行。全部这些可供任何人使用,只要借助一种对你的全部Kafka数据而言简单又熟悉的SQL界面:KSQL。
若是想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共账号:iteblog_hadoop
咱们在发布开发者预览版的KSQL,开始围绕它构建社区,并征集反馈意见。咱们计划与开源社区合做,增添另外几项功能,从而将它变成一种可准备部署到生产环境的系统:从KSQL的质量、稳定性和可操做性,直到支持更丰富的SQL语法(包括进一步的聚合功能和针对连续表的时间点SELECT),对迄今为止计算的数据执行快速查询。
你能够试一试KSQL快速入门和上述演示来实际体验一下。欢迎你反馈缺乏什么功能,或者哪些方面能够改进:欢迎到Confluent Community Slack上的#KSQL频道发表任何想法或反馈,若是你发现了错误,欢迎提交GitHub问题单;咱们很乐意与早期采用者密切合做,因此请踊跃参与。咱们期待与开源社区的其他人合做,让KSQL变成一项出色的技术。
本文英文原文:https://www.confluent.io/blog/ksql-open-source-streaming-sql-for-apache-kafka/