Lakehouse 代表了一种新的开放式架构,它结合了数据湖和数据仓库的最佳元素。它将数据湖的可扩展性和成本效益与数据仓库的可靠性和性能相结合。Apache Iceberg、Apache Paimon、Apache Hudi和Delta Lake等众所周知的数据湖格式在 Lakehouse 架构中发挥着关键作用,促进了单一统一平台内数据存储、可靠性和分析能力之间的和谐平衡。
Lakehouse 作为一种现代架构,可以有效解决复杂的数据管理和分析需求。但是,受限于其实现方式,它们很难满足需要亚秒级数据新鲜度的实时分析场景。使用这些数据湖格式,你会陷入一个矛盾的境地:
如果您需要低延迟,则需要频繁写入和提交,这意味着需要处理许多小的 Parquet 文件。这对于必须处理大量小文件的读取来说效率很低。
如果您需要读取效率,那么您可以累积数据直到可以写入大型 Parquet 文件,但这会带来更高的延迟。
总体而言,即使在最佳使用条件下,这些数据湖格式通常也只能在分钟级粒度内实现数据新鲜度。
流媒体 Lakehouse:流媒体与 Lakehouse统一
Fluss 是一种支持亚秒级低延迟流式读写的流式存储。借助Lakehouse Storage,Fluss 通过在 Lakehouse 之上提供实时流数据,统一了数据流和数据 Lakehouse。这不仅为数据 Lakehouse 带来了低延迟,还为数据流添加了强大的分析功能。
为了构建 Streaming Lakehouse,Fluss 维护了一个压缩服务,将 Fluss 集群中的实时数据压缩到 Lakehouse 存储中。Fluss 集群中的数据(流式 Arrow 格式)针对低延迟读写进行了写入优化,而 Lakehouse 中的压缩数据(带压缩的 Parquet 格式)针对强大的分析进行了读取优化,并针对存储长期数据进行了空间优化。因此,Fluss 集群中的数据服务于实时数据层,该数据层保留数天的亚秒级新鲜度,而 Lakehouse 中的数据服务于历史数据层,该数据层保留数月的分钟级新鲜度。
Streaming Lakehouse 的核心思想是流和 Lakehouse 之间共享数据和共享元数据,避免数据重复和元数据不一致。它提供的一些强大功能包括:
统一元数据:Fluss 为 Stream 和 Lakehouse 中的数据提供了统一的表元数据。因此用户只需要处理一个表,就可以访问实时流数据、历史数据或它们的并集。
联合读取:计算引擎对表执行查询将读取实时流数据和 Lakehouse 数据的并集。目前,只有 Flink 支持联合读取,但更多引擎正在规划中。
实时 Lakehouse:联盟读数帮助 Lakehouse 从近实时分析发展到真正的实时分析。这使企业能够从实时数据中获取更有价值的见解。
分析流:联合读取帮助数据流具有强大的分析功能。这降低了开发流应用程序时的复杂性,简化了调试,并允许立即访问实时数据洞察。
连接到 Lakehouse 生态系统:Fluss 在将数据压缩到 Lakehouse 时,将表元数据与数据湖目录保持同步。这允许 Spark、StarRocks、Flink、Trino 等外部引擎通过连接到数据湖目录直接读取数据。
目前,Fluss 支持Paimon 作为 Lakehouse 存储,更多种类的数据湖格式正在规划中。
还没有评论,来说两句吧...