随着结构化数据、半结构化数据和非结构化数据的不断增加,越来越多的企业选择将数据存储在数据湖中,便于更好地管理和利用数据资产。但是企业对数据更新处理时效性的要求越来越高,数据湖无法实现高吞吐、低延迟的数据摄入、流式订阅以及实时查询。因此流式数据湖存储技术诞生了。
在近日举办的WOT全球技术创新大会2023·北京站的《大数据技术创新》专场中,来自阿里云的高级技术专家李劲松带来了主题为《Apache Paimon 流式数据湖 V0.4与后续展望》的精彩分享,从理论、实践和未来发展方面详细介绍了Apache Paimon 流式数据湖。
Apache Paimon 流式数据湖是什么?
Apache Paimon是一个从准实时出发的流式数据湖,也是专门为CDC处理流计算而生的数据湖。Apache Paimon的创新之处在于采用了湖存储+ LSM的文件组织架构,基于分布式文件系统管理元数据。
在管理元数据之前,首先需要处理元数据。当元数据流入Apache Paimon后,其处理流程分为写入、压缩、清理和读取。写入和压缩都在Flink Job中完成,用户无需创建Spark的离线作业再做异步聚簇(Clustering)。基于这样的设计,Apache Paimon的优势之一就是Append 写入,所以吞吐大;局部压缩减少了写入放大,所以消耗低。最后在Flink Sink中自动清理、有序合并。
而对于任何一个创新的技术来说,没有良好的生态体系就无法走得长远。虽然Apache Paimon目前的生态体系还不及传统数据湖,但也已经支持或部分支持Flink、Hive、Trino、Spark和Presto。
其中,Apache Paimon对Flink的支持最佳,可以支持Flink的所有特征。其次是Spark,目前能够支持读写,也基本支持Create Table。StarRocks、DORIS、网易Arctic,阿里云大数据计算(MaxCompute)和实时数仓(Hologres)等产品也正在积极对接中。
流式数据湖新场景
“实时”是流式数据湖的核心。所以Apache Paimon最大的特点就是能让数据实时流入,做到实时数据流读和实时字段打宽,不再是每天或每小时更新离线数仓的数据。但是目前在实时入湖、打宽和流读中也面临许多痛点,比如吞吐量低和资源消耗高、存在乱序等等。在本次分享中,李劲松详细介绍了数据湖新场景中的痛点,以及Apache Paimon是如何解决这些难题的。
实时数据入湖
想要处理数据,首先需要让数据入湖。而实时数据入湖是实时更新来自数据库的 CDC 数据。但是在实时数据入湖时存在着三类问题。首先,是吞吐量低和资源消耗高的问题。第二,在管理方面,数据湖需要管理好压缩、清理历史文件和清理过期分区,并且不需要额外的管理成本。最后在模型演进方面,数据湖不会跟随模型的变化而变化,仅仅只是存储数据。
针对这些问题,Apache Paimon从架构和功能两方面双管齐下。从架构方面来说,当数据湖结合LSM 的Append后,形成了高效写入吞吐的优势;结合LSM的Minor Compaction后,可以有效减少写入放大,从而解决吞吐量小和资源消耗高的问题。而LSM是按照组件排序的,所以Apache Paimon的写入性能较原有的Hudi表提升了3倍以上;部分查询性能则提升了7倍。
在功能方面,李劲松重点介绍了Apache Paimon的CDC入湖功能:表同步和整库同步。
表同步可以同步表的结构,包括增列、删列、类型变更和重命名列,还可以新增计算力、定义分区力和定义组件,甚至做到分库分表的同步。整库同步可以指定表、增加前后缀,也可以动态新增表。在这两个功能基础上,Apache Paimon还提供了CDC Data Schema API,基于Data Schema API便能同步更多的数据,甚至在分级的流计算中做到模型同步。
实时字段打宽
数据入湖存储后,如果不用则会变成数据沼泽。实时打宽维表的字段能够给下游提供查询及流读,让数据流动起来。但是实时字段打宽同样存在三类问题。第一个问题也是吞吐量低和资源消耗高。第二,在读取方面,如果无法支持列裁剪,则无法达到高效的读时合并(Merge On Read)。最后是乱序的处理问题,Apache Paimon是基于分布式文件系统管理元数据的,但是分布式处理的乱序场景非常多,乱序如何处理?
Apache Paimon通过支持部分更新来解决这些问题。Apache Paimon基于LSM的部分更新(Partial-Update)功能,从而在读时合并和合并(Merge)时做到部分更新。这就意味着在查询时可以做到列裁剪,并且在写入达到高吞吐时,也能保证查询有非常好的性能。
而针对乱序问题,Apache Paimon支持定义Sequence Field处理乱序。Apache Paimon V0.5版本引入了一个新的概念——Sequence Group。Sequence Group是让每个流定义自己的序列组应对多流乱序,从而真正做到部分更新,而不是non-null Update。
实时数据流读
实时数据流读是提供消息队列体验的流读,并能根据主键生成变更日志。数据湖流读的痛点之一在于没有全量数据。如果没有以前的数据,数据只能完全从零开始生成,那么结果可能就会很不理想。除此之外,数据湖还有生成变更日志成本较高、文件清理与流读的矛盾(FileNotFound)以及不支持Flink的Lookup Join的问题。
Apache Paimon着重增强了流读。Apache Paimon首先支持流读原始数据,实现全增量数据一体流读。而在生成变更日志方面,Apache Paimon是以Full-compaction的方式生成变更日志,同时也支持多种生成方案,其中就包括Flink的Lookup Join。通过Apache Paimon生成的变更日志,时延也有所降低:Lookup 模式时延在1-3分钟;Full-compaction 模式时延在3-10分钟。
此外,Apache Paimon还有一个新的功能——Consumer-ID。Consumer-ID类似Kafka的GroupID,确保数据不会被淘汰,保证流读的安全性。Consumer-ID也支持流读无状态重启,解决流读恢复时的FileNotFound的问题。
Apache Paimon在社区中的应用实践
以上都是从理论方面介绍Apache Paimon的独特之处。而在实践应用中,Apache Paimon的表现又如何?接下来,李劲松主要介绍了Apache Paimon在阿里云计算平台、字节跳动、同程旅行及其它社区中的应用实践,展现出Apache Paimon出色的实践能力。
阿里云计算平台目前已达到了计算全集成,Apache Paimon替代Hudi成为实时入湖的首选。计算平台可以通过实时计算Flink入湖,或通过CTAS、CDAS命令达到模型同步入湖,并进行实时计算流读。
而字节跳动集成了Apache Paimon + Flink,解决了血缘管理和一致性管理问题,实现了真正意义上的Streaming Warehouse生产体系,让每个数据流动并沉淀。
同程旅行引入Apache Paimon,优化了原有的Hudi近实时数仓,整体规模达到了上百个作业,最大的表有90亿+的数据。
除此以外,中原银行、米哈游、Bilibili、尘锋信息、汽车之家、巴别时代、海兰寰宇等企业都在用Apache Paimon + Flink探索流式数仓,甚至是向流批一体近实时数仓的方向前进。
Apache Paimon未来规划
通过从理论和应用实践方面的介绍,不难看出Apache Paimon已经解决了很多目前数据湖存在的问题。但是Apache Paimon的创新不止于此。在演讲的最后,李劲松提到了Apache Paimon短期和长期的发展规划,表明了未来的发展方向。
首先在短期内,Apache Paimon需要加强CDC场景、实现动态 Bucket 全自动、创建Immutable Tag从而提供Immutable的离线版本、增强Append-Only处理以及Spark集成。
从长期发展来看, CDC实时数据湖需要在Apache Paimon中达到完全成熟的状态;其次,Append离线表达到生产可用的状态;最后,生态能够达到全面对接,Spark集成完全成熟。
以上内容整理自阿里云高级技术专家李劲松在WOT全球技术创新大会2023·北京站《大数据技术创新》专场中的精彩分享。获取完整PPT请关注51CTO技术栈公众号,后台发送【WOT2023PPT】即可直接领取。