Flink CDC 实战教程:MySQL 到 StarRocks 实时数据同步
flink-cdc 项目地址: https://gitcode.com/gh_mirrors/fl/flink-cdc
前言
在现代数据架构中,实时数据同步已成为企业数据集成的重要需求。本文将详细介绍如何使用 Flink CDC Connectors 实现 MySQL 数据库到 StarRocks 的实时数据同步。通过本教程,您将掌握如何配置完整的实时数据管道,包括全库同步、Schema 变更自动同步以及分库分表合并等高级功能。
环境准备
基础环境要求
- 操作系统:Linux 或 MacOS
- Docker 环境:用于快速部署所需服务
- Java 环境:建议 JDK 8 或以上版本
部署 Flink 集群
-
下载 Flink 1.20.1 版本并解压
-
修改配置文件
conf/flink-conf.yaml
,增加以下配置:execution.checkpointing.interval: 3000
这个配置表示每3秒执行一次检查点,确保数据一致性
-
启动 Flink 集群:
./bin/start-cluster.sh
启动成功后,可通过浏览器访问 http://localhost:8081
查看 Flink Web UI。
容器化服务部署
使用 Docker Compose 快速部署 MySQL 和 StarRocks 服务:
version: '2.1'
services:
StarRocks:
image: starrocks/allin1-ubuntu:3.2.6
ports:
- "8080:8080"
- "9030:9030"
MySQL:
image: debezium/example-mysql:1.1
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_USER=mysqluser
- MYSQL_PASSWORD=mysqlpw
启动命令:
docker-compose up -d
初始化测试数据
进入 MySQL 容器并创建测试数据:
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);
CREATE TABLE `shipments` (
`id` INT NOT NULL,
`city` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `shipments` VALUES (1, 'beijing'), (2, 'xian');
CREATE TABLE `products` (
`id` INT NOT NULL,
`product` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `products` VALUES (1, 'Beer'), (2, 'Cap'), (3, 'Peanut');
配置 Flink CDC 任务
准备工作
- 下载 Flink CDC 二进制包并解压
- 将以下 Connector 包放入
lib
目录:- MySQL CDC Connector
- StarRocks CDC Connector
- MySQL JDBC Driver
任务配置文件
创建 mysql-to-starrocks.yaml
配置文件:
source:
type: mysql
hostname: localhost
port: 3306
username: root
password: 123456
tables: app_db.\.*
server-id: 5400-5404
server-time-zone: UTC
sink:
type: starrocks
jdbc-url: jdbc:mysql://127.0.0.1:9030
load-url: 127.0.0.1:8080
username: root
password: ""
table.create.properties.replication_num: 1
pipeline:
name: Sync MySQL Database to StarRocks
parallelism: 2
关键配置说明:
tables: app_db.\.*
:使用正则表达式匹配 app_db 下的所有表table.create.properties.replication_num: 1
:指定 StarRocks 表的副本数为1(适合测试环境)
提交任务
执行以下命令提交任务:
bash bin/flink-cdc.sh mysql-to-starrocks.yaml
成功提交后,可以在 Flink Web UI 看到名为 "Sync MySQL Database to StarRocks" 的任务正在运行。
高级功能演示
实时 Schema 变更同步
-
添加新列:
ALTER TABLE app_db.orders ADD amount varchar(100) NULL;
-
修改数据:
UPDATE app_db.orders SET price=100.00, amount=100.00 WHERE id=1;
-
删除数据:
DELETE FROM app_db.orders WHERE id=2;
所有变更都会实时同步到 StarRocks 中。
路由功能配置
通过路由配置可以实现表名映射和分库分表合并:
route:
- source-table: app_db.orders
sink-table: ods_db.ods_orders
- source-table: app_db.shipments
sink-table: ods_db.ods_shipments
- source-table: app_db.products
sink-table: ods_db.ods_products
或者合并多个分表:
route:
- source-table: app_db.order\.*
sink-table: ods_db.ods_orders
性能优化建议
- 并行度调整:根据数据量调整
parallelism
参数 - 检查点间隔:生产环境建议设置为5-10秒
- 资源分配:根据数据量合理分配 TaskManager 资源
- 批量提交:适当调整 StarRocks Sink 的批量提交参数
常见问题排查
-
连接问题:
- 检查 MySQL binlog 是否开启
- 确认 StarRocks 服务可用
-
同步延迟:
- 增加并行度
- 检查网络带宽
-
Schema 变更失败:
- 确认 StarRocks 版本支持对应的数据类型变更
- 检查权限设置
环境清理
-
停止容器服务:
docker-compose down
-
停止 Flink 集群:
./bin/stop-cluster.sh
总结
通过本教程,我们完成了从 MySQL 到 StarRocks 的实时数据同步管道搭建。Flink CDC Connectors 提供了简单高效的解决方案,支持:
- 全库表实时同步
- Schema 变更自动同步
- 分库分表合并
- 数据路由转换
这些功能使得 Flink CDC 成为构建实时数据仓库和数据分析平台的理想选择。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考