Apache Doris 是一个开源的实时数据仓库,由 Doris Summit Asia 2024 的创始人兼 PMC 成员马如悦介绍。该项目自 2013 年创建,2017 年开源,已成为 Apache 顶级项目,拥有 600 多名贡献者,并在 GitHub 上获得 13k 星标,是 Apache 所有项目中官网每日浏览量 No.1 的开源大数据、数据库项目,月活开发者 No.1。
核心观点与关键数据:
- 项目影响力:作为 Apache 的顶级项目,Doris 在能源、制造、零售、快消、交通、物流、游戏、电信、互联网金融等领域被超 5000 家中大型企业使用。
- 版本里程碑:Apache Doris 3.0 是现代化数据仓库创新之路的重大里程碑,聚焦于实时、统一和弹性三大方向。
实时之路 (Real-Time):
- Doris 支持在线高可用、高并发查询、极速分析、实时数据写入等特性,满足在线服务要求,支撑超大规模用户的高并发查询,确保数据新鲜度。
- 实时数据写入:支持秒级别的 StreamLoad/Insert into 数据导入,支持服务端攒批 Group Commit,支持从 Kafka 自动拉取导入 RoutineLoad,支持数据库 CDC、Flink、Spark 等实时导入。
- Merge on Write 主键模型:提供 MoW 的主键模型,支持 UPSERT、条件更新、条件删除、部分列更新,基于 Sequence 列的并发更新事务控制,更改列名,增加和删除 Value 列,增加 VARCHAR 列的长度。
极速分析 (Fast Analytics):
- Doris 在极速分析方面表现出色,相比 ClickHouse、StarRocks 等竞品有显著性能优势。
- 优化技术:向量化处理,高效利用 SIMD 指令,基于代价的 join reorder,pushdown,Runtime FilterCBO 优化器,跳数索引,点查索引,任意维度检索:倒排索引。
- 物化视图:强一致的单表物化视图,支持通用聚合函数,单表和多表异步物化视图。
- ARM 架构优化:Doris v2.1 针对 ARM 架构做了深度优化,性能相比 V2.0 提升近一倍。
高并发查询 (High-Concurrency Queries):
- Doris 支持行存和列存,列存用于高吞吐分析,行存用于高并发点查。
- 优化技术:点查询短路径优化(Short-Circuit),预处理语句优化(Prepared Statement)。
- 单节点最高上万 QPS:通过分区分桶、主键索引 & 倒排索引、行列混存等技术实现。
在线高可用 (High Availability Online System):
- 元数据节点 FE 和数据节点均无单点,支持在线扩容、滚动升级,数据自动均衡。
- 支持在线 Schema Change,支持动态增删索引,3.0 存算分离支持多计算组。
统一之路 (Unified):
- Doris 的单一系统支持各种分析负载,不仅支持实时分析,也支持批量计算,统一实时和批量计算,统一数据仓库和数据湖仓,支持结构化数据分析,也支持半结构化数据分析。
- 湖仓无界:统一数据仓库和数据湖仓,避免过早复杂性,支持 Hive、Iceberg、DBFederation Query Engine,Multi-Catalog,High Throughput Read/Write。
- 半结构化数据分析:支持复合数据类型 VariantString 类型(Array、Map、Struct、JSON),自动推断类型进行列式存储,自动处理列增加、类型变更,高效文本匹配(Like):NGram BF,高性能正则匹配和子串匹配算法,文本分词,全文检索(Match):倒排索引实现快速检索。
弹性之路 (Elastic):
- Doris 通过 Resource Group 和 Workload Group 实现弹性资源管理,支持冷热分层(Tiered Storage),机器分组,副本放置到分组,user 绑定分组。
- 存算分离:Apache Doris 3.0 部署新形态 - 存算分离,共享存储与本地高速缓存,多计算集群(导入集群、查询集群)。
- 两种部署形态的融合:存算一体部署简单、性能较优;存算分离,独立扩缩容,部署需要依托高性能存储和网络;存算分离+云原生是绝配。
未来工作:
- 完善存算一体和存算分离部署形态融合,完善湖仓一体支持增量批量处理内置 CDC 同步,插件化体系,兼容 Trino/Presto Connector 框架,完善高吞吐读写的 Data API,统一实时和批量处理,增量处理,支持从众多 TP 数据库直接 CDC 导入数据,打造 HTAP Solution。
- 非功能性能力的加强:提升性能,导入更实时,查询更极速;提升稳定性,版本迭代机制改进,加强测试覆盖,内核插件化;易用易运维,简化参数配置,提升产品文档,完善周边生态工具。