重磅!flink-table-store 将作为独立数据湖项目重新加入 Apache
数据湖是大数据近年来的网红项目,大家熟知的开源数据湖三剑客 Apache hudi、Apache iceberg 、Databricks delta 近年来野蛮生长,目前各自背后也都有商业公司支持,投入了大量的人力物力去做研发和宣传。然而今天我们要讲的是数据湖界的后起之秀 —— flink-table-store。
熟悉 Flink 项目的同学对这个项目应该并不陌生,它在去年作为 Flink 的子项目加入了 Apache 社区,由 Flink 团队主导研发,截止到目前 star 数 423,fork 数 171,总体来说并不算大火,也许是因为开源的时间并不长,也许是因为数据湖市场早已被三剑客占据了大半,也许是宣传的力度不够,也许是 Flink 子项目限制了它作为数据湖产品的发展。然而可能也正是这些种种的原因促成了这次 flink-table-store 作为独立项目重新加入 Apache,不再依附 Flink,这无论是对于 flink-table-store 的未来发展,还是对于数据湖领域来说都是一件好事。
从 Apache 的提案可以看出,flink-table-store 作为独立项目后的项目名是 Paimon,玩过原神的同学应该对这个名字不陌生,它是游戏中的 NPC,作为向导在整个冒险过程中陪伴着旅行者,至于 Paimon 具体的寓意可能得等官宣解释了。
说回正题,Paimon 的定位是分布式文件系统(HDFS、S3 等)上的数据文件支持的湖存储,用于使用大数据计算引擎(即 Flink、Spark、Hive、Trino 等)为流式处理和批处理构建动态表,支持高速数据摄取和实时数据查询。与其他数据湖存储项目不同,Paimon 旨在同时支持高吞吐量和低端到端延迟(更好的数据新鲜度),尤其适用于密集型 UPDATE 和 DELETE 工作负载。
Paimon 独立加入Apache 后的一些规划:
- 扩展Paimon的生态,提供独立的Java API,支持 Spark、Hive、Trino、Presto、Doris等更多大数据引擎的读写。
- 补充关键能力,特别是流式读取和密集更新/删除,以创建统一且易于使用的流式数据仓库(lakehouse)。
- 成长为一个更有活力和中立的开源社区。(关键词“中立”,这也是促成Paimon独立的主要原因)
Paimon 解决的痛点
随着流处理在生产中的应用(Flink、Spark-Streaming等技术),对存储同时支持更新、删除和流式读取的需求越来越大,为了支持这样的要求我们有如下一些方案:
- 一种选择是使用 OLAP 系统,如 ClickHouse 和 Aapache Doris,它们能够提供高速数据摄取。但是不支持流式读取,存储成本比较高。
- 另一种选择是使用现有的湖存储,例如 Apache Hudi 和 Apache Iceberg。然而,从实时处理系统高速摄取最新(更新)数据提出了巨大的挑战,并且会使两个系统不堪重负。
创建 Paimon 就是为了解决现有解决方案的局限 - 支持大数据集存储,支持批流式读写。
- 支持流消费的增量快照。
- 支持最低延迟至毫秒的流式查询。
- 支持批处理/OLAP 查询,延迟最小到秒级。
Paimon 基本原理说明
Paimon原生采用LSM(Log-Structured Merge-tree)作为其底层数据结构,除了常见的湖存储能力外,还为带主键的数据提供了增强的性能。更重要的是,Paimon 支持批流操作(读和写),方便应用程序追求批流统一语义。具体来说:
- Paimon 利用 LSM 数据结构的附加写入功能,在密集的更新/删除工作负载上提供出色的性能。
- Paimon 利用 LSM 的有序特性支持有效的过滤器下推,可以将主键过滤查询的延迟降低到毫秒级。
- Paimon 支持各种(基于行或行列)文件格式,包括 Apache Avro、Apache ORC 和 Apache Parquet(行在写出之前将按主键排序)。
- Paimon提供的表可以被各种引擎查询,包括Apache Flink、Apache Spark、Apache Hive、Trino等。
- Paimon 的元数据是自我管理的,存储在分布式文件系统上,可以同步到 Hive metastore (HMS)。
- 除了常见的批量读写支持外,Paimon 还支持流式读取和更改数据馈送。
目前该提案正在邮件讨论的阶段,孵化器导师对该项目独立加入 ASF 都持赞同态度,相信不久就会官宣这一消息。

另外有导师提出,鉴于大多数参与人员都熟悉 ASF 以及项目应该如何运作,是否可以不进过孵化器而直接作为单独的顶级项目(TLP)。比如 Apache Camel 是 Apache ActiveMQ 的一个子项目, 它没有经过孵化器过程就成为了 TLP,因为大多数开发人员知道如何运行 ASF 项目。该方案目前还在讨论当中。

