您当前的位置:首页 > 互联网百科 > 大数据

流处理引擎:ksql

时间:2020-08-07 11:04:20  来源:  作者:

在阅读该文之前,我已经假设你已经对kafka的broker、topic、partition、consumer等概念已经有了一定的了解。

流处理

流数据是一组顺序、大量、快速、连续到达的数据序列,一般情况下,数据流可被视为一个随时间延续而无限增长的动态数据集合。

Confluent KSQL

Confluent KSQL是一个基于kafka的实时数据流处理工具引擎,提供了强大且易用的sql交互方式来对kafka数据流进行处理,而无需编写代码。ksql具备高扩展、高弹性、容错式等优良特性,并且它提供了大范围的流式处理操作,比如数据过滤、转化、聚合、连接join、窗口化和 Sessionization (即捕获单一会话期间的所有的流事件)等。

概念

架构

流处理引擎:ksql

 

  • KSQL engine: 处理ksql声明和查询
  • REST interfaceL:客户端和engine的连接器
  • KSQL CLI:命令行交互终端,通过rest api和引擎进行交互
  • KSQL UI:ksql的控制中心

stream和table

流(stream)表示的从开始至今的完整的历史,它代表了过去产生的数据(事件、日志等)及其相应的时间。新的数据只能被不断地添加到流中,无法被删除和修改,它们是既定的事实。从某种角度而言,流是对事实的建模。

表(table)表示的是基于数据流进行了某种操作之后的数据,它是对历史数据的某种状态的快照。表的这个概念,是源自于已经发展了数十年的RDBMS,因此,基本可以用相同的理解去使用table。

其实,RDBMS中也有数据流,如binlog本身就是一种流式数据。KSQL将stream作为基础对象,而RDBMS的基础对象是table。KSQL和RDBMS都有将stream和table互相转化的功能,只是二者的侧重点不同而已。

query的生命周期

  • 使用DDL注册一个stream或者table,如:create stream stream_name with topic_name ...
  • 使用一个ksql声明来表示你的应用:create table as select from stream_name ...
  • ksql将你的DDL/DML解析为AST
  • ksql基于ASL生成一个逻辑计划
  • ksql基于逻辑计划生成一个物理执行计划
  • ksql生成和执行kafka流应用
  • 你可以通过对stream和table进行操作来管理你的应用

基本流程和一般DBMS相同。

使用

最简单的体验方式: 使用Docker。这种方式默认下将zookeeper、kafka、ksql在一个compose(一共9个service)下启动。最低配置8G内存,尝试请谨慎。

git clone https://github.com/confluentinc/cp-docker-images
cd cp-docker-images
git checkout 5.2.1-post
cd examples/cp-all-in-one/
docker-compose up -d --build
# 新建topic: user
docker-compose exec broker kafka-topics --create --zookeeper 
zookeeper:2181 --replication-factor 1 --partitions 1 --topic users
# 新建topic: pageview
docker-compose exec broker kafka-topics --create --zookeeper 
zookeeper:2181 --replication-factor 1 --partitions 1 --topic pageviews

样例里面会自动生成两个topic:pageview和user,表示用户对某个页面的访问日志。

现在我们kafka和ksql都已经有了,还创建了两个topic。现在我们使用一个脚本来往这两个topic写入一些数据(这个脚本写入的数据为avro)

wget https://github.com/confluentinc/kafka-connect-datagen/raw/master/config/connector_pageviews_cos.config
curl -X POST -H "Content-Type: Application/json" --data @connector_pageviews_cos.config http://localhost:8083/connectors
wget https://github.com/confluentinc/kafka-connect-datagen/raw/master/config/connector_users_cos.config
curl -X POST -H "Content-Type: application/json" --data @connector_users_cos.config http://localhost:8083/connectors

启动KSQL终端

docker-compose exec ksql-cli ksql http://ksql-server:8088

DDL

  • CREATE STREAM:基于某个topic新建一个流
  • CREATE TABLE:基于一个stream新建一个table
  • DROP STREAM/TABLE:删除stream或者table
  • CREATE STREAM AS SELECT (CSAS)
  • CREATE TABLE AS SELECT (CTAS)
  • 新建stream pageviews/users。(SHOW STREAMS;可以用来查看当前有什么stream)
CREATE STREAM pageviews (viewtime BIGINT, userid VARCHAR, pageid VARCHAR) 
WITH (KAFKA_TOPIC='pageviews', VALUE_FORMAT='AVRO');

CREATE TABLE users (registertime BIGINT, gender VARCHAR, regionid VARCHAR,  
userid VARCHAR) 
WITH (KAFKA_TOPIC='users', VALUE_FORMAT='AVRO', KEY = 'userid');

SHOW STREAMS;
  • 从stream中查询数据
# 设置query语句读取最开始的数据
SET 'auto.offset.reset'='earliest';
SELECT pageid FROM pageviews LIMIT 3;

你会发现这条query会从pageviews流中获取每条记录的pageid。你也可以加上一些where条件尝试一下。

  • 从其他stream生成一个新的stream
CREATE STREAM pageviews_female AS SELECT users.userid AS userid, pageid, 
regionid, gender FROM pageviews LEFT JOIN users ON pageviews.userid = users.userid 
WHERE gender = 'FEMALE';

这条DDL会对pageviews和users中的数据进行左连接操作,并把连接结果作为新stream pageviews_femails的数据。这个stream的数据会写到一个新的kafka topic:PAGEVIEWS_FEMALE。

