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 如何快速构 ...
随机推荐
- p4 环境变量的优先级
Perforce settings such as port, user, and workspace names using the following methods, listed in ord ...
- Android开发中遇到的问题(三)——eclipse创建android项目无法正常预览布局文件
一.问题描述 今天使用SDK Manager将Android SDK的版本更新到了Android 5.1的版本,eclipse创建android项目时,预览activity_main.xml文件时提示 ...
- Windows IIS注册asp 此操作系统版本不支持此选项 错误解决方法
更新Win10,原来的IIS站点访问不了,原因是因为IIS 没有.net 4.5,使用网上的aspnet_regiis.exe -i命令,一点都不靠谱,直接提示: C:\WINDOWS\system3 ...
- C++开源项目等收集
VLC 是一款自由.开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD.音频 CD.VCD 及各类流媒体协议. Downloading vlc-2.2.4.tar.xz Thanks ...
- python module install
1.issue: How can I bypass kivy module error: ImportError: DLL load failed: The specified module coul ...
- PHP测试Mysql数据库连接
<?php $link = mysqli_connect('localhost', 'username', 'password'); if (!$link) { die('Could not c ...
- wkhtmlpdf安装以及中文乱码
见此页http://www.cnblogs.com/day959/p/6652726.html
- CSS3 选择器 基本选择器介绍
CSS是一种用于屏幕上渲染html,xml等一种语言,CSS主要是在相应的元素中应用样式,来渲染相对应用的元素,那么这样我们选择相应的元素就很重要了,如何选择对应的元素,此时就需要我们所说的选择器.选 ...
- iOS中如何创建一个滑出式导航面板(1)
本文将介绍如何创建类似Facebook和Path iOS程序中的滑出式导航面板. 向右滑动 滑出式设计模式可以让开发者在程序中添加常用的导航功能,又不会浪费屏幕上宝贵的空间.用户可以在任意时间滑出导航 ...
- linux每日命令(35):grep命令
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...