Apache Paimon 流式数据湖 V 0.4 与后续展望

摘要:本文整理自阿里云开源大数据表存储团队负责人、阿里巴巴高级技术专家,Apache Flink PMC,Paimon PPMC 李劲松(之信)在 Apache Paimon Meetup 的分享。本篇内容主要分为四个部分:

  1. 湖存储上的难点
  2. 深入 Apache Paimon 0.4
  3. 社会应用实践
  4. 后续规划

点击查看原文视频 & 演讲PPT

今年 6 月份 Paimon 0.4 刚刚发布,它是一个非常具有竞争力的版本,也是进入 Apache 孵化器之后的第一个版本。

一、湖存储上的难点

数据湖的新场景主要有以下三个:

  • 第一个场景,实时数据入湖。数据可以实时更新来自数据库的 CDC 数据,实时入湖到数据湖中,让数据能被多种引擎尽快分析。
  • 第二个场景,实时字段打宽。实时打宽维表的字段,提供给下游查询及流读。
  • 第三个场景,实时数据流读。提供消息队列体验的流读,并能根据主键生成 Changelog。

2

入湖的痛点有以下三点:

  • 资源消耗与实时性:更新吞吐差,资源消耗巨大;COW 更新差,MOR 查询差,难以选择反压、反压、还是反压。

  • 数据湖需管理的事情多:管理 Compaction;清理历史小文件;清理过期分区。

  • Schema Evolution:上游加列,湖存储怎么办?重启同步作业?一堆小表耗资源且耗精力。

3

打宽表的痛点有以下三点:

  • 资源消耗与实时性:吞吐和资源同样重要。

  • 输入多样性:CDC 输入;输入可能是乱序的。

  • 读取:希望可以足够高效,有 Project pushdown,且可以流读。

4

流读的痛点有以下四点:

  • 全增量一体流读:先读全量再接增量,完整的流,而不是只读增量。

  • Changelog 生成:有些场景要低成本;有些场景要低时延。

  • FileNotFound:数据湖文件清理和流读的矛盾。

  • Lookup Join:支持 Flink 的 Lookup Join。

5

Apache Paimon 是一个专门为 CDC 处理、流计算而生的数据湖。希望带来你舒服、自动的湖上流处理体验。

从官网上也可以看到,Apache Paimon 支持高速的数据写入,Changelog 的生成以及高效的实时查询。

二、深入 Apache Paimon 0.4

6

Paimon 的整体架构是一个数据湖 build 在 Data Lake (HDFS/OSS/S3),它的所有 Meta 和数据都存储在这些数据湖上,它是一个数据湖格式。这个数据湖的 Meta 也可以同步到 Hive Metastore 和阿里云的 Data Lake Formation 上,做一个统一的、数据的、表格式的管理。然后数据湖通过把 Changelog 同步到入湖中,再同步 Kafka。

现在 Paimon 0.4 提供了 Flink CDC 的 Schema Evolution 同步,也提供了 MySQL 的整库同步,后续 Paimon 0.5 会支持 Kafka 的 CDC 数据同步。此外,我们还可以通过 Flink 将 Append 的 log data 通过批写的方式写入 Paimon 中,也可以通过宽表合并的方式写入 Paimon 中。

在读端,Paimon 可以支持来自各种引擎的批读和 Ad-Hoc 查询,比如 Spark、Trino、StarRocks 等,也可以通过 Flink 来全增量一体的流读它的 Changelog,而且流读是可以提供数据顺序保障的,也可以通过 Flink 来 Lookup Join。

7

Paimon 是数据湖+LSM 的架构,下面和大家分享一下为什么 Paimon 需要 LSM。

LSM 是一个面向写友好的格式,它在写入的时候可以看到整个流程,但它不用理解具体的流程,大致的思路是,写入发生在 Flink Sink 中,当检查点到达时,它会对内存中的数据进行排序,并将记录刷新到 Level0 文件中。

得益于 LSM 这种原生异步的 Minor Compaction,它可以通过异步 Compaction 落到最下层,也可以在上层就发生一些 Minor 的 Compaction 和 Minor 的合并,这样压缩之后它可以保持 LSM 不会有太多的 level。保证了读取 merge read 的性能,且不会带来很大的写放大。

另外,Flink Sink 会自动清理过期的快照和文件,还可以配置分区的清理策略。所以整个 Paimon 提供了吞吐大的 Append 写,消耗低的局部 Compaction,全自动的清理以及有序的合并。所以它的写吞吐很大,merge read 不会太慢。