随着 Paimon 的独立,数据湖市场的争夺将进入白热化阶段,其实百花齐发对于用户来说是利好的,良性竞争可以促进项目的快速迭代,但是在做选择上还是得头痛一会儿了,关于数据湖“四剑客”技术细节的文章后续会在这个公众号上陆续更新,欢迎持续关注。不知道这次 Paimon 可以在数据湖领域掀起多大的浪,让我们拭目以待!
重磅!flink-table-store 将作为独立数据湖项目重新加入 Apache的更多相关文章
- 使用 Iceberg on Kubernetes 打造新一代云原生数据湖
背景 大数据发展至今,按照 Google 2003年发布的<The Google File System>第一篇论文算起,已走过17个年头.可惜的是 Google 当时并没有开源其技术,& ...
- Apache Hudi:云数据湖解决方案
1. 引入 开源Apache Hudi项目为Uber等大型组织提供流处理能力,每天可处理数据湖上的数十亿条记录. 随着世界各地的组织采用该技术,Apache开源数据湖项目已经日渐成熟. Apache ...
- 【翻译】Flink Table Api & SQL — 配置
本文翻译自官网:Configuration https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/config.h ...
- 【翻译】Flink Table Api & SQL — SQL客户端Beta 版
本文翻译自官网:SQL Client Beta https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/sqlCl ...
- 【翻译】Flink Table Api & SQL —— 概念与通用API
本文翻译自官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/common.html Flink Tabl ...
- 【翻译】Flink Table Api & SQL —— 数据类型
本文翻译自官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/types.html Flink Table ...
- 【翻译】Flink Table Api & SQL —— 连接到外部系统
本文翻译自官网:Connect to External Systems https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev ...
- 使用Apache Flink 和 Apache Hudi 创建低延迟数据湖管道
近年来出现了从单体架构向微服务架构的转变.微服务架构使应用程序更容易扩展和更快地开发,支持创新并加快新功能上线时间.但是这种方法会导致数据存在于不同的孤岛中,这使得执行分析变得困难.为了获得更深入和更 ...
- [转载] Can't create table './store/#sql-b2c_1a.frm' (errno: 150)和sql execution error #1452添加外键时错误解决方法
Can't create table './store/#sql-b2c_1a.frm' (errno: 150)解决方法 错误原因有四: 1.外键的引用类型不一样,主键是int外键是char 2.找 ...
- Flink 报错 "Could not find a suitable table factory for 'org.apache.flink.table.factories.StreamTableSourceFactory' in the classpath"
先上代码: table = tablexx.select('*).tablexx.groupBy('x).select('x, xx.count ) tableEnvironment // decla ...
随机推荐
- win10中jupyter notebook设置conda虚拟环境全流程及问题汇总
正常安装流程 1.安装anaconda 必备条件 2.安装jupyter notebook 一般anaconda自带安装 如没有,则在终端安装 conda install jupyter notebo ...
- RocketMQ Schema——让消息成为流动的结构化数据
本文作者:许奕斌,阿里云智能高级研发工程师. Why we need schema RocketMQ 目前对于消息体没有任何数据格式的约束,可以是 JSON ,可以是对象 toString ,也可以只 ...
- 使用命令行运行用例时提示python.exe: Error while finding module specification for 'testcase_1.Test'.....
文件路径 输入命令 D:\demo>python -m unittest unittest_1/testcase_1.Test结果提示 ModuleNotFoundError: No modul ...
- uniapp微信小程序 原生底部导航栏
在pages.json文件中写 "tabBar": { "color": "#333333", "selectedColor&q ...
- CVE-2020-1938与CVE-2020-13935漏洞复现
前言 最近在腾讯云上买了个服务器,准备用来学习.在安装了7.0.76的tomcat后,腾讯云提醒我存在两个漏洞,分别是CVE-2020-1938和CVE-2020-13935,在修复完漏洞后,准备复现 ...
- [OpenCV实战]13 OpenCV中使用Mask R-CNN进行对象检测和实例分割
目录 1 背景介绍 1.1 什么是图像分割和实例分割 1.2 Mask-RCNN原理 2 Mask-RCNN在OpenCV中的使用 2.1 模型下载 2.2 模型初始化 2.3 模型加载 2.4 输出 ...
- Java求值策略
为什么说Java不存在引用传递? 在Java语言中,存在两种数据类型,一种是基本类型,如int.byte等8种基本类型,一种是引用类型,如String.Integer等.这两种数据类型区别就在于,基本 ...
- 旧酒换新瓶,新版M1/M2芯片Macos(Ventura)安装古早版本Python2.7(Python2.x)
向下兼容特性是软件开发系统的一个重要指标,它是指一个新的系统或者软件能够与旧的系统或软件兼容并正常运行.这意味着旧系统或软件可以在新系统或软件中使用,而不会出现问题.向下兼容对于提高软件或系统的可用性 ...
- java进阶篇——Stream流编程
Stream流 函数式接口 1.消费型接口--Consumer @FunctionalInterface public interface Consumer<T> { /** * 对给定的 ...
- 《深度探索C++对象模型》第六章 执行期语意学
new运算符和delete运算符 运算符new看似是一个简单的运算,比如: int *pi=new int(5); 但是它实际由两个步骤完成: 1.通过适当的new运算符函数实体,配置所需的内存: / ...