使用Apache Flink CDC实现MySQL到Doris的实时数据同步
概述
本文将详细介绍如何使用Apache Flink CDC(变更数据捕获)工具实现MySQL数据库到Doris的实时数据同步。Flink CDC是一个基于Apache Flink构建的变更数据捕获框架,能够高效捕获数据库变更并实时同步到目标系统。
环境准备
基础环境要求
- 操作系统:Linux或MacOS
- 已安装Docker环境
- 网络通畅,能够下载所需组件
Flink集群部署
- 下载并解压Flink 1.18.0版本
- 配置Flink检查点间隔为3秒(在flink-conf.yaml中添加):
execution.checkpointing.interval: 3000
- 启动Flink集群:
./bin/start-cluster.sh
Docker容器准备
使用docker-compose.yml文件定义并启动以下服务:
- MySQL容器:包含示例数据库app_db
- Doris容器:作为数据同步目标
启动命令:
docker-compose up -d
数据初始化
MySQL数据准备
- 创建app_db数据库
- 创建orders、products、shipments三张表
- 插入初始测试数据
示例SQL:
CREATE DATABASE app_db;
USE app_db;
CREATE TABLE `orders` (
`id` INT NOT NULL,
`price` DECIMAL(10,2) NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `orders` VALUES (1, 4.00), (2, 100.00);
Doris数据库准备
- 通过Doris Web UI(http://localhost:8030/)创建app_db数据库
- 注意:Doris连接器目前不支持自动创建数据库,需要预先创建
Flink CDC任务配置
组件下载与配置
- 下载Flink CDC 3.1.0二进制包并解压
- 下载并放置以下连接器到lib目录:
- MySQL pipeline connector
- Doris pipeline connector
- MySQL Connector Java驱动
任务配置文件
创建mysql-to-doris.yaml配置文件,关键配置说明:
source:
type: mysql
hostname: localhost
port: 3306
username: root
password: 123456
tables: app_db.\.* # 使用正则匹配同步所有表
server-id: 5400-5404
sink:
type: doris
fenodes: 127.0.0.1:8030
username: root
table.create.properties.replication_num: 1 # 单节点部署设置为1
pipeline:
name: Sync MySQL Database to Doris
parallelism: 2
任务提交与验证
提交任务命令:
bash bin/flink-cdc.sh mysql-to-doris.yaml
验证步骤:
- 在Flink Web UI查看任务状态
- 在Doris Web UI验证数据同步情况
高级功能演示
实时同步验证
- 在MySQL中执行数据变更操作:
- 插入新记录
- 添加新列
- 更新记录
- 删除记录
- 实时观察Doris中对应表的变化
路由功能配置
通过route配置实现表名映射和分库分表合并:
route:
- source-table: app_db.orders
sink-table: ods_db.ods_orders
- source-table: app_db.order\.*
sink-table: ods_db.ods_orders # 合并多个分表
注意事项
- Doris内存映射配置要求:
sysctl -w vm.max_map_count=2000000
- 表结构变更同步需要确保Doris端兼容
- 分表合并时需注意主键冲突问题
环境清理
- 停止Docker容器:
docker-compose down
- 停止Flink集群:
./bin/stop-cluster.sh
总结
本文详细介绍了使用Apache Flink CDC实现MySQL到Doris实时数据同步的全过程。通过这种方案,企业可以构建高效、实时的数据管道,满足数据分析、报表等场景对实时数据的需求。Flink CDC提供的全量+增量同步、schema变更同步、分表合并等功能,大大简化了传统ETL流程的复杂度。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考