8

基于 Paimon 的设计,我们一起看一下来自同程旅行的生产实践,对比原有 Hudi 表带来了的收益。

  • 入湖的资源节省了 30%-40%。

  • 写入性能提升了 3 倍。

  • 部分查询的性能提升了 7 倍左右。

9

刚刚分享了 Paimon CDC 数据的入湖在吞吐方面的一些能力,下面介绍一下 Paimon 在 CDC 入湖上,给用户带来的一些比较方便的入湖工具。

比如在 Paimon 0.4 中,我们提供了 Flink CDC 的入湖。原生集成的 Flink CDC 提供 DataStream 作业,通过 Flink CDC 把 Changelog 的数据通过 Schema Evolution 的方式写入 Paimon。

表同步,它可以自动的管理表结构变更,增加列、删除列、变更类型、重命名列等等。也可以通过在表同步的定义,新增计算列、定义分区列、定义主键,以及做分库分表的同步。

此外,Paimon CDC 入湖还提供了整库同步,可以让整个库的表全部同步到 Paimon 中,你不用担心 OOM 或者容易挂掉。一个作业同步过来,可以尽可能减少同步的资源。还支持 INCLUDING、EXCLUDING,还支持表名前后缀,自动跳过失败表,动态新增表。

在 Paimon 0.5 中,我们提供了 Kafka 的同步。不仅可以通过 Flink CDC 同步进来,Kafka 里面的 CDC 数据也可以同步进来。你可以把你的数据库,TIDB、MySQL、Oracle 写到 Kafka 中,然后以 Schema Evolution 的同步,同步到 Paimon 中。

可以看到同步入湖非常简单,使用 Paimon 的 Flink action 就可以启动整个同步的作业。甚至 Paimon 还提供 CDC 的 DataStream 的 API,你可以直接调我们已经集成好的作业来同步数据,也可以通过 CDC 的 DataStream 的 API 编写自己的 Flink 流的 Schema Evolution 的 Pipeline。

10

Paimon 支持定义 Partial-update,你可以定义 Partial-update Engine。这样就可以通过不同的留写入不同的字段,后面可以批读,甚至 Paimon 也提供了流读,只要声明 Changelog Producer 就可以流读合并后的数据,它的查询也支持列裁剪的高效查询。

此外,Partial-update 的输入可能是乱序的,所以在 Partial-update 表,也可以定义 Sequence Field 处理乱序的情况。在 Paimon 0.5 中引入了 Sequence Group 的概念,为了解决每个流不同的乱序。如果它们共用一个版本字段,某个流更新之后有可能会导致另外一个流的最新版本不能更新。

举个例子,上游有两个表要更新,所以要定义两个 Sequence Group,这个 Sequence Group 的字段可以是不同的版本字段。这样不同的流只要更新自己的版本就可以了,不管两边多不对齐,它最终的数据都能被正确的更新上。

11

在 Paimon 中,它的流读是它的核心之一,这也是它区别其他数据湖的一个关键点所在。Paimon 可以流读原始数据,你可以设置 Changelog-producer=input。如果你的数据是一个完整的 CDC,就可以运用这种模式,它是最高效,也是消耗资源最少的。

如果你的流不是一个完整的 CDC,比如 Partial-update 这种输入。所以就要求下游的流读要生成一个变更日志,在 Paimon 这里不仅支持生成变更日志,还有两种非常灵活的模式,Lookup 模式和 Full-Compaction 模式。

Lookup 模式可以在写入的时候就动态 Lookup 高层的文件,查到最新的数据,合并最新的 Changelog 输出到下游。这是最快的,也是我们推荐 1-3 分钟时延的,但它的成本会高一些。

如果一些作业成本要求很低,且能接受更大延时,你可以用 Full-Compaction 模式。它在异步的 Full-Compaction 的时候,才会产生对应的 Changelog,可以把 Full-Compaction 的周期调度时间设置的更大,比如 10 分钟。它的好处是代价更低,但时延更高。

刚刚我们提到湖存储和流读有一个矛盾,它就是 FileNotFound。因为流存储要不断清理 snapshot,这样它的小文件才会少。但流读如果依赖一个很早 snapshot,一旦这个流作业挂了,它读的那个 snapshot 就会被清理,它就完全不能恢复了。

针对于问题,Paimon 提出了 Consumer-ID,它有点类似于 Kafka 的 Group-ID。它可以保证作业挂了重启之后,它读的那个 snapshot 不会被清理。

