05、Doris部署与数据同步指南
Apache Doris 单节点部署 + Flink CDC 实时同步 MySQL 完整指南
一、概述
本文档记录在 Linux 单机环境下部署 Apache Doris 4.0.5,并通过 Flink CDC 实现 MySQL 到 Doris 的全量 + 增量实时同步的完整流程。
适用场景
- 业务系统使用 MySQL(OLTP),需要将数据实时同步到分析型数据库做复杂统计报表
- 数据量大(百万级以上)、需要高速聚合查询(COUNT/SUM/GROUP BY/多表 JOIN)
- 希望保留 MySQL 作为主写库,Doris 作为分析从库
数据流向
MySQL (源库) ↓ binlog Flink CDC (读取并解析 binlog) ↓ Flink Doris Connector (写入) ↓ Apache Doris (OLAP 分析库) ↓ Java 业务系统 (查询)二、架构说明
Doris 角色
| 组件 | 职责 | 数量 |
|---|---|---|
| FE (Frontend) | 元数据管理、SQL 解析、查询规划、用户认证 | 单节点 1 个 |
| BE (Backend) | 数据存储(列存)、查询执行、计算引擎 | 单节点 1 个 |
Flink 角色
| 组件 | 职责 |
|---|---|
| JobManager | 任务调度、Checkpoint 协调 |
| TaskManager | 实际执行同步任务 |
启停顺序(重要)
启动:FE → BE → Flink
FE 是元数据管理者(master),BE 启动时要向 FE 注册心跳。如果 BE 先启动,会一直重试连 FE,直到 FE 就绪(不会失败,但日志会刷大量 warn)。
关闭:Flink → BE → FE
先停 BE,让正在写入的 tablet 落盘完成,再停 FE,避免「FE 还在但找不到 BE」的中间态。
三、软硬件要求
硬件配置
| 配置项 | 测试/开发 | 小型生产(推荐) | 中大型生产 |
|---|---|---|---|
| CPU | 4核 | 8核 | 16核+ |
| 内存 | 16G(紧张) | 32G | 64G+ |
| 数据盘 | HDD 200G | SSD 500G | SSD 2TB+ |
| 网络 | 100Mbps | 1Gbps | 1Gbps+ |
⚠️16G 内存只能勉强跑测试,生产至少 32G 起步。
内存分配参考
16G 服务器(最低可用):
| 组件 | 内存 |
|---|---|
| Doris FE | 2G |
| Doris BE | 6G(mem_limit) |
| Flink TaskManager | 4G |
| Flink JobManager | 1G |
| 业务应用 | ~2G |
| 系统 + 缓存 | ~1G |
64G 服务器(推荐生产):
| 组件 | 内存 |
|---|---|
| Doris FE | 8G |
| Doris BE | 32G |
| Flink TaskManager | 8G |
| Flink JobManager | 2G |
| 业务应用 | 4G |
| 系统 + 缓存 | 10G |
软件版本(已验证可用)
| 软件 | 版本 | 备注 |
|---|---|---|
| Apache Doris | 4.0.5 | 单节点 FE + BE |
| JDK | 17 (Temurin) | Doris 4.x 强制要求 JDK 17 |
| Apache Flink | 1.19.2 | mysql-cdc 3.3.0 要求 1.19+ |
| flink-sql-connector-mysql-cdc | 3.3.0 | MySQL CDC 连接器 |
| flink-doris-connector | 1.19-25.0.0 | Doris 4.x 必须用此版本 |
| mysql-connector-j | 8.0.33 | MySQL JDBC 驱动 |
| 操作系统 | CentOS 7 / RHEL 7 | 需支持 AVX2 指令集 |
| MySQL(源库) | 5.7 / 8.0 | 必须开启 binlog (ROW 格式) |
⚠️版本组合敏感:以上版本组合是经过验证的稳定配合,不要随意降低 Flink 或 mysql-cdc 版本。低版本组合(如 mysql-cdc 3.1/3.2 + doris-connector 24.0.0)有 NullPointerException Bug。
四、端口说明
Doris 端口
| 端口 | 角色 | 用途 | 是否需要外网 |
|---|---|---|---|
| 8030 | FE | HTTP(Web UI、REST API、Stream Load 入口) | 管理需要 |
| 9030 | FE | MySQL 协议(客户端连接,类似 MySQL 3306) | 业务需要 |
| 9020 | FE | RPC(FE 间通信,单节点用不到) | 内网 |
| 9010 | FE | 编辑日志同步(FE 间通信) | 内网 |
| 8040 | BE | HTTP(BE Web UI、Stream Load 实际写入) | 管理需要 |
| 9050 | BE | RPC(FE 与 BE 通信) | 内网 |
| 9060 | BE | BRPC(BE 间通信) | 内网 |
| 8060 | BE | Heartbeat(心跳) | 内网 |
Flink 端口
| 端口 | 用途 |
|---|---|
| 8081 | Flink Web UI |
| 6123 | JobManager RPC |
| 6121-6122 | TaskManager 数据交换 |
必须开放的端口
# 防火墙开放(外部访问)firewall-cmd--permanent--add-port=8030/tcp# Doris FE Web UIfirewall-cmd--permanent--add-port=9030/tcp# Doris MySQL 协议firewall-cmd--permanent--add-port=8040/tcp# Doris BE Web UIfirewall-cmd--permanent--add-port=8081/tcp# Flink Web UIfirewall-cmd--reload五、部署步骤
第一阶段:环境准备
1. 系统配置
# 关闭 swapswapoff-ased-i'/swap/d'/etc/fstab# 关闭防火墙(或按需开放端口)systemctl stop firewalld systemctl disable firewalld# 设置内核参数(BE 必需)sysctl-wvm.max_map_count=2000000echo"vm.max_map_count=2000000">>/etc/sysctl.confsysctl-pBE 处理大量数据时会创建很多内存映射(mmap),默认值 65530 远远不够,Doris 要求至少 2000000。
2. 安装 JDK 17(CentOS/RHEL)
CentOS 7 默认源没有 JDK 17,使用 Adoptium 源安装:
cat>/etc/yum.repos.d/adoptium.repo<<'EOF' [Adoptium] name=Adoptium baseurl=https://packages.adoptium.net/artifactory/rpm/centos/7/x86_64 enabled=1 gpgcheck=1 gpgkey=https://packages.adoptium.net/artifactory/api/gpg/key/public EOFyuminstall-ytemurin-17-jdk如果系统已有多个 Java 版本,切换默认:
alternatives--configjava# 选择 java-17 对应的编号# 验证java-version# 应显示 openjdk version "17.x.x"设置环境变量(在/etc/profile末尾追加):
exportJAVA_HOME=/usr/lib/jvm/java-17-temurin-jdkexportPATH=$JAVA_HOME/bin:$PATH执行source /etc/profile生效。
3. 检查 CPU 是否支持 AVX2
grepavx2 /proc/cpuinfo|head-1# 有输出说明支持,Doris 4.x 需要 AVX2如果不支持 AVX2,需要下载 Doris 的 noavx2 版本。
第二阶段:安装 Doris
1. 下载并解压
从 Doris 官网 下载 4.0.5 版本,解压到/opt/doris/:
tar-xzfapache-doris-4.0.5-bin-x64.tar.gz-C/opt/doris/cd/opt/doris/apache-doris-4.0.5-bin-x64