LAS 的整体架构存算分离,计算存储可以按需扩展,避免资源浪费,因为存算分离,所以一份数据可以被多个引擎分析。相较于存算一体,成本 TCO 可以下降 30%-50%,并且 LAS 支持动态弹性扩缩容,可进一步降低用户成本。
基于 LAS 构建企业级实时湖仓,无论离线数据还是实时数据,都可以放到 LAS 流批一体存储中。如果需要实时处理的数据,可以直接利用 LAS 的 Streaming 能力,流读流写,流式写入下一层表中,层层构建 ODS、DWD 等层级关系。如果需要进行离线回溯,不需要换存储,直接通过流批一体 SQL 运行离线任务。
02 问题与挑战
LAS 流批一体存储是基于开源的 Apache Hudi 构建的,在整个落地过程中,我们遇到了一些问题。Apache Hudi 仅支持单表的元数据管理,缺乏统一的全局视图,会存在数据孤岛。Hudi 选择通过同步分区或者表信息到 Hive Metastore Server 的方式提供全局的元数据访问,但是两个系统之间的同步无法保证原子性,会有一致性问题,因此当前缺乏一个全局可靠视图。另外 Hudi 在 Snashot 的管理上,依赖底层存储系统的视图构建自己的 Snapshot 信息,而不是通过自己的元数据管理。这种机制无法保证底层的存储系统记录的文件信息和每次 Commit 的文件对齐,从而在下游消费的时候会产生读到赃数据,或者坏文件等问题。
针对数据孤岛和元数据一致性问题,LAS 设计了统一元数据服务 MetaServer,提供了一个全局的可靠视图。另外 Hudi 支持 Merge On Read方式,该方式会先将更新数据写入 Log 文件中,读时再和底层的 Base 文件进行合并。为了保障读取效率,Hudi 提供 Compaction 功能,定期将 Log 文件和 Base 文件进行合并后写成新的 Base File。在近实时或实时场景下,业务对于时间非常敏感, 在写入操作后顺序执行 Compaction 会导致产出时间不稳定,影响下游消费。对此社区提供了 Async Compaction 功能,将 Compaction 算子和 Commit 拆开,Compaction 和 Commit 可以在一个 Application 中共享资源,并行执行。