本文转自:云头条(YunTouTiao)公众号。
英文原文:https://www.confluent.io/blog/ksql-open-source-streaming-sql-for-apache-kafka/
我非常高兴地宣布KSQL,这是面向Apache Kafka的一种数据流SQL引擎。KSQL降低了数据流处理这个领域的准入门槛,为使用Kafka处理数据提供了一种简单的、完全交互的SQL界面。你不再需要用Java或Python之类的编程语言编写代码了!KSQL具有这些特点:开源(采用Apache 2.0许可证)、分布式、可扩展、可靠、实时。它支持众多功能强大的数据流处理操作,包括聚合、连接、加窗(windowing)和sessionization(捕获单一访问者的网站会话时间范围内所有的点击流事件)等等。
一个简单的例子
查询流式数据意味着什么?这与SQL数据库相比怎样?
可以说它实际上与SQL数据库大不一样。大多数数据库用于对存储的数据执行按需查找和改动。KSQL还无法执行查询,它所做的是连续转换――也就是说,数据流处理。比如设想一下:我有来自用户的点击流和帐户信息表(这些信息关于不断更新的那些用户)。KSQL让我可以对该点击流和用户表进行建模,并将两者连接起来,尽管那两者当中的一个是无限的。
所以,KSQL对Kafka话题中的数据流执行连续查询――随着新数据不断流入,转换在连续进行。相比之下,针对关系数据库的查询是一次性查询――对数据集运行一次即可完成,就像针对数据库中有限行的SELECT语句。
KSQL适用于什么?
很好,现在你可以连续查询无限数据流。那有什么好处呢?
1.实时监控遇上实时分析
CREATE TABLE error_counts AS SELECT error_code, count(*)FROM monitoring_stream WINDOW TUMBLING (SIZE 1 MINUTE) WHERE type = 'ERROR' |
这方面的一个用途是,定义实时计算的自定义业务级别度量指标,你可以监控并发出警报,就像监控CPU负载那样。另一个用途是,在KSQL中为应用程序定义正确性概念,并核实它在生产环境中运行时满足这个概念。我们一提到监控,常常想到跟踪低级别性能统计数字的计数器(counter)和计量器(gauge)。这些种类的计量器常常可以告诉你CPU负载很高,但其实无法告诉你应用程序是否在做它应该做的事情。KSQL允许针对应用程序生成的原始事件流定义自定义度量指标,无论它们是日志事件、数据库更新还是其他任何类型的事件。
比如说,一个Web应用程序可能需要核实:每当新客户注册,就发送欢迎电子邮件,创建新的用户记录,并对其信用卡计费。这些功能可能分散在不同的服务或应用程序中,你需要监控,确保对每个新客户而言,每个操作都在某个服务级别协议(SLA)里面(比如30秒)。