Apache Doris 大数据仓库全面解析

这是一个对 Apache Doris 的全面了解指南。结合其官方网站和社区知识,我将从核心概念、架构、特性、应用场景以及快速上手等方面为您进行系统性的解析,另外还补充了Doris的竞争方案。Apache Doris 是一款面向实时分析场景的现代化数据仓库。它能够对海量实时数据进行极速分析。https://doris.apache.org/

Apache Doris

一、Apache Doris 是什么?

Apache Doris 是一个高性能、实时分析型的MPP(大规模并行处理)数据库。它最初由百度开发并开源,名为 Palo,后来捐赠给 Apache 基金会并更名为 Doris。

它的主要目标是解决在线实时报表、即席查询、统一数据仓库构建等场景下的高速数据分析问题。简单来说,它就像一个专为"实时分析"而生的超级引擎,能够在大规模数据集上实现亚秒级的查询响应。

二、核心特性(为什么选择 Doris?)

  1. 极速的查询性能

    • MPP 架构:查询任务被并行分发到集群中的所有节点,充分利用集群的计算和I/O资源。

    • 列式存储:数据按列存储,在查询时只需读取相关列,极大地减少了磁盘I/O。

    • 向量化执行引擎:利用CPU的SIMD指令,一次处理一批数据,而不是一行数据,显著提高了CPU利用率。

    • 预聚合:支持创建基于"物化视图"的Rollup表,预先计算和存储聚合结果,使得查询时可以直接命中预计算好的数据,速度极快。

  2. 易于使用

    • 兼容标准SQL:支持ANSI SQL标准和MySQL协议,用户可以直接使用熟悉的MySQL客户端和BI工具(如Tableau, FineBI, Grafana)连接Doris,学习成本极低。

    • 统一的架构:Doris同时支持离线批处理和实时数据导入,无需维护两套不同的系统(如Hive + HBase)。

    • 简化运维:系统架构简单,只有 FE(前端)和 BE(后端)两种进程,部署和扩容非常方便。

  3. 实时能力

    • 支持多种实时数据导入方式,如 Kafka Routine Load、Flink Connector、MySQL Binlog Load等,可以实现数据毫秒到秒级的延迟。
  4. 丰富的生态系统

    • 可以方便地对接 Hadoop(HDFS, Hive)、Spark、Flink 等大数据组件。

    • 支持多种数据湖分析,如 Iceberg、Hudi 等外部表,可以直接查询数据湖中的数据而无需导入。

  5. 高可用性与可扩展性

    • FE 支持多副本,通过类 Paxos 的 BDB JE 协议实现元数据的高可用和一致性。

    • BE 节点可以水平扩展,增加节点即可线性提升集群的查询和存储能力。

三、架构解析

Doris 的架构非常简洁,主要由两类进程组成:

1. Frontend (FE) - 前端节点

  • 职责:负责元数据管理、客户端连接、查询解析与规划。

  • 角色

    • Leader:只有一个,负责元数据的写入和日志同步。

    • Follower:多个,参与选举,提供元数据读取服务。

    • Observer:多个,仅同步元数据,用于扩展读能力,不参与选举。

  • 对外接口:用户通过 MySQL 协议连接到 FE。

2. Backend (BE) - 后端节点

  • 职责:负责数据存储、查询执行。

  • 每个 BE 节点存储一部分数据(表的分片/分区),并执行 FE 下发的查询任务。

  • 数据采用多副本机制,保证高可用。

工作流程简述

  1. 用户通过 MySQL 客户端发送 SQL 到任意一个 FE。

  2. FE 对 SQL 进行解析、语法分析、查询优化,生成分布式执行计划。

  3. FE 将执行计划分发给相关的 BE 节点。

  4. 各个 BE 节点并行执行,处理本地存储的数据。

  5. FE 收集各个 BE 的中间结果,进行最终聚合。

  6. 将最终结果返回给客户端。

