您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[知乎]:Apache Doris在知乎AB实验平台的使用实践 - 发现报告

Apache Doris在知乎AB实验平台的使用实践

信息技术2024-01-14张潇鹤知乎静***
AI智能总结
查看更多
Apache Doris在知乎AB实验平台的使用实践

张潇鹤数据平台开发工程师 目录 知乎AB平台业务背景介绍01 知乎AB实验平台架构演进历程02 03知乎AB在ApacheDoris上的实践 04未来展望 知乎AB实验平台业务背景介绍 知乎-AB实验平台介绍 •知乎 高质量的在线问答社区 •AB实验平台 AB实验的主要目的在于降低风险和分析策略结果。其基本思想是从大盘中取出一小部分流量,随机地将用户分给对照组和实验组,通过收集、分析不同分组用户行为指标数据,再结合统计学方法得出实验结论。 知乎-AB平台的基本背景介绍 知乎AB实验平台支撑知乎主站、盐言故事、知乎知学堂等多条业务线,每天平台运行上千个实验。 实验进组用户表日均数据量百亿级。 支持实验分析场景多样:支持基础计算类、留存类、LTN类等4000多个指标分析,离群值剔除、多维度下钻等。 知乎-AB平台进组用户生成逻辑介绍 每天的实验进组用户数据量是DAU用户的数倍,一个用户携带的实验标签数量级介于数十~上百个不等。 知乎AB实验平台架构演进历程 知乎-AB2.0基于Clickhouse的平台架构 AB2.0平台采用了预计算的方式,最终将预计算结果写入到ClickHouse中,充分利用了ClickHouse的单表查询能力。 知乎-AB2.0平台实验数据加工流程 知乎-AB2.0架构的核心痛点 老架构的三大痛点 痛点1:预计算资源消耗大,影响集群其他任务,只能对做Cube剪枝 痛点2:ClickHouse对多表或大表Join支持有限,很多业务场景无法满足 痛点3:已有指标数据无法复用,造成资源重复消耗 知乎-新架构选型的二大核心目标 新的选型产品在海量数据同步和多表关联查询性能两个场景下同时满足业务诉求 •需要支持每日百亿级数据量写入,支持事务导入,数据精准写入。 •新的OLAP引擎需要满足AB进组用户表和业务指标表进行即席关联查询,部分业务场景需要3-4张表的Join。 知乎-基于ApacheDoris的AB数据流 切换到Doris后数据流程清晰简单: Hive中只做AB进组用户的落表和指标数据的加工,不再与AB业务耦合通过BrokerLoad/SteamLoad进行Doris的数据写入AB平台直接对接Doris进行即席数据查询 知乎-新旧AB平台功能与收益对比 Hadoop资源消耗大幅降低 Doris在多个大表Join下性能表现优秀,新版AB实现了相关性分析、归因分析、指标离群值剔除等实验功能业务可根据已有数据进行指标口径自定义,缩短数据加工链路 知乎AB在Doris上的实践 知乎-表结构设计基本准则 •利用好Doris默认提供的前缀索引•zstd压缩方式•合理的bucket数量•指定Group,查询优先命中ColocateJoin•排序列 知乎-进组用户表设计 •使用业务字段exp_name进行物理分区•Spark直接按照分区生成对应parquet文件,进行brokerload•使用AGG模型,部分列更新,提升查询和写入效率 知乎-精准进组用户分析(bitmap) 在精准分析业务中,会对用户进组/出组时间的滑动窗口查询,有两种实现方式: •记录每日明细数据,通过明细数据进行过滤•将用户的进组日期写到Bitmap里,通过bitmap_and_count函数与筛选日期做交叉查询 知乎-指标查询逻辑 •指标拆解,按需查询•归属同一张表的指标查询SQL合并•缓存加速 知乎-数据导入优化 •参数调整:desired_max_waiting_jobs=200async_pending_load_task_pool_size=15async_loading_load_task_pool_size=15•通过临时分区实现数据的原子导入 知乎-Join调优 •当不确定两张表的大小时,可以使用sqlhint,让Doris自己去决定采用JoinReordersetenable_cost_based_join_reorder=true SELECTa.*FROMaINNERJOIN[shuffle]bona.user_id=b.user_id 知乎-Profiling 知乎-ApacheDoris调优后收益 1.查询耗时降低:每周查询总耗时,在统计执行的SQL数量略有增加的情况下,SQL执行总耗时降低了35%。2.查询性能提升:Doris查询P99的用时,由8s+降低到了3s+,降幅60%。 ThanksforWatching!