在 Flink Standalone 集群上运行 Flink CDC从下载到跑起一个 MySQL→Doris 同步任务

1. 环境准备

  • 操作系统:任意类 Unix 环境

    • Linux / Mac OS X / Windows + Cygwin 都可以
  • JDK:按对应 Flink 版本要求准备(如 1.16+ 通常要求 JDK 8/11)

从 Flink 官网下载最新的稳定版本二进制包(例如 flink-1.18.0-bin-scala_2.12.tgz),然后解压:

bash 复制代码
tar -xzf flink-*.tgz

建议设置一个 FLINK_HOME 变量,后续使用更方便:

bash 复制代码
export FLINK_HOME=/path/flink-*

小贴士:可以把这行加到 ~/.bashrc~/.zshrc 里,长期生效。

2. 启动本地 Standalone 集群

进入 Flink 安装目录:

bash 复制代码
cd /path/flink-*

启动集群:

bash 复制代码
./bin/start-cluster.sh

这条命令会在本机启动:

  • 1 个 JobManager
  • 至少 1 个 TaskManager

使用 ps 可以看到相关进程:

bash 复制代码
ps aux | grep flink

然后打开浏览器访问:

http://localhost:8081

能看到 Flink Web Dashboard,就说明 Standalone 集群已经跑起来了。

如果需要停止集群,只需要一行命令:

bash 复制代码
./bin/stop-cluster.sh

Flink CDC 提供了一个单独打好的 tar 包,内部已经包含了:

  • 启动脚本
  • CDC 核心依赖
  • 基础配置模板

从 Flink CDC 的发布页下载 flink-cdc-*.tar.gz,例如:

bash 复制代码
tar -xzf flink-cdc-*.tar.gz

解压后会得到一个目录,比如 flink-cdc-3.0.0/,结构大致如下:

  • bin/
    包含 flink-cdc.sh 等脚本,用于提交 YAML Pipeline
  • lib/
    放 CDC 核心 JAR 以及各类 connector JAR
  • conf/
    一些配置文件(如日志等)
  • log/
    运行日志目录

你可以把这个目录理解为:一个"专门跑 CDC 的客户端工具",通过它去向 Flink Standalone 集群提交作业。

2. 拷贝 Connector JAR 到 lib 目录

默认的 flink-cdc 只带了核心依赖,要连接不同的数据库,需要手动下载相应 connector JAR,放到 lib/ 目录下。

比如本文要演示的是:

MySQL → Apache Doris 实时同步

那我们至少需要:

  • flink-connector-mysql-cdc / flink-cdc 内置的 MySQL source(具体以发行包说明为准)
  • flink-sql-connector-doris 或 Flink CDC Doris pipeline connector 对应的 JAR

操作方式大致是:

bash 复制代码
cd /path/flink-cdc-*
cp /path/to/flink-sql-connector-doris-*.jar lib/
cp /path/to/flink-connector-mysql-cdc-*.jar lib/
# 其他依赖按官方要求放到 lib/ 下

注意:

  • Release 页面上只提供稳定版本的下载链接,
  • -SNAPSHOT 之类的版本通常需要你自己从仓库对应分支打包。

三、用 YAML 配出一条 MySQL → Doris 的同步流水线

Flink CDC 3.x 开始,官方推荐用 YAML Pipeline 来描述一个 CDC 任务,配置完成后直接用 flink-cdc.sh 提交即可。

下面这一份示例 mysql-to-doris.yaml,实现的是:

把 MySQL 数据库 app_db 下所有表,

同步到 Doris(库名同名,或由 Connector 端配置决定)。

yaml 复制代码
################################################################################
# Description: Sync MySQL all tables to Doris
################################################################################
source:
  type: mysql
  hostname: localhost
  port: 3306
  username: root
  password: 123456
  tables: app_db.\.*
  server-id: 5400-5404
  server-time-zone: UTC

sink:
  type: doris
  fenodes: 127.0.0.1:8030
  username: root
  password: ""

pipeline:
  name: Sync MySQL Database to Doris
  parallelism: 2

我们简单拆一下这份配置:

1. source:MySQL CDC 源配置

  • type: mysql
    声明这是一个 MySQL 源(CDC Source)
  • hostname / port / username / password
    对应 MySQL 的连接信息
  • tables: app_db.\.*
    使用正则匹配 app_db 库下的所有表(\.* 代表"任意表名",注意 YAML 中要转义)
  • server-id: 5400-5404
    MySQL binlog 读取需要一个 client server-id,
    这里给了一个 范围,方便并行 reader 使用不同 id
  • server-time-zone: UTC
    控制时间戳字段解析的时区(避免时区错乱)

2. sink:Doris 下游配置

  • type: doris
    使用 Doris sink
  • fenodes: 127.0.0.1:8030
    Doris FE 的 HTTP 端口(通常是 8030)
  • username / password
    用于建表 / 写入的 Doris 账号

Doris 侧的具体参数(如导入模式、批次大小、表属性)