12

Paimon 0.4 在生态中也有比较大的进步,如上图所示。

最开始在 Paimon 中只是支持 Flink,它作为 Flink Table Store 支持 Flink 完整的生态和用法。

在 Paimon 0.4 中支持的更多了。比如在 Spark 中支持了 Batch Read、Batch Write,还可以在 Spark 中 Create Table、Alter Table;在 Hive 中支持了 Batch Reader、Batch Write、Create Table 等等;在 Trino 中支持了 Create Table、Alter Table 等等功能。

我们有两个引擎是集成比较完善的,一个是 Flink,另外一个是 Spark。我们希望它所有的功能,批读、批写、创建表、修改 Meta 等命令,在 Flink 和 Spark 中都支持的比较好。其次,我们希望其他引擎都能支持读 Paimon,甚至更多的操作,比如 Create Table、Write Table 等等。

除了这些传统的处理引擎,StarRocks、Doris、Seatunnel 也集成了 Paimon,整体的代码基本已经 ready 了,处于即将发布的状态。阿里云上的 MaxCompute、Hologres,网易的 Arctic,也已经在研发的路上了。

三、社会应用实践

13

目前开源社区主要的使用和参与者包括,阿里云、字节跳动、同程旅行、B 站、中原银行、米哈游、汽车之家等等企业。

接下来一起看一下,大家都是怎么用 Paimon 的。

14

在阿里云计算平台,Paimon 是数据湖的一号位,希望阿里云计算平台的所有计算全部集成到 Paimon 中,集成 Paimon、读 Paimon。最好的集成是实时计算 Flink 版平台,它是 Flink 以及开源大数据平台 E-MapReduce 里面,希望替代 Hudi 成为实时入湖的首选。

上图是 Apache Paimon,可以看到我们通过阿里云的 Flink 实时计算能入湖,能 CTAS 入湖,能通过阿里云实时计算 Flink 流读。也希望 Paimon 的数据能被 MaxCompute、Hologres 查询,也能在开源大数据平台 E-MapReduce 中融入的更好。

15

在字节跳动,工程师们使用 Paimon+Flink 作为血缘管理以及一致性查询的 Streaming Warehouse 生产体系。如上图所示,业务数据通过 Streaming ETL,类似于 Streaming materialize view 类似的概念,落到了 Streaming Warehouse 中。这样所有的 Paimon 表都能通过一致性的 Query 查询。

16

在同程旅行,引入 Paimon 主要优化了原有 Hudi 的近实时数仓。

  • 在实时写入 ODS 层场景,Paimon 大概有 114+ 的作业;最大 Upsert 日增量 2000 万+;最大的表总量 90 亿+。

  • 在局部更新场景,Paimon 有 10+的作业;应用了真·局部更新 (Sequence-Group) 的概念。

  • 在流读\增量读场景,Paimon 有 20+ 流式增量读的作业;10+ 批处理小时级增量读的作业。

17

中原银行在探索流式数仓;米哈游也在探索流批一体技术;Bilibili 在攻坚 AI 方向,考虑 Partial-Update 的场景;尘锋信息在探索 TB 级数据入湖,建设了 Flink 流批一体 + Paimon 的流批一体数仓等等。

四、后续规划

18

我们希望能达到这样一个 Streaming LakeHouse。数据通过非常方便的入湖能入到 Paimon 中,也能通过 Paimon 的流读和批读建立 Streaming 的 Pipeline。同时,Paimon 也应该有一个非常好的生态,能被各种引擎查询。这就是 Paimon+Flink 往后走的一个大方向。

19

打造一个易用的、简单的 Streaming LakeHouse,大致有以下三个方向。

第一个方向:

  • 在 CDC 处理中会有更多的 CDC 入湖。比如刚刚提到的 Kafka 的入湖,应该是更简单、更自然、更自动的。

  • 目前 Paimon 还需要定一个 Bucket 个数。太小的 Bucket 性能比较差,数据量大了之后,吞吐就下来了。而太大的 Bucket,小文件又很多。虽然一个 Bucket 里是一个 LSM,它已经有比较好的吞吐,但你还是要调优。所以在 Paimon 0.5 中会提供一个动态的 Bucket,希望达到的状态是全自动的。

  • Create tag,希望 Paimon 实时入湖之后,每天能打出一个 tag 给离线生产用。

