DataFunSummit2023 天穹OLAP:实时湖仓融合架构实践 演讲人:程广旭-腾讯-高级工程师 为什么需要湖仓融合 湖仓融合新架构 未来展望及规划 为什么需要湖仓融合 DataFunSummit2023 实时数仓VS数据湖 实时数仓:指能够实时地处理和分析数据,使得数据仓库中的 数据是最新的、最准确的,并且可以实时响应用户的查询和分析需求的一种数据仓库系统。 数据湖:一个集中式存储库,允许您以任意规模存储所有结构 化和非结构化数据。 对比项 实时数仓 数据湖 架构 存算一体/存算分离 存算分离 计算引擎 自带计算引擎,一般为MPP架构 依赖第三方计算引擎,如:spark、presto等 存储引擎 一般集成写入入口及具备完善的数据分片管理机制 一般借助Flink等计算引擎写入数据 查询性能 优 较优 易用性 好,系统自成一体,集成了写入/查询/集群管理等能力 需要与其他组件配合使用 成本 高 低 性价比 更好的查询性能带来了较高的成本 查询性能较优且存储成本更低 湖仓融合的意义 为什么要在湖上建仓 数仓加速:基于数据湖的远程IO成本很高,且缺少一系列数仓加速的手段;早期的数据湖格式多样且不成熟,索引的支持不完善,查询性能有待提升;并且数据湖主要针对吞吐量的优化,关注低成本和高可靠,不适用于高性能的需求;虽然可以通过缓存解决一部分性能问题,但引入缓存也会带来数据一致性、查询性能不稳定等等问题 实时分析:对于实时写入的流式数据,传统的数据湖写入的实时性不够,在Iceberg或者Hudi的支持下可能能解决分钟级别 的时效性,但是无法解决秒级时效性的问题 高并发查询:对于高并发查询,不管是点查还是聚合类的查询,数仓是更擅长的 为什么要湖仓融合 降本增效:简化技术架构,提升架构的易用性,并增强架构可靠性,降低运维成本 统一数据:统一数据存储和输出,所有数据的口径都是一致的,基于相同的数据计算,保证数据的一致性 数据治理:湖仓融合的数据底座统一了主数据和元数据,基于此才有可能做上层统⼀的数据治理 ODS DWD DWS 传统的实时湖仓一体架构 Binlog 优点: •增量读取,实时性好,成本低 •相较MQ更加稳定性 缺点: •查询借助外部引擎,查询性能一般 •业务需要维护多个Flink任务 湖仓融合新架构 DataFunSummit2023 实时湖仓融合平台 优点: •接入简单,只需创建实时入库任务 •数据实时性更高,分钟级->秒级 •查询性能更优,亚秒级 缺点: •相较于iceberg等湖格式,支持的湖能力欠缺 •数据可能会存储多份,有一定的冗余 注:SuperSQL是腾讯大数据自研的下一代大数据自适应计算平台。 湖仓融合总体架构 实时 离线 Flink Pulsar Tube Hive iceberg Hudi 数据接入 实时入仓1 1入仓加速 数据湖融合分析 Table2p_20230303p_20230302p_20230301p_20230228p_20230227 Table1p_20230303p_20230302p_20230301p_20230228p_20230227 实时数仓 双写入湖2 1降冷入湖 2分区映射 融合查 数据湖 询 HiveIcebergHudi 1 数据实时写入到仓,并定时降冷到湖 2 数据实时双写入仓与入湖 数据实时入湖后,准实时导入到仓 1 2 冷热数据分区映射 实时入库–Pulsar数据源 背景:腾讯内部有大量的团队在使用Pulsar,但SR只能通过kop插件消费pulsar中的数据,性能较差,亟需原生支持Pulsar数据,提升消费性能。 •用户通过client向FE提交pulsarroutineload任务•FE生成pulsarroutineloadjob,并将job拆分成task•FE将task分配到指定的BE上执行•BE将一个task视为普通的数据写入任务•BE完成task执行后,向FE汇报•FE根据结果,继续生成后续新的task,或者对失败的task进行重试 •FE不断的产生新task,从而做到数据不间断的导入 Pulsar数据源处理流程 处理流程: 实时入库–Pulsar数据源消费性能 •集群消费峰值:165w/s •单consumer消费能力:2.5w/s,52MB/s •消费能力可通过扩展partition/consumer数量水平扩展 数据降冷–创建降冷任务 降冷任务:新增降冷任务命令,并配置导出过程中需要的一些参数,比如:导出任务占用内存、导出格式、超时时间等等,最后指定降冷到湖的表名,如果表不存在则会自动创建该表。 导出任务:扩展Export功能,支持将数据导出到指定的湖表,目前支持了Iceberg、Hudi、Hive等表类型。 数据降冷–流程 降冷任务Job 轮询 下发导出子任务 导出任务完成 ParquetWriter TabletReader subTask BE 导出Task FE 1.等待所有子Task执行完成 2.更新湖表元数据信息 3.更新仓表分区状态信息 4.更新导出任务状态 数据降冷过程: 生 成执行计 划 下发 任务到B E 导 出任务完 成 1.用户创建降冷任务,自动创建湖表 2.轮询检查降冷任务,找出符合降冷条件的分区 3.生成导出任务,将数据导出到HDFS 4.变更相关湖仓表及仓表分区元数据信息 5.降冷完成 HDFS 数据降冷流程 离线任务配置界面 离线入仓–离线数据入仓 难点 1.数据什么时候准备好? 2.任务什么时候开始调度? 3.任务重跑如何更新仓中数据? 统一调度 统一调度是腾讯大数据自研的分布式千万量级任务调度平台,服务了腾讯公司所有BG数据开发和运维等用户可视化管理任务规则和依赖关系,有序下发实例和调度数据,日均执行实例超过千万。 支持的功能 1.统一调度支持按小时/日/月等多粒度调度,支持任务依赖、重跑等 2.在统一调度中开发将Hive/HDFS等源入库到仓的插件,用户只需要配置下表的映射关系、自动创建仓表、可配置自定义的相关命令 Client FE Icebergroutineloadjob S0与s1增量 文件 预处理增量文 件 Task Task Task BE BE BE 处理流程 离线入仓–湖中数据准实时入仓 背景:业务一般会通过Flink+iceberg来对数据准实时入库到湖中,而湖中的数据也支持通过流式方式读取增量数据,为了提升湖仓中数据的实时性,我们在仓中新增了准实时增量消费湖中数据的功能。 Iceberg数据组织架构 融合查询 SQL 自适应冷热查询示例: 热数据 冷存储 冷转热 2022/12/01 2022/12/02 2022/12/03 selectdate,count(uid)aspvfromtable_hotwheredate>=20221128anddate<=20221203groupbydate 冷存储 selectdate,count(uid)aspvfromtable_hotwheredate>=20221201anddate<=20221203groupbydate Unionall selectdate,count(uid)aspvfromtable_coldwheredate>=20221128anddate<=20221230groupbydate Exchange AggregateHotTableScan 20221128-20221203 SQLParser SQL解析及优化 Analyzer 查询优化器 查询冷热映射信息 判断SQL查询范围 LogicalPlan 查询计划改写 FE 元数据 融合查询流程: 1.接收SQL,按照正常流程解析SQL 2.命中冷热查询改写规则,根据元数据中记录的热表TTL、冷热表字段映射等信息改写计划 3.优化新生成的冷热查询计划 4.生成最终执行计划 计划改写 Result 2022/12/032022/12/022022/12/012022/11/302022/11/292022/11/28 Aggregate Union Exchange Exchange Aggregate Aggregate HotTableScan ColdTableScan 20221201-20221203 20221128-20221130 热数据 性能测试 本节主要是基于TPC-H标准数据集(100GB),对比了SR内表、使用SR和presto查询iceberg的查询性能,经过对比结论如下: •SR内表查询性能分别是Presto查询iceberg的4-65倍,是SR直接查iceberg表的1-25倍 •通过冷热融合查询可以给业务带来明显的性能提升,预计可提升3倍左右 未来展望及规划 DataFunSummit2023 天穹DB:借助SuperSQL来实现自适应冷热导流分层,数仓以模块化的方式嵌入进来,实现冷热数据进行快速查询处理。 SQLParser SQL解析及优化 Analyzer 查询优化器 查询冷热映射信息 判断SQL查询范围 LogicalPlan 查询计划改写 未来展望及规划 SuperSQL SQL 基础元数据冷热表映射信息 统一元数据 提交SQL到计算引擎 查询类型 热查询冷查询 冷存储数据湖 直接下推 直接下推SparkStarRocks 分析型存储 StarRocks……ClickHouse 定时调度 感谢观看 DataFunSummit2023