一般也通过这些配置项传入,详见官方 Doris connector 文档。

3. pipeline:任务级参数

  • name: Sync MySQL Database to Doris
    这个名字会同时出现在 Flink Web UI 的 Job Name 上
  • parallelism: 2
    Flink Job 的默认并行度,可以根据机器和数据量调整

你可以基于这个模板,自行扩展:

  • 只同步某个 schema / 某张表
  • 对不同表做路由 / 分库分表映射
  • 设置各种高级参数(比如 scan.startup.modedebezium.* 透传配置等)

确保此时:

  1. Flink Standalone 集群已启动(localhost:8081 可访问)
  2. flink-cdc 的 lib/ 里已经放好了必要的 connector JAR
  3. mysql-to-doris.yaml 已经写好,并位于 flink-cdc-* 目录下或其他路径

flink-cdc-* 目录下执行:

bash 复制代码
cd /path/flink-cdc-*
./bin/flink-cdc.sh mysql-to-doris.yaml

如果一切正常,你会看到类似的返回:

text 复制代码
Pipeline has been submitted to cluster.
Job ID: ae30f4580f1918bebf16752d4963dc54
Job Description: Sync MySQL Database to Doris

这说明:

  • Flink CDC 已经读取 YAML,解析为一个 Flink Job Graph
  • Job Graph 被提交到了你前面启动的 Standalone 集群
  • Job ID 是在 Flink 集群里的唯一标识
  • Job Description 对应我们在 pipeline 中配置的 name

打开浏览器访问:

http://localhost:8081

在 "Jobs" 页面你应该能看到一条正在运行的任务:

  • Job NameSync MySQL Database to Doris

  • Status:RUNNING

  • 拓扑图中能看到:

    • Source:MySQL CDC Source
    • (中间可能还有一些内部算子)
    • Sink:Doris Sink

点击 Job 详情,可以看到:

  • 各个算子的 吞吐量(Records/s)
  • Checkpoint 状态 & 周期
  • Task 的并行度、延迟等信息

此时如果你在 MySQL 里对 app_db 下的表做增删改,

就能在 Doris 对应的表中看到实时同步的效果------

整个链路就是一个完整的 实时 ELT / CDC 同步任务

六、一些实践小建议

最后补几条落地时常见的注意点,方便你直接往生产环境靠:

  1. Server ID 范围不要冲突

    • 如果一个 MySQL 实例上会跑多个 CDC 任务,切记 server-id 范围不能重叠。
  2. 确认 MySQL / Doris 网络互通 & 账号权限

    • MySQL 账号要具备 REPLICATION 相关权限
    • Doris 账号需要拥有目标库/表的写权限
  3. 时区统一

    • 使用 server-time-zone 显式指定,避免 DST 或多时区杂糅导致时间错乱。
  4. Checkpoint 配置

    • Standalone 模式下,建议在 Flink 集群级或作业内配置合理的 checkpoint 间隔、超时、重试次数。
  5. 资源规划

    • 如果有多个 CDC Pipeline,可以:

      • 复用同一个 Standalone 集群跑多个 Job
      • 或按业务/租户维度拆分多个集群,避免互相影响。

七、总结

这篇内容可以一句话概括为:

Flink Standalone 集群

通过 Flink CDC 独立发行包 + YAML Pipeline

快速跑起一个 MySQL → Doris 的实时同步 Job。

优势很明显:

  • 部署模式简单:一台机器就能跑完整集群;
  • 运维观感清晰:任务统一在 Web UI 中可视化;
  • 使用成本低:全程只需要写 YAML,不用写 Java/Scala 代码。
相关推荐
技术长镜头3 分钟前
别再只说“走 B+Tree”:一条 SQL 在 InnoDB 中的完整寻址过程
后端·mysql
招财小梗17 分钟前
AI矩阵获客,品牌连锁落地有啥方案?
大数据·人工智能·矩阵
黎子越34 分钟前
大模型基础名词概念
大数据
zandy101142 分钟前
主流 AI Agent搜索Skill推荐及高阶选型指南
大数据·人工智能
跨境卫士苏苏1 小时前
2026年做跨境电商,TikTok美区半托管这3个品类正在严查,第2个很多新手还在铺货
大数据·人工智能·跨境电商·营销策略
GIS数据转换器1 小时前
村镇无人机物流配送与跨域监测一体化平台
大数据·运维·人工智能·科技·无人机
知识燃料2 小时前
企业技术决策者落地 AI Agent 体系,AWS 中国峰会有哪些战略与工程内容可看?
大数据·人工智能
TDengine (老段)2 小时前
TDengine 第三方工具 — Telegraf、Kafka Connect、Flink、Spark
大数据·数据库·物联网·flink·kafka·时序数据库·tdengine
guwentian10 小时前
Git Worktree 实战:用并行多 Agent 把开发提速 N 倍
大数据·git·elasticsearch·wroktree
2503_9317124813 小时前
OpenInsight领衔:企业AI数据分析平台(Data Agent/智能问数/智能数据报告)
大数据