即:我们可以完全基于一个现有的topic新建一个stream;也可以基于现有的stream新建一个stream,这建立方法所得到的数据会存储在一个和stream名相同的topic中。

  • 我们也可以基于一个现有的topic的部分数据建立一个stream,并指定新stream的topic名。以下这个stream的数据会存储在topic pageviews_enriched_r8_r9中。
CREATE STREAM pageviews_female_like_89 WITH (kafka_topic='pageviews_enriched_r8_r9', 
value_format='AVRO') AS SELECT * FROM pageviews_female WHERE regionid LIKE '%_8' OR regionid LIKE '%_9';
  • stream的建立语句可以使用聚合函数和窗口函数
CREATE TABLE pageviews_regions AS SELECT gender, regionid , 
COUNT(*) AS numusers FROM pageviews_female WINDOW TUMBLING (size 30 second) 
GROUP BY gender, regionid HAVING COUNT(*) > 1;
  • 查看stream的定义
# 类似于MySQL的desc
DESCRIBE EXTENDED pageviews_female_like_89;

和外部系统的连接

ksql可以使用 ksql connectors 和外部系统如:mysql、s3、hdfs等进行通信、操作。

优缺点

  • 优点KSQL 流数据查询在实现上是分布式的、容错的、弹性的、可扩展的和实时的,这些特性可以满足现代企业对数据的需求。KSQL的数据过滤、转化、聚合、连接join、窗口化和Sessionization等功能基本能够覆盖大部分应用场景;近似标准SQL的客户端实现降低了学习成本。对于 JAVA 或 Scala 开发人员而言,Kakfa Streams API 是一个强大的软件库,它实现了将流数据处理集成到应用中。利用ksql可以轻松实现实时报告、服务监控、活动告警、基于会话的用户数据分析、实时ETL等。
  • 缺点KSQL算是一种重量级的流数据处理工具,对于资源要求较高。


Tags:流处理引擎 ksql   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在阅读该文之前,我已经假设你已经对kafka的broker、topic、partition、consumer等概念已经有了一定的了解。流处理流数据是一组顺序、大量、快速、连续到达的数据序列,一般情...【详细内容】
2020-08-07  Tags: 流处理引擎 ksql  点击:(100)  评论:(0)  加入收藏
▌简易百科推荐
张欣安科瑞电气股份有限公司 上海嘉定 201801 摘要:随着电力行业各系统接入,海量数据涌现,如何利用电网信息化中大量数据,对客户需求进行判断分析,服务于营销链条,提升企业市场竞...【详细内容】
2021-12-14  安科瑞张欣    Tags:大数据   点击:(9)  评论:(0)  加入收藏
1、什么是数据分析结合分析工具,运用数据分析思维,分析庞杂数据信息,为业务赋能。 2、数据分析师工作的核心流程:(1)界定问题:明确具体问题是什么;●what 发生了什么(是什么)●why 为...【详细内容】
2021-12-01  逆风北极光    Tags:大数据   点击:(25)  评论:(0)  加入收藏
在实际工作中,我们经常需要整理各个业务部门发来的数据。不仅分散,而且数据量大、格式多。单是从不同地方汇总整理这些原始数据就花了大量的时间,更不用说还要把有效的数据收集...【详细内容】
2021-11-30  百数    Tags:数据   点击:(21)  评论:(0)  加入收藏
数据作为新的生产要素,其蕴含的价值日益凸显,而安全问题却愈发突出。密码技术,是实现数据安全最经济、最有效、最可靠的手段,对数据进行加密,并结合有效的密钥保护手段,可在开放环...【详细内容】
2021-11-26  炼石网络    Tags:数据存储   点击:(17)  评论:(0)  加入收藏
导读:网易大数据平台的底层数据查询引擎,选用了Impala作为OLAP查询引擎,不但支撑了网易大数据的交互式查询与自助分析,还为外部客户提供了商业化的产品与服务。今天将为大家分享...【详细内容】
2021-11-26  DataFunTalk    Tags:大数据   点击:(15)  评论:(0)  加入收藏
导读:数据挖掘是一种发现知识的手段。数据挖掘要求数据分析师通过合理的方法,从数据中获取与挖掘项目相关的知识。作者:赵仁乾 田建中 叶本华 常国珍来源:华章科技数据挖掘是一...【详细内容】
2021-11-23  华章科技  今日头条  Tags:数据挖掘   点击:(20)  评论:(0)  加入收藏
今天再给大家分享一个不错的可视化大屏分析平台模板DataColour。 data-colour 可视化分析平台采用前后端分离模式,后端架构设计采用微服务架构模式。 前端技术:Angularjs、Jq...【详细内容】
2021-11-04  web前端进阶    Tags:DashboardClient   点击:(39)  评论:(0)  加入收藏
在Kubernetes已经成了事实上的容器编排标准之下,微服务的部署变得非常容易。但随着微服务规模的扩大,服务治理带来的挑战也会越来越大。在这样的背景下出现了服务可观测性(obs...【详细内容】
2021-11-02  大数据推荐杂谈    Tags:Prometheus   点击:(40)  评论:(0)  加入收藏
同一产品对老客户的要价竟然比新客户要高?这是当下“大数据杀熟”的直接结果。近年来,随着平台经济的蓬勃发展,大数据在为用户服务之外,也引发了多种不合理现象。为了有效遏制“...【详细内容】
2021-10-29    海外网   Tags:大数据   点击:(31)  评论:(0)  加入收藏
本人03年开始从事贸易行业,多年来一直致力于外贸获客和跨境电商选品等领域,最近有些小伙伴反馈海关数据演示的都挺好为啥用起来不是那么回事?大家看到数据时关注的有产品、采购...【详细内容】
2021-10-28  QD云龙    Tags:数据   点击:(33)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条