第二个方向:Append-Only 处理增强。Paimon 之前的 Append-Only 需要定义 Bucket,这是一个非常难定义的概念。所以后面 Paimon 应该支持真正的离线表,应该是没有 Bucket,且离线表的写入应该也包含小文件合并,并这也符合 Paimon 全自动的概念。

第三个方向:除了 StarRocks 的生态的对接,我们希望将 Spark 打造成第二个像 Paimon 一样集成非常好的引擎,Spark 读和写的能力都应该很好,甚至通过 Spark+Paimon,就能组成一个完整的数据湖。

20

接下来回顾一下 Paimon 的发展历程。2021 年在 Flink 社区讨论;2022 年 5 月发布了 Flink Table Store 的第一个版本;2023 年 1 月发布了 0.3,它是 Paimon 的一个生产可用的版本;3 月进入了孵化器,改名 Apache Paimon。2023 年 6 月,发布了 Paimon 0.4。

未来我们希望 CDC 实时数据湖完全成熟,Append 离线表生产可用,生态全面对接,Spark 进入成熟状态。

Q&A

问:CDC 写 Paimon 表 如果 binlog 流量每秒 3000records+全量初始化如何优化下。 目前测试看checkpoint 经常失败?

答:关键还是看性能瓶颈在哪里,是否有内存问题,最后看下 Jstack。

问:能不能动态修改表结构呢?

答:能啊,Spark 或者 Flink 1.17 都可。

问:0.5 大概什么时候发布?

答:8 月份左右。

问:请问流读的延迟怎么样?

答:最小 checkpoint 延时,也就是 1 分钟。

问:如何方便的从 Hudi 迁移到 Paimon 上?

答:能,现在推出的 SparkGenericCatalog 也是为了 Hudi 和 Paimon 表共存。

问:可以展开讲讲 Changelog 的 Lookup 模式吗?

答:可以看看官网

Primary Key Table | Apache Paimon

问:Bucket 是很重要的参数吗,怎么调优?

答:对,根据数据量实际跑下看看,目前最新也支持了动态 Bucket。

问:存储一段时间后,Bucket 可手动调整么?调整后之前的数据回重分么?

答:详见官网 Rescale Bucket

Rescale Bucket | Apache Paimon

问:实时数据乱序的情况下,Paimon 的 Partial-update 怎样避免旧数据覆盖新数据呢,有没有类似 sequence 列的实现?

答:有,详见官网 sequence-field

Primary Key Table | Apache Paimon

问:压缩时,是不是对读写的性能影响很大?

答:对写有影响,是读写的一个 tradeoff。

请关注 Paimon

流式数据湖的发展需要你的支持:

  • 关注微信公众号:Apache Paimon,了解行业实践与最新动态

  • 进入 Paimon 交流钉钉群:搜索 10880001919,讨论技术并得到实时的支持

  • Github GitHub - apache/incubator-paimon: Apache Paimon(incubating) is a streaming data lake platform that supports high-speed data ingestion, change data tracking and efficient real-time analytics. 点赞支持

点击查看原文视频 & 演讲PPT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1379873.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu18.04版本安装ROS及出现错误的处理方法

前面的文章是在已安装的ROS基础上做的一些应用,这里我们从零开始安装ROS机器人操作系统。 机器人操作系统(Robot Operating System,ROS)是一个开发机器人软件的框架,里面包含了一系列的工具,库和惯例,目的在于简化在大量不同种类机…

并发:通道

编程就是把具体实现抽象,屏蔽底层的一些细节。数据就像一条流水线,从一个并发单元传递到另一个并发单元。那么我们怎么传递数据呢?基于内存共享或者基于网络传输? 数据共享方式 同一进程内有不同的并发单元,例如 goroutine A 和 goroutine B,它们可能在不同的物理核上并…

使用Git进行项目版本控制

1、什么是Git? GIT,全称是分布式版本控制系统,git通常在编程中会用到,并且git支持分布式部署,可以有效、高速的处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地&#xff0c…

Mac钉钉如何添加好友?

钉钉(DingTalk)是阿里巴巴集团专为中国企业打造的免费沟通和协同的多端平台,支持手机和电脑间文件互传,可以让企业进入高效移动办公时代。那么Mac版的钉钉,是如何添加好友的呢?下面小编给大家带来Mac钉钉添…

Android_基于BMOB的聊天软件_添加好友

之前提过为什么要用BMOB,前段时间完成了用户的注册与登录,现在做添加好友功能,主要 参考BMOB官网 提供的资料。 主要流程就是,输入好友关键字,点击搜索,显示服务器上对应的搜索结果,用BMOB的好…

