Apache Doris 大数据仓库全面解析
这是一个对 Apache Doris 的全面了解指南。结合其官方网站和社区知识,我将从核心概念、架构、特性、应用场景以及快速上手等方面为您进行系统性的解析,另外还补充了Doris的竞争方案。Apache Doris 是一款面向实时分析场景的现代化数据仓库。它能够对海量实时数据进行极速分析。https://doris.apache.org/
Apache Doris
一、Apache Doris 是什么?
Apache Doris 是一个高性能、实时分析型的MPP(大规模并行处理)数据库。它最初由百度开发并开源,名为 Palo,后来捐赠给 Apache 基金会并更名为 Doris。
它的主要目标是解决在线实时报表、即席查询、统一数据仓库构建等场景下的高速数据分析问题。简单来说,它就像一个专为“实时分析”而生的超级引擎,能够在大规模数据集上实现亚秒级的查询响应。
二、核心特性(为什么选择 Doris?)
-
极速的查询性能
-
MPP 架构:查询任务被并行分发到集群中的所有节点,充分利用集群的计算和I/O资源。
-
列式存储:数据按列存储,在查询时只需读取相关列,极大地减少了磁盘I/O。
-
向量化执行引擎:利用CPU的SIMD指令,一次处理一批数据,而不是一行数据,显著提高了CPU利用率。
-
预聚合:支持创建基于“物化视图”的Rollup表,预先计算和存储聚合结果,使得查询时可以直接命中预计算好的数据,速度极快。
-
-
易于使用
-
兼容标准SQL:支持ANSI SQL标准和MySQL协议,用户可以直接使用熟悉的MySQL客户端和BI工具(如Tableau, FineBI, Grafana)连接Doris,学习成本极低。
-
统一的架构:Doris同时支持离线批处理和实时数据导入,无需维护两套不同的系统(如Hive + HBase)。
-
简化运维:系统架构简单,只有 FE(前端)和 BE(后端)两种进程,部署和扩容非常方便。
-
-
实时能力
-
支持多种实时数据导入方式,如 Kafka Routine Load、Flink Connector、MySQL Binlog Load等,可以实现数据毫秒到秒级的延迟。
-
-
丰富的生态系统
-
可以方便地对接 Hadoop(HDFS, Hive)、Spark、Flink 等大数据组件。
-
支持多种数据湖分析,如 Iceberg、Hudi 等外部表,可以直接查询数据湖中的数据而无需导入。
-
-
高可用性与可扩展性
-
FE 支持多副本,通过类 Paxos 的 BDB JE 协议实现元数据的高可用和一致性。
-
BE 节点可以水平扩展,增加节点即可线性提升集群的查询和存储能力。
-
三、架构解析
Doris 的架构非常简洁,主要由两类进程组成:
1. Frontend (FE) - 前端节点
-
职责:负责元数据管理、客户端连接、查询解析与规划。
-
角色:
-
Leader:只有一个,负责元数据的写入和日志同步。
-
Follower:多个,参与选举,提供元数据读取服务。
-
Observer:多个,仅同步元数据,用于扩展读能力,不参与选举。
-
-
对外接口:用户通过 MySQL 协议连接到 FE。
2. Backend (BE) - 后端节点
-
职责:负责数据存储、查询执行。
-
每个 BE 节点存储一部分数据(表的分片/分区),并执行 FE 下发的查询任务。
-
数据采用多副本机制,保证高可用。
工作流程简述:
-
用户通过 MySQL 客户端发送 SQL 到任意一个 FE。
-
FE 对 SQL 进行解析、语法分析、查询优化,生成分布式执行计划。
-
FE 将执行计划分发给相关的 BE 节点。
-
各个 BE 节点并行执行,处理本地存储的数据。
-
FE 收集各个 BE 的中间结果,进行最终聚合。
-
将最终结果返回给客户端。
四、典型应用场景
-
实时报表与 OLAP 分析
-
为业务提供实时运营看板、多维分析报表。例如:实时销售大盘、用户行为分析。
-
-
统一数据仓库构建
-
作为一个中心化的数据仓库,承接来自各业务线(日志、数据库、埋点等)的数据,为上层提供统一的数据查询服务。
-
-
即席查询
-
数据工程师和分析师可以进行灵活、快速的探索性查询,无需等待长时间的 ETL 过程。
-
-
日志存储与分析
-
替代传统的 ELK 方案,处理海量日志数据,提供更强大的聚合查询能力和更低的存储成本。
-
-
高维向量分析
-
最新版本支持了向量索引,可以用于 AI 场景下的快速相似性搜索,如图片、音频检索。
-
五、数据模型(表类型)
Doris 提供了三种数据模型,以满足不同场景的需求:
-
Duplicate Key Model(明细模型)
-
存储最原始的数据,不做任何聚合。适用于需要保留所有明细数据的场景,如日志分析、行为流水。
-
-
Aggregate Key Model(聚合模型)
-
定义 Key 列和 Value 列。相同 Key 列的数据行,其 Value 列会在导入时进行预聚合(如 SUM, MAX, MIN)。适用于报表汇总,可以极大提升查询性能。
-
-
Unique Key Model(更新模型)
-
定义唯一 Key。对于相同 Key 的数据,后导入的数据会覆盖先导入的数据。适用于实时同步变化的业务数据,如订单状态表。
-
-
(补充)Duplicate Key Model with Sequence Column
-
在明细模型基础上,增加了版本列,用于保证数据更新的顺序。
-
六、快速上手
以下是一个极简的从零开始使用 Doris 的流程:
-
部署
-
参考官网文档,可以通过下载二进制包或使用 Docker 进行单机或集群部署。
-
-
连接
bash
# 使用 MySQL 客户端连接,默认端口 9030 mysql -h FE_HOST -P 9030 -u root
-
创建数据库
sql
CREATE DATABASE demo; USE demo;
-
创建表(以聚合模型为例)
sql
CREATE TABLE sales (user_id INT,date DATE,city VARCHAR(20),amount BIGINT SUM ) ENGINE=olap AGGREGATE KEY(user_id, date, city) DISTRIBUTED BY HASH(user_id) BUCKETS 10;
解释:以
user_id
,date
,city
为 Key,对amount
进行 SUM 聚合。数据按user_id
的哈希值分到 10 个桶中。 -
导入数据
sql
-- 使用 Stream Load 方式插入数据 INSERT INTO sales VALUES (1, ‘2023-10-01’, ‘Beijing’, 100), (2, ‘2023-10-01’, ‘Shanghai’, 200);
-
查询
sql
-- 查询每个城市的总销售额 SELECT city, SUM(amount) AS total_sales FROM sales GROUP BY city;
七、总结:优势与考量
优势:
-
性能卓越:在多数场景下,查询速度比 Hive, Presto, Kylin 等更快。
-
运维简单:架构清晰,组件少,大大降低了运维负担。
-
生态友好:兼容 MySQL 协议,与大数据生态无缝集成。
-
功能全面:集实时、离线、数据湖分析于一体。
考量/适用边界:
-
对于超大规模的离线 ETL 作业,Hive/Spark on Hadoop 生态的批处理成本可能更低。
-
作为OLTP(高并发事务处理) 数据库的替代品是不合适的,它专为分析型查询设计。
-
社区相对年轻,虽然发展迅速,但企业级功能和支持可能不如一些老牌商业数据仓库成熟。
总而言之,Apache Doris 是现代大数据架构中,作为实时分析层和统一数据仓库的一个非常出色和受欢迎的选择。 如果您正在寻找一个能够提供快速查询、易于运维且支持实时数据摄入的分析型数据库,Doris 绝对值得您深入评估。建议访问其官网 https://doris.apache.org/ 和 GitHub 仓库以获取最新信息。
Apache Doris衍生方案
Apache Doris 本身是一个非常优秀的项目,而基于它的衍生方案也极大地丰富和推动了整个生态的发展。
最核心的衍生方案就是 StarRocks,它和 Doris 同根同源,可以看作是最主要的“分支”。此外,还有一些基于 Doris/StarRocks 的商业化产品。
下面我们来详细梳理一下:
一、核心衍生方案:StarRocks
StarRocks(原名 Palo,后来改名为 Doris,然后从这个分支出来叫 StarRocks)是 Apache Doris 最著名、也是最强大的一个衍生分支。
1. 渊源与关系
-
同根同源:StarRocks 和 Apache Doris 都起源于百度开源的 Palo 项目。
-
分支发展:在 Palo 捐给 Apache 基金会并成为 Apache Doris 后,原核心开发团队的大部分成员成立了公司(鼎石科技),并基于某个版本的 Doris 代码库进行了独立、激进的发展和迭代,这个新的分支就是 StarRocks。
-
现状:目前,StarRocks 和 Apache Doris 是两个独立的开源项目,各自发展,但在功能和理念上仍有诸多相似之处,可以看作是“兄弟”项目。
2. StarRocks 的核心特点与差异化优势(相较于 Apache Doris)
StarRocks 的目标是打造一个更极致性能的新一代极速全场景MPP数据库。它的许多创新特性也反过来影响了 Doris 社区的发展。
-
更先进的查询优化器:
-
CBO(成本优化器):StarRocks 很早就自研了全新的、基于 Cascades 框架的CBO,对复杂查询(尤其是多表关联)的优化能力非常强。
-
Apache Doris 在较新的版本(如 1.2.0 之后)也推出了自研的全新 CBO,两者在这一领域的差距正在缩小。
-
-
原生向量化执行引擎:
-
StarRocks 从设计之初就全面采用了向量化执行引擎,并将其作为默认配置。
-
Apache Doris 的向量化引擎在较晚的版本中才逐步完善并默认开启。
-
-
数据湖分析能力:
-
StarRocks 在很早就大力投入了对数据湖分析的支持,可以高效地直接查询 Apache Hive、Iceberg、Hudi、Delta Lake 以及 MySQL、Elasticsearch 等外部数据源,其性能表现非常出色。
-
Apache Doris 也具备类似的能力,但 StarRocks 在这一领域投入更早,生态集成和性能优化在部分场景下可能更成熟。
-
-
物化视图:
-
StarRocks 提供了更强大和智能的异步物化视图,可以跨表构建,并支持查询的自动路由(查询时可以自动匹配到最优的物化视图,无需修改SQL)。
-
Apache Doris 的物化视图(Rollup)主要是同步的、基于单个表的,在灵活性和自动化程度上相对较弱,但其在单表预聚合场景下非常高效。
-
-
更丰富的表类型:
-
除了 Doris 支持的明细、聚合、更新模型外,StarRocks 还推出了 主键模型,通过部分列更新、内存索引+磁盘存储的方式,更好地支持实时更新和点查询场景。
-
3. 如何选择 StarRocks 还是 Apache Doris?
-
选择 StarRocks 的情况:
-
业务场景非常复杂,有大量的多表关联查询。
-
非常看重数据湖分析能力,希望一个引擎直接查询湖和仓的数据。
-
需要更强大和灵活的物化视图来加速查询。
-
对极致的查询性能有最高要求,愿意尝试更激进的技术迭代。
-
-
选择 Apache Doris 的情况:
-
更看重社区的稳定性和可预测性。作为 Apache 顶级项目,其发布流程和社区治理非常规范。
-
业务场景以单表聚合分析和实时报表为主,Doris 的 Rollup 模型在此场景下简单高效。
-
技术栈偏向于与 Hadoop 生态 紧密集成。
-
对 Apache 品牌和其背后的开源治理模式有偏好。
-
二、其他衍生方案与商业产品
1. SelectDB
-
是什么:SelectDB 是一家商业化公司,其核心产品 SelectDB Cloud 是一个基于 Apache Doris 构建的云原生实时数据仓库服务。
-
与 Doris 的关系:SelectDB 由 Apache Doris 项目的核心贡献者和初创成员创立,是 Doris 社区的积极维护者和推动者。你可以把它理解为 Doris 的 “官方”商业版和云服务版。
-
核心价值:
-
全托管服务:用户无需关心集群部署、运维、扩缩容等问题。
-
云原生架构:充分利用云上弹性、存储计算分离等优势,降低成本。
-
企业级功能:提供更好的监控、安全、多租户等企业级特性。
-
专业支持:提供商业技术支持。
-
类比:SelectDB 与 Apache Doris 的关系,类似于 Confluent 与 Apache Kafka,或者 Databricks 与 Apache Spark 的关系。
2. 其他商业发行版
一些云厂商或大数据公司也会基于 Apache Doris 或 StarRocks 制作自己的商业发行版或集成方案,通常会包含一些定制化的功能、管理控制台和专业技术支持。
总结与对比
为了更直观,我们可以用一个表格来总结:
特性/项目 | Apache Doris | StarRocks | SelectDB |
---|---|---|---|
项目性质 | Apache 开源社区项目 | 独立开源项目 | 商业公司 & 云服务 |
核心定位 | 高性能、易用的实时数据仓库 | 极速全场景 MPP 数据库 | 基于 Doris 的云原生实时数据仓库 |
技术渊源 | 源于百度 Palo,Apache 项目 | 源于早期 Doris 分支,独立发展 | 基于 Apache Doris 构建 |
主要优势 | 架构简单、运维友好、社区稳定、Apache生态 | 查询优化器强大、向量化引擎成熟、数据湖分析能力强 | 全托管、云原生、企业级功能、专业支持 |
适用场景 | 实时报表、即席查询、统一数仓 | 复杂即席查询、数据湖分析、高性能OLAP | 希望免运维、快速上云、需要企业级服务的企业 |
选择考量 | 社区、稳定性、Hadoop生态集成 | 极致性能、复杂查询、数据湖分析 | 云服务、免运维、商业支持 |
结论:
-
StarRocks 是 Apache Doris 最强有力的“竞争者”和“同行者”,两者在技术上相互促进,共同推动了 MPP OLAP 数据库领域的进步。
-
SelectDB 是 Apache Doris 在商业化云服务道路上的重要延伸,为不想自行运维集群的用户提供了绝佳选择。
-
对于技术选型而言:
-
如果您的团队技术实力强,希望深度掌控并参与社区,Apache Doris 是一个稳健的选择。
-
如果您的业务对复杂查询性能和数据湖分析有极高要求,StarRocks 值得优先评估。
-
如果您的企业希望快速在云上构建实时数据平台,且不愿投入运维成本,SelectDB Cloud 是最省心的方案。
-
建议在实际选型时,用自身的业务数据和查询场景同时对 Apache Doris 和 StarRocks 进行 PoC(概念验证)测试,以数据说话,选择最适合自己的方案。