您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>源码下载>汇编编程>

用于Apache katkatm的流式SQL引擎KSQL详解

大小:0.2 MB 人气: 2017-09-28 需要积分:1

  KSQL是一个用于Apache katkatm的流式SQL引擎。KSQL降低了进入流处理的门槛,提供了一个简单的、完全交互式的SQL接口,用于处理Kafka的数据。你不再需要用JavaPython这样的编程语言编写代码了!KSQL是开源的(Apache 2.0许可)、分布式的、可扩展的、可靠的和实时的。它支持广泛的强大的流处理操作,包括聚合、连接、窗口、会话,等等。

  一个简单的例子

  用于Apache katkatm的流式SQL引擎KSQL详解

  查询流数据是什么意思,这与SQL数据库有什么区别呢?

  实际上,它与SQL数据库有很大的不同。大多数数据库都用于对存储数据进行按需查找和修改。KSQL不进行查找(但是),它所做的是连续的转换——也就是,流处理。例如,假设我有一个来自用户的点击流,以及一个关于这些用户不断更新的帐户信息的表。KSQL允许我对这一串单击和用户表进行建模,并将两者结合在一起。即使这两件事之一是无限的。

  因此,KSQL所运行的是连续查询——在Kafka主题的数据流中,连续不断地运行新数据。相反,传统数据库对关系数据库的查询是一次性查询——在数据库中运行一次SELECT语句获取有限行的数据集。

  KSQL的好处是什么?

  很好,所以你可以不断地查询无限的数据流。这有什么好处?

  1 实时监控实时分析 CREATETABLEerror_counts ASSELECTerror_code,count(*)FROMmonitoring_stream WINDOW TUMBLING (SIZE1MINUTE) WHEREtype =‘ERROR’

  其中的一个用途是定义定制的业务级度量,这些度量是实时计算的,您可以监视和警报,就像您的CPU负载一样。另一个用途是在KSQL中定义应用程序的正确性的概念,并检查它在生产过程中是否会遇到这个问题。通常,当我们想到监控时,我们会想到计数器和仪表跟踪低水平的性能统计。这些类型的测量器通常可以告诉你CPU负载很高,但是它们不能真正告诉你你的应用程序是否在做它应该做的事情。KSQL允许从应用程序生成的原始事件流中定义定制指标,无论它们是日志事件、数据库更新还是其他类型的事件。

  例如,一个web应用程序可能需要检查,每次新客户注册一个受欢迎的电子邮件,创建一个新的用户记录,并且他们的信用卡被计费。这些功能可能分布在不同的服务或应用程序中,您可能希望监视每个新客户在SLA中发生的每一件事,比如30秒。

  2 安全性和异常检测 CREATESTREAM possible_fraud ASSELECTcard_number, count (*) FROM authorization_attempts WINDOW TUMBLING (SIZE 5 SECONDS) GROUP BY card_number HAVING count(*)》 3;

  这是您在上面的演示中看到的一个简单的版本:KSQL查询,它将事件流转换为数值时间序列,使用Kafka-Elastic连接器将其注入到弹性中,并在Grafana UI中可视化。安全用例通常看起来很像监视和分析。而不是监视应用程序的行为或业务行为,您正在寻找欺诈、滥用、垃圾邮件、入侵或其他不良行为的模式。KSQL提供了一种简单、复杂和实时的方式来定义这些模式和查询实时流。

  3 在线数据集成 CREATESTREAM vip_users ASSELECTuserid, page,actionFROMclickstream c LEFTJOINusers u ONc.userid = u.user_id WHEREu.level=‘Platinum’;

  在公司中完成的大部分数据处理都属于数据丰富的领域:从几个数据库中提取数据,转换它,将其连接到一个键值存储、搜索索引、缓存或其他数据服务系统中。在很长一段时间内,用于数据集成的ETL-提取、转换和加载-作为周期性的批处理作业执行。例如,实时转储原始数据,然后每隔几个小时转换一次,以实现高效的查询。对于许多用例来说,这种延迟是不可接受的。KSQL与Kafka的连接器一起使用时,可以从批处理数据集成到在线数据集成。您可以使用流-表连接存储在表中的元数据来丰富数据流,或者在将流加载到另一个系统之前对PII(个人可识别的信息)进行简单的过滤。

  4 应用程序开发

  许多应用程序将输入流转换为输出流。 例如,负责重新排序在线商店库存不足的产品的流程可能会产生销售和出货流,以计算出订单流。

  对于用Java编写的更复杂的应用程序来说,Kafka的原生流API可能帮助不大。但是对于简单的应用程序,或者对Java编程不感兴趣的团队来说,一个简单的SQL接口可能就是他们想要的。

  KSQL中的核心抽象

  KSQL在内部使用Kafka的Streams API,并且它们共享与Kafka流处理相同的核心抽象。 KSQL有两个核心抽象,它们映射到Kafka Streams中的两个核心抽象,并允许您操纵Kafka主题:

  1.流:流是无限制的结构化数据序列(“事实”)。 例如,我们可以有一个金融交易流,例如“Alice向Bob发送了100美元,然后查理向鲍勃发送了50美元”。 流中的事实是不可变的,这意味着可以将新事实插入到流中,但是现有事实永远不会被更新或删除。 流可以从Kafka主题创建,或者从现有的流和表中派生。

  CREATESTREAM pageviews (viewtime BIGINT, userid VARCHAR, pageid VARCHAR)WITH(kafka_topic=‘pageviews’, value_format=’JSON’);

  2。表:一个表是一个流或另一个表的视图,它代表了一个不断变化的事实的集合。例如,我们可以拥有一个包含最新财务信息的表,例如“Bob的经常帐户余额为$150”。它相当于传统的数据库表,但通过流化等流语义来丰富。表中的事实是可变的,这意味着可以将新的事实插入到表中,现有的事实可以被更新或删除。可以从Kafka主题中创建表,也可以从现有的流和表中派生表。

  CREATETABLEusers (registertime BIGINT, gender VARCHAR, regionid VARCHAR, userid VARCHAR) WITH(kafka_topic=‘users’, value_format=‘DELIMITED’);

  KSQL简化了流应用程序,因为它完全集成了表和流的概念,允许使用表示现在发生的事件的流来连接表示当前状态的表。 Apache Kafka中的一个主题可以表示为KSQL中的STREAM或TABLE,具体取决于主题处理的预期语义。 例如,如果要将主题中的数据作为一系列独立值读取,则可以使用CREATE STREAM。此类流的一个例子是捕获页面视图事件,其中每个页面视图事件都不相关且独立于另一个页面视图事件。另一方面,如果您希望将某个主题中的数据读取为可更新的值的集合,那么您将使用CREATE TABLE。在KSQL中应该读取一个主题的示例,它捕获用户元数据,其中每个事件代表特定用户id的最新元数据,如用户的姓名、地址或首选项。

  KSQL:实时点击流分析和异常检测

  让我们来看一个真正的例子。这个例子展示如何使用KSQL进行实时监视、异常检测和警报。对clickstream数据的实时日志分析可以采取多种形式。在本例中,我们将标记在web服务器上消耗过多带宽的恶意用户会话。监视恶意用户会话是会话化的众多应用之一。但从广义上说,会话是用户行为分析的基础。一旦您将用户和事件关联到一个特定的会话标识符,您就可以构建许多类型的分析,从简单的度量,例如访问计数。我们通过展示如何在Elastic支持的Grafana仪表板上实时显示KSQL查询的输出,来结束这个例子。

  您也可以按照我们的指示,亲自完成例子,并查看代码。

非常好我支持^.^

(0) 0%

不好我反对

(0) 0%

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!