跳到主要内容

Apache Doris 与 StarRocks

问题

Apache Doris 和 StarRocks 是什么?它们和 ClickHouse 有什么区别?

答案

概述

Apache Doris(原百度 Palo)和 StarRocks(原 DorisDB)都是 MPP 架构的实时分析数据库,以简单运维和高性能分析著称。

历史关系

StarRocks 最初 fork 自 Doris,后独立发展。两者架构相似但实现细节和功能侧重有所不同。

架构对比

组件职责
FE(Frontend)SQL 解析、查询规划、元数据管理
BE(Backend)数据存储、查询执行

数据模型

模型适用场景说明
明细模型原始日志、事件流保留所有明细数据
聚合模型预聚合指标导入时自动聚合(SUM/MAX/MIN)
主键模型实时更新支持 Upsert,替换旧数据
-- 主键模型:支持实时更新
CREATE TABLE user_profile (
user_id BIGINT,
user_name VARCHAR(100),
city VARCHAR(50),
last_active DATETIME
)
PRIMARY KEY (user_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 16;

-- 聚合模型:导入时自动聚合
CREATE TABLE daily_metrics (
dt DATE,
channel VARCHAR(50),
pv BIGINT SUM, -- 自动求和
uv BITMAP BITMAP_UNION -- Bitmap 去重
)
AGGREGATE KEY (dt, channel)
DISTRIBUTED BY HASH(dt) BUCKETS 8;

Doris vs StarRocks

维度Apache DorisStarRocks
开源协议Apache 2.0Elastic License 2.0(StarRocks 3.x)
社区Apache 基金会独立商业公司
存算分离3.0 开始支持较早支持
物化视图基础支持更丰富(异步刷新)
数据湖分析Multi-Catalog外表 + Catalog
运维难度⭐ 低⭐ 低
兼容性MySQL 协议MySQL 协议

核心优势

为什么选择 Doris/StarRocks
  1. 极简运维:只有 FE + BE 两类节点,不依赖 HDFS/ZooKeeper
  2. MySQL 协议兼容:现有 BI 工具、MySQL 客户端直接连接
  3. 实时导入:支持 Kafka 实时写入、Stream Load
  4. 物化视图:自动加速高频查询

数据导入方式

-- Stream Load(HTTP 推送,最常用)
curl --location-trusted \
-u user:password \
-H "format: json" \
-T data.json \
http://fe_host:8030/api/db/table/_stream_load

-- Routine Load(Kafka 持续消费)
CREATE ROUTINE LOAD db.job_name ON table_name
COLUMNS(user_id, event_name, event_time)
FROM KAFKA (
"kafka_broker_list" = "broker1:9092",
"kafka_topic" = "events"
);

-- 典型查询(兼容 MySQL 语法)
SELECT
DATE_FORMAT(event_time, '%Y-%m-%d') AS dt,
COUNT(DISTINCT user_id) AS uv,
COUNT(*) AS pv
FROM events
WHERE event_time >= '2024-01-01'
GROUP BY dt
ORDER BY dt;

常见面试问题

Q1: Doris/StarRocks 和 ClickHouse 怎么选?

答案

场景推荐
运维能力有限Doris/StarRocks
极致单表聚合性能ClickHouse
需要 MySQL 兼容Doris/StarRocks
需要实时更新Doris/StarRocks(主键模型)
复杂 JOIN 查询Doris/StarRocks(MPP 更优)

Q2: 如何保证实时数据导入的稳定性?

答案

  • 使用 Routine Load 对接 Kafka,自动重试
  • 监控 FE 任务状态,设置告警
  • 控制批次大小,避免 BE 内存溢出
  • 设置合理的 max_filter_ratio(允许部分脏数据跳过)

Q3: 什么是物化视图加速?

答案: 物化视图将高频查询的聚合结果预计算并持久化存储,查询时自动命中物化视图而非原始表,大幅提升查询速度。详见物化视图


相关链接