KSQL和Flink SQL的比较
Confluent公司于2017年11月宣布KSQL进化到1.0版本,标志着KSQL已经可以被正式用于生产环境。自那时起,整个Kafka发展的重心都偏向于KSQL——这一点可以从Confluent官方博客中KSQL出现的频率之高看出端倪。鉴于最近周围有很多小伙伴都在讨论KSQL,我突然想起了去年9月份Apache Flink“掌门人” Stephan Ewen所写的关于KSQL V.S. Flink SQL的一篇博客,里面很多有意思的观点非常值得品味~~
事情起源于去年8月底Confluent公司的产品经理Michael G. Noll在Twitter上发布了一条消息:
大概的意思是KSQL和Flink SQL一个关键的区别在于:KSQL是纯SQL语言的扩展,你不需要使用Java或Scala写程序的方式来实现,而反观上图右边的Flink SQL,用户必须手动编写一些代码与之结合使用。这样来看,使用KSQL要比Flink SQL简单得多。
发完这条Twitter之后,Flink掌门人Stephan Ewen立刻做出了回应:

“如果这就是你说的KSQL相对于Flink SQL的最大优势,那么看看我下面的这20行代码,它已经‘修复’了你说的这个问题。。。。”
两人的”针锋相对“实在有些意思,特别是Stephan Ewen于第二天在Flink官方博客上发布了一篇博文,里面详细对比了KSQL与Flink SQL的区别,更人觉得有下面让我们来看一看。(值得一提的是,Ewen对比的KSQL还是1.0之前的Demo版本,里面的很多内容在今天看来也许已经过时了。。。)
首先,Ewen正面承认了Flink SQL确实是Java/Scala + SQL的嵌入式混搭方式,而KSQL则是SQL-like Only,即纯SQL的方式。这种区别会有这么大的关注令Ewen始料未及,并且他给出了两种实现方式各自的应用场景。Ewen认为:纯SQL最适合于ad hoc查询以及数据分析之用,而嵌入式的SQL语句方式则主要用于数据管道。Flink社区之所以选择第二种方式主要是因为它主要满足了早期Flink SQL用户的场景。另外这种方式还无缝支持类型检查以及与Flink 其他API的天然适配。当然,纯SQL的方式也是非常有用的,Flink已有也必然会支持。事实上, Ewen已经实现了一个简单的wrapper实现了在Flink中使用纯SQL。
第二,从线上部署情况来看,Ewen坦言Flink SQL已经成功应用于很多大公司,如Uber、阿里巴巴以及华为,但KSQL依然还在Demo阶段(至少在去年9月份)。用户如果要立刻在线上环境部署并使用streaming SQL,那么显然Flink SQL是更好的选择。
第三,Flink SQL底层是统一化的批处理和流处理机制——事实上Flink将批处理仅仅当做是流处理的一种特殊情况来实现,故我们可以安全地认为Flink SQL同时支持批处理和流式处理,而KSQL目前还不支持批处理,因此对于那些想在静态数据集合或静态数据文件上执行SQL查询的用户可以使用Flink SQL。
第四,Flink SQL使用的标准的SQL语言,而KSQL集成了一组它特有的命令,并非扩展自标准SQL语言。如果SQL的通用度对用户来说很重要的话,那么应该使用Flink SQL。
第五,Flink SQL本身支持UDF、常用的聚合函数以及join,但目前KSQL尚未提供诸如UDF等功能。
第六,虽然也成立了Data Artisans公司用于企业级的Flink部署,但Flink SQL本质上依然还是由Apache Flink社区来开发,特别是有像Uber、阿里巴巴以及华为这样的大公司参与。反观KSQL,它已经不再由Apache Kafka社区维护,而是由Confluent公司完全独立管理,故开发的活跃度上可能无法与Flink SQL相比。
可以想见,Ewen在这篇文章中力推Flink SQL。我十分期待KSQL 1.0发布之后Confluent如何回应:)
KSQL和Flink SQL的比较的更多相关文章
- Flink SQL与 SQL Parser ,calcite
http://vinoyang.com/2017/06/12/flink-table-sql-source/ Flink Table&Sql 如何结合Apache Calcite http:/ ...
- 使用flink Table &Sql api来构建批量和流式应用(3)Flink Sql 使用
从flink的官方文档,我们知道flink的编程模型分为四层,sql层是最高层的api,Table api是中间层,DataStream/DataSet Api 是核心,stateful Stream ...
- Apache Flink SQL
本篇核心目标是让大家概要了解一个完整的 Apache Flink SQL Job 的组成部分,以及 Apache Flink SQL 所提供的核心算子的语义,最后会应用 TumbleWindow 编写 ...
- OPPO数据中台之基石:基于Flink SQL构建实数据仓库
小结: 1. OPPO数据中台之基石:基于Flink SQL构建实数据仓库 https://mp.weixin.qq.com/s/JsoMgIW6bKEFDGvq_KI6hg 作者 | 张俊编辑 | ...
- Flink SQL项目实录
一.Flink SQL层级 为Flink最高层的API,易于使用,所以应用更加广泛,eg. ETL.统计分析.实时报表.实时风控等. Flink SQL所处的层级: 二.Flink聚合: 1.Wind ...
- Flink SQL 如何实现数据流的 Join?
无论在 OLAP 还是 OLTP 领域,Join 都是业务常会涉及到且优化规则比较复杂的 SQL 语句.对于离线计算而言,经过数据库领域多年的积累,Join 语义以及实现已经十分成熟,然而对于近年来刚 ...
- Flink SQL 系列 | 5 个 TableEnvironment 我该用哪个?
本文为 Flink SQL 系列文章的第二篇,前面对 Flink 1.9 Table 新架构及 Planner 的使用进行了详细说明,本文详细讲解 5 个 TableEnvironment 及其适用场 ...
- 从零构建Flink SQL计算平台 - 1平台搭建
一.理想与现实 Apache Flink 是一个分布式流批一体化的开源平台.Flink 的核心是一个提供数据分发.通信以及自动容错的流计算引擎.Flink 在流计算之上构建批处理,并且原生的支持迭代计 ...
- Demo:基于 Flink SQL 构建流式应用
Flink 1.10.0 于近期刚发布,释放了许多令人激动的新特性.尤其是 Flink SQL 模块,发展速度非常快,因此本文特意从实践的角度出发,带领大家一起探索使用 Flink SQL 如何快速构 ...
随机推荐
- 使用 IntraWeb (32) - Url 映射与 THandlers
最简单的 Url 映射是使用 TIWAppForm 的 class 方法: SetURL; THandlers 是 IntraWeb XIV 新增的内容处理器, 它能完成的不仅仅是 Url 映射(转发 ...
- [Java] 简化正则表达式的使用
使用 RegexString.with(string).pattern(pattern).start() + 后续操作(matches,find或者是replace) 源码 package com; ...
- Alpha通道
Alpha通道是计算机图形学中的术语,指的是特别的通道,意思是“非彩色”通道,主要是用来保存选区和编辑选区.真正让图片变透明的不是Alpha 实际是Alpha所代表的数值和其他数值做了一次运算 为 ...
- Windows上的git、github部署及基本使用方法
1.介绍 Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本 ...
- 细说firewalld和iptables
在RHEL7里有几种防火墙共存:firewalld.iptables.ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等. fir ...
- Android添加全屏启动画面
有的Android软件需要在启动的时候显示一个启动画面,可以是一张图或者一些设置什么呢,还有一个好处就是,可以趁机在后台加载数据.创建启动画面一般有两种方式:1.建立一个activity,展示启动画面 ...
- puppet应用案例
- 使用JavaCV播放视频、摄像头、人脸识别
一.导入Maven依赖包 <dependencies> <!-- https://mvnrepository.com/artifact/org.bytedeco/javacv-pla ...
- .net跨平台分析软件
https://marketplace.visualstudio.com/items?itemName=ConnieYau.NETPortabilityAnalyzer
- plsql 操纵表数据的2种方式
1.情景展示 在plsql中,对表的操作(增.删.改.查),其实有2种方式,只是很多人都只会第一种方式罢了. 2.方式介绍 第1种方式:直接将值与sql写到一起 直接按F8运行即可. 第2种方式: ...