Python学习【179】:从零构建 Apache Doris 单节点集群:FE与BE核心概念及 Docker 实战指南
Apache Doris 是一款基于 MPP 架构的高性能、实时的分析型数据库。它以极致的查询性能和易用性著称,广泛应用于实时数据分析、即席查询等场景。对于初学者或本地开发测试而言,快速搭建一个单节点集群是了解其内部运行机制的最佳方式。本文将带你深入理解 Doris 的核心组件(FE 与 BE),并基于 Docker 环境手把手带你完成集群的配置、组装与基础使用。在 Doris 的架构中,没有繁杂的依赖组件(如 ZooKeeper、HDFS 等),整个系统主要由两类进程组成:FE(Frontend) 和 BE(Backend)。它们分工明确,紧密配合。- FE 是 Doris 的控制节点,主要负责元数据管理和查询解析。
- 元数据存储:记录数据库、表结构、分区信息以及集群节点的状态。
- 查询解析与调度:接收用户的 SQL 请求,进行语法解析、生成执行计划,并将计算任务下发给 BE 节点。
- 高可用:在多节点生产环境中,FE 支持多副本(Follower/Observer)以实现高可用。
2.BE (Backend):集群的“四肢与肌肉”- BE 是 Doris 的计算与存储节点,主要负责数据的物理存储和SQL 的实际计算。
- 数据存储:数据按分片(Tablet)的形式存储在 BE 的本地磁盘上。
- 计算执行:接收 FE 下发的执行计划,利用 MPP(大规模并行处理)架构进行分布式计算,并将结果汇总返回给 FE。
- 水平扩展:BE 节点可以随时动态扩容,数据会自动进行重平衡。
如果把 Doris 比作一家餐厅,FE 就是大堂经理兼主厨(负责接单、看菜谱、分配任务),而 BE 就是后厨的炒菜师傅(负责真正切菜、炒菜、出餐)。在 Docker 环境下部署 Doris,最便捷的方式是使用 Docker Compose。我们需要为 FE 和 BE 分别暴露关键端口。- 8030:HTTP 端口(用于访问 Doris Web UI 管理界面)。
- 9030:MySQL 协议端口(用于客户端连接和执行 SQL)。
- 9010:EditLog 端口(FE 节点间元数据同步)。
- 8040:HTTP 端口(用于查看 BE 状态及 Stream Load 数据导入)。
- 9050:Heartbeat 端口(核心:FE 通过此端口与 BE 保持心跳通信)。
配置好 docker-compose.yml 后,在终端执行启动命令:等待约 10-20 秒,让 FE 和 BE 进程在容器内完全初始化。在单节点 Docker 环境中,FE 和 BE 启动后往往不会自动“认识”对方,需要我们手动建立连接(这也是新手最容易踩坑的地方)。- 连接 FE 节点
使用 MySQL 客户端(Doris 高度兼容 MySQL 协议)连接到 FE 的 9030 端口:
- 手动添加 BE 节点
在 MySQL 命令行中,执行以下 SQL 将 BE 节点注册到集群中(请替换为实际的 BE IP 和心跳端口 9050):
注册后,FE 和 BE 建立心跳需要几秒钟。执行以下命令查看 BE 状态:- 建库与建表
⚠️ 避坑指南:Doris 默认的数据副本数(replication_num)是 3。在单节点测试环境中,我们只有 1 个 BE 节点,因此必须在建表时强制指定副本数为 1,否则表会一直处于创建失败或不可用的状态。
Doris 支持标准的 INSERT 语法,也支持极速的 Stream Load。这里我们用标准 SQL 进行测试:如果能顺利查出 Alice 和 Bob 的成绩,恭喜你,Doris 已经完全可以为你工作了!在日常使用中,掌握以下两条核心命令,足以应对 90% 的集群健康状态排查:重点关注:Alive 是否为 true,ErrMsg 是否有报错,UsedPct 磁盘使用率是否过高。重点关注:Alive 是否为 true,IsMaster 是否为 true(单节点下必须为主)。通过本文,我们理清了 Doris 中 FE(大脑/控制) 与 BE(四肢/计算存储) 的核心概念,并成功在 Docker 环境下完成了一个单节点集群的搭建。真实情况是,以上搭建工作我整整折腾了将近一天的时间。里面有很多坑需要去解决,即便有了大模型AI的帮助,也是很复杂。但一旦掌握了它的原理,也就没那么难了。让我们保持学习的热情,2026年一马当先、马到成功!