Android_聊天软件_加好友_与服务器交互

番外篇: 1.在做界面时,总遇到输入键盘不能自己收起,导致需要手动收起键盘,使操作多一步,现在说一下我的流程, 检查键盘是否显示,代码如下: private Context mContext;private Vie…

佛祖保佑,永不宕机,永无bug

当我们的程序编译通过,能预防的bug也都预防了,其它的就只能交给天意了。当然请求佛祖的保佑也是必不可少的。 下面是一些常用的保佑图: 佛祖保佑图 ——————————————————————————————————————————…

Android_聊天软件_添加好友_与服务器交互

上一篇文章介绍了用户A向服务器发送添加B的请求,这篇文章介绍服务器通知用户B,以及用户B同意与否的操作。 好久没有更新文章,主要是前段时间花了2天时间帮别人画了点东西,还有就是充电了,主要是Service、Notification…

wxid转扫一扫添加好友

什么是扫一扫?就是在日益严格的环境下,手动加人超过两天直接被判为营销,添加超过10个对方就收不到消息了,而扫一扫协议刚好就能规避,正常扫一扫添加只有在面对面或者推荐扫码才能添加,而这个就是模拟面对面…

原始套接字编程(AF_PACKET+SOCK_RAW)模拟一个PING

1. 背景 最近看一个客户的代码片段,发现他在用原始套接字编程,一般学习套接字都是流式套接字和数据报套接字,本来也不是搞网络的,原始套接字了解得很少,借着这次机会,自己来学习一下原始套接字编程。 2. …

STL初探

STL简介 STL(standard template libaray - 标准模板库)是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 STL的一些版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,…

PHP最简单自定义自己的框架实现像TP链式sql语句(六)

1、实现效果,链式sql语句封装 order、where、group、limit等封装 2、数据表构造函数入参,ModelBase.php public $table NULL; public function __construct($table){$this->table$table;if(!$this->table){die("no table" );}$this-&…

AI一键生成数字人

AI一键生成数字人,不玩虚的 阅读时长:10分钟 本文内容: 结合开源AI,一键生成短视频发布到常见的某音,某手平台,狠狠赚一笔 前置知识: 基本的 python 编程知识Jupyter Notebook 使用过Linux 使用过 先上源码…

Wallpaper Engine使用视频壁纸黑屏解决方法(window10)

1.点击电脑左下角开始键>设置>搜索框搜索图形设置 2.浏览>找到wallpaper engine相关程序添加 3.将三个的选项改成节能 4.如果软件还在运行,重新启动

WebView2 通过 PuppeteerSharp 实现爬取 王者 壁纸 (案例版)

王者壁纸自动化获取逻辑分析 其实它的逻辑很简单, 就是王者的官网,打开后,在右下角就看到了皮肤页面部分。 这个时候,点击更多,就会打开全部英雄详情的页面。 这个时候,单点任意一个英雄,就会…

微信小程序短视频去水印,王者查战力,手持弹幕,获取头像壁纸,工具箱源码

短视频在线去水印,无任何广告 王者荣耀查荣耀战力已更新 新增加查看历史上的今天 新增手持弹幕,修复剪辑视频不能保存问题。 新增壁纸,头像,网址转二维码。 【微信小程序】:好野工具 【小程序版本】:5.1.1 【小…

王者壁纸批量爬取

语言:python json格式网站: 爬取网址:王者荣耀壁纸下载-王者荣耀官方网站-腾讯游戏 思路分析: 分析下一页,发现下一页之后是在当前页面的局部重新加载 当然排除可以直接爬取目标url获取当前页面的信息以及后面的所…

C语言案例 阶乘求和-12

题目:求1 2!3! … 20!的和。 程序分析 阶乘相关原理:一个正整数的阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!,任何大于1的自然数n阶乘表示方法:…

5大电脑软件推荐!每一款都是精心挑选,良心推荐!

说起实用的电脑软件,我想你看对地方了,世上最棒最实用的电脑软件推荐!每一款都十足良心! 是时候表演真正的技术了! 1.PotPlayer 超受欢迎的播放器之一。这款播放器可能会成为你的菜,内存占用低并且不卡&a…

Windows上有哪些推荐的笔记软件?

说实话,windows上的优秀的笔记软件没有ipad上多,在ipad上的notability、goodnotes、marginnote等优秀的笔记软件,在windows上很少有可替代的产品,不过在windows上也有一些比较优质的笔记软件,对于学生来说,…