四、典型应用场景

  1. 实时报表与 OLAP 分析

    • 为业务提供实时运营看板、多维分析报表。例如:实时销售大盘、用户行为分析。
  2. 统一数据仓库构建

    • 作为一个中心化的数据仓库,承接来自各业务线(日志、数据库、埋点等)的数据,为上层提供统一的数据查询服务。
  3. 即席查询

    • 数据工程师和分析师可以进行灵活、快速的探索性查询,无需等待长时间的 ETL 过程。
  4. 日志存储与分析

    • 替代传统的 ELK 方案,处理海量日志数据,提供更强大的聚合查询能力和更低的存储成本。
  5. 高维向量分析

    • 最新版本支持了向量索引,可以用于 AI 场景下的快速相似性搜索,如图片、音频检索。

五、数据模型(表类型)

Doris 提供了三种数据模型,以满足不同场景的需求:

  1. Duplicate Key Model(明细模型)

    • 存储最原始的数据,不做任何聚合。适用于需要保留所有明细数据的场景,如日志分析、行为流水。
  2. Aggregate Key Model(聚合模型)

    • 定义 Key 列和 Value 列。相同 Key 列的数据行,其 Value 列会在导入时进行预聚合(如 SUM, MAX, MIN)。适用于报表汇总,可以极大提升查询性能。
  3. Unique Key Model(更新模型)

    • 定义唯一 Key。对于相同 Key 的数据,后导入的数据会覆盖先导入的数据。适用于实时同步变化的业务数据,如订单状态表。
  4. (补充)Duplicate Key Model with Sequence Column

    • 在明细模型基础上,增加了版本列,用于保证数据更新的顺序。

六、快速上手

以下是一个极简的从零开始使用 Doris 的流程:

  1. 部署

    • 参考官网文档,可以通过下载二进制包或使用 Docker 进行单机或集群部署。
  2. 连接

    bash

    复制代码
    # 使用 MySQL 客户端连接,默认端口 9030
    mysql -h FE_HOST -P 9030 -u root
  3. 创建数据库

    sql

    复制代码
    CREATE DATABASE demo;
    USE demo;
  4. 创建表(以聚合模型为例)

    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 个桶中。

  5. 导入数据

    sql

    复制代码
    -- 使用 Stream Load 方式插入数据
    INSERT INTO sales VALUES 
    (1, ‘2023-10-01’, ‘Beijing’, 100),
    (2, ‘2023-10-01’, ‘Shanghai’, 200);
  6. 查询

    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生态集成 极致性能、复杂查询、数据湖分析 云服务、免运维、商业支持

结论

  1. StarRocks 是 Apache Doris 最强有力的"竞争者"和"同行者",两者在技术上相互促进,共同推动了 MPP OLAP 数据库领域的进步。

  2. SelectDB 是 Apache Doris 在商业化云服务道路上的重要延伸,为不想自行运维集群的用户提供了绝佳选择。

  3. 对于技术选型而言:

    • 如果您的团队技术实力强,希望深度掌控并参与社区,Apache Doris 是一个稳健的选择。

    • 如果您的业务对复杂查询性能和数据湖分析有极高要求,StarRocks 值得优先评估。

    • 如果您的企业希望快速在云上构建实时数据平台,且不愿投入运维成本,SelectDB Cloud 是最省心的方案。

建议在实际选型时,用自身的业务数据和查询场景同时对 Apache Doris 和 StarRocks 进行 PoC(概念验证)测试,以数据说话,选择最适合自己的方案。

相关推荐
isNotNullX8 小时前
ETL详解:从核心流程到典型应用场景
大数据·数据仓库·人工智能·架构·etl
鸠摩智首席音效师9 小时前
如何在 Apache 中启用 HSTS 以增强网络安全性 ?
网络·apache
boonya16 小时前
Apache Doris 入门与技术替代方案
apache·doris
一休哥助手18 小时前
Apache Flink:流处理革命的领导者与新一代大数据计算引擎
大数据·flink·apache
SelectDB技术团队18 小时前
岚图汽车 x Apache Doris : 海量车联网数据实时分析实践
数据仓库·人工智能·数据分析·汽车·apache
义薄云天us21 小时前
Apache NuttX 入门指南
apache·rtos·nuttx
从零开始学习人工智能1 天前
Apache Superset 企业级实战:从部署到优化的全链路指南
apache
new_daimond2 天前
Apache Shiro 技术详解
java·apache