Apache Paimon毕业,湖仓架构的未来发展趋势!

科技   2024-05-13 00:33   浙江  

大家好,前几天发布了一篇关于《Apache Paimon毕业,湖仓架构的未来发展趋势!》的文章,大致介绍了Apache Paimon正式成为Apache社区顶级项目后的一些趋势判断和分析。

如果你想整体了解Apache Paimon这个框架,可以参考《Apache Paimon核心原理和Flink应用进阶》,这篇文章系统性的介绍了Paimon这个框架的概念、原理以及常见优化手段。这个框架还在持续高速迭代,大家可以保持关注。

5月10日,Apache Paimon 0.8版本发布,我们照例解读一下这个版本的核心功能。

Apache Paimon 0.8.0 版本中的核心改动有:

1. 新增 Deletion Vectors,近实时更新与极速查询
2. 调整 Bucket 默认值为 -1,提升新学者的易用性
3. 新增通用文件索引机制,提升 OLAP 查询性能
4. 优化读写流程的内存及性能,减少 IO 访问次数
5. Changelog 文件单独管理机制以延长其生命周期
6. 新增基于文件系统的权限系统,管理读写权限

读写性能上的提升

读优化一

Paimon 0.8版本中提供了Deletion Vectors('deletion-vectors.enabled'='true')模式可以让主键表读性能大幅提升,达到近实时更新与极速查询的效果。

简单的说,Paimon借鉴了向量化计算中的Select Vectors结构,在写入时产出这样一个类似的Vectors,代表文件里面哪些数据被删掉了。这样在读取时直接过滤掉不需要的行,就相当于完成了文件合并,也不会影响读的性能。

大家熟悉Hudi的应该不陌生,我们在读取Hudi表中的数据时候也有参数控制,可以通过减少数据文件的合并加速查询。所以你看,优秀的框架的想法都是类似的。

读优化二

Paimon0.8版本新增了通用文件索引机制,在这个机制下Paimon会单独维护索引文件。当然这个功能目前还没有很完美,后续会持续优化。

我们在这里重点说一下Paimon在OLAP查询性能上,未来在部分场景平替类似Doris/Clickhouse等。在很多场景下我们需要把数据灌入Doris/Clickhouse进行看板/报表等查询,其实在小部分场景,大家对查询速度要求并不高,假设湖表的查询性能能提升到一定程度,那么在这种场景下,我们就可以省去Kafka2OLAP这条链路。

其他读写优化

这部分转载自Paimon和Flink官方社区:

Write 性能优化

  • 优化了写入时的序列化性能,对于整体写有着 10-20% 的性能提升
  • 大幅提升了 Append table 多分区写入 (超过5个分区) 的性能问题
  • 加大了 'num-sorted-run.stop-trigger' 的默认值,它会减缓反压
  • 优化了动态 bucket 写入的启动性能

Commit 性能优化

  • 大幅降低 Commit 节点的内存占用
  • 去除了 Commit 里面无用的检查,write-only 的提交会快很多
  • Partition Expire 的性能得到大幅提升

查询性能优化

  • 大幅降低生成 Plan 时的内存占用
  • 降低了 plan 以及 read 阶段对文件系统 namenode 的访问,这也有利于对象存储的 OLAP 性能
  • codegen 支持了 cache,这将有效提升短查询的性能
  • 通过序列化 Table 对象,Hive 查询大幅降低了访问文件系统 namenode 的频率
  • 大幅提升了 first_row merge-engine 的查询性能

Record级别 TTL 配置

record级别的TTL配置在很多湖表中支持的并不好,大多数都是基于分区进行删除的。这就导致一个问题,我们在生产环境必须使用分区表。

但是,事实上并不是所有场景都需要分区,我们期望湖表能够拥有类似Hbase一样的单条数据的TTL配置。

现在我们就可以通过简单的配置record-level.expire-time来进行TTL管理了。

和Flink/Spark的集成优化

我们重点看下面这两点即可:

Lookup Join优化

1. Flink Lookup Join 在此版本中使用 Hash Lookup 来获取数据,这可以避免 RocksDB 的数据插入带来的开销;
2. Flink Lookup Join引入了max_pt模式,关联最新的分区数据

目前的维度表关联功能整体上看,还没有完全看齐其他存储类型的维度表的能力。

Spark 查询优化

大家直接看官方给的:

Spark 使用 COW 技术支持了 Append 表的 DELETE 与 UPDATE,Spark DELETE 也支持了所有MergeEngines 的主键表。Spark DELETE 和 UPDATE 也支持 subquery 的条件。Spark COMPACT Procedure 支持了 where 的方式。

最后

整个湖仓领域大家可以持续关注,未来我会持续给大家带来生产环境的最佳实践和未来发展趋势的解读。

300万字!全网最全大数据学习面试社区等你来!


如果这个文章对你有帮助,不要忘记 「在看」 「点赞」 「收藏」 三连啊喂!

全网首发|大数据专家级技能模型与学习指南(胜天半子篇)
互联网最坏的时代可能真的来了
我在B站读大学,大数据专业
我们在学习Flink的时候,到底在学习什么?
193篇文章暴揍Flink,这个合集你需要关注一下
Flink生产环境TOP难题与优化,阿里巴巴藏经阁YYDS
Flink CDC我吃定了耶稣也留不住他!| Flink CDC线上问题小盘点
我们在学习Spark的时候,到底在学习什么?
在所有Spark模块中,我愿称SparkSQL为最强!
硬刚Hive | 4万字基础调优面试小总结
数据治理方法论和实践小百科全书
标签体系下的用户画像建设小指南
4万字长文 | ClickHouse基础&实践&调优全视角解析
【面试&个人成长】社招和校招的经验之谈
大数据方向另一个十年开启 |《硬刚系列》第一版完结
我写过的关于成长/面试/职场进阶的文章
当我们在学习Hive的时候在学习什么?「硬刚Hive续集」

大数据技术与架构
王知无,大数据卷王,专注大数据技术分享。
 最新文章