Flink CDC 实战教程:MySQL 到 StarRocks 实时数据同步

Flink CDC 实战教程:MySQL 到 StarRocks 实时数据同步

flink-cdc flink-cdc 项目地址: https://gitcode.com/gh_mirrors/fl/flink-cdc

前言

在现代数据架构中,实时数据同步已成为企业数据集成的重要需求。本文将详细介绍如何使用 Flink CDC Connectors 实现 MySQL 数据库到 StarRocks 的实时数据同步。通过本教程,您将掌握如何配置完整的实时数据管道,包括全库同步、Schema 变更自动同步以及分库分表合并等高级功能。

环境准备

基础环境要求

  1. 操作系统:Linux 或 MacOS
  2. Docker 环境:用于快速部署所需服务
  3. Java 环境:建议 JDK 8 或以上版本

部署 Flink 集群

  1. 下载 Flink 1.20.1 版本并解压

  2. 修改配置文件 conf/flink-conf.yaml,增加以下配置:

    execution.checkpointing.interval: 3000
    

    这个配置表示每3秒执行一次检查点,确保数据一致性

  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 任务

准备工作

  1. 下载 Flink CDC 二进制包并解压
  2. 将以下 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 变更同步

  1. 添加新列:

    ALTER TABLE app_db.orders ADD amount varchar(100) NULL;
    
  2. 修改数据:

    UPDATE app_db.orders SET price=100.00, amount=100.00 WHERE id=1;
    
  3. 删除数据:

    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

性能优化建议

  1. 并行度调整:根据数据量调整 parallelism 参数
  2. 检查点间隔:生产环境建议设置为5-10秒
  3. 资源分配:根据数据量合理分配 TaskManager 资源
  4. 批量提交:适当调整 StarRocks Sink 的批量提交参数

常见问题排查

  1. 连接问题

    • 检查 MySQL binlog 是否开启
    • 确认 StarRocks 服务可用
  2. 同步延迟

    • 增加并行度
    • 检查网络带宽
  3. Schema 变更失败

    • 确认 StarRocks 版本支持对应的数据类型变更
    • 检查权限设置

环境清理

  1. 停止容器服务:

    docker-compose down
    
  2. 停止 Flink 集群:

    ./bin/stop-cluster.sh
    

总结

通过本教程,我们完成了从 MySQL 到 StarRocks 的实时数据同步管道搭建。Flink CDC Connectors 提供了简单高效的解决方案,支持:

  • 全库表实时同步
  • Schema 变更自动同步
  • 分库分表合并
  • 数据路由转换

这些功能使得 Flink CDC 成为构建实时数据仓库和数据分析平台的理想选择。

flink-cdc flink-cdc 项目地址: https://gitcode.com/gh_mirrors/fl/flink-cdc

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

施谨贞Des

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值