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

ModelEngine·创作计划征文活动 10w+人浏览 1.5k人参与

一、Flink Standalone 模式快速上手

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),然后解压:

tar -xzf flink-*.tgz

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

export FLINK_HOME=/path/flink-*

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

2. 启动本地 Standalone 集群

进入 Flink 安装目录:

cd /path/flink-*

启动集群:

./bin/start-cluster.sh

这条命令会在本机启动:

  • 1 个 JobManager
  • 至少 1 个 TaskManager

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

ps aux | grep flink

然后打开浏览器访问:

http://localhost:8081

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

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

./bin/stop-cluster.sh

二、安装 Flink CDC 独立包

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

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

1. 解压 flink-cdc 发行包

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

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

操作方式大致是:

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 端配置决定)。

################################################################################
# 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.* 透传配置等)

四、向 Standalone 集群提交 Flink CDC Job

确保此时:

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

flink-cdc-* 目录下执行:

cd /path/flink-cdc-*
./bin/flink-cdc.sh mysql-to-doris.yaml

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

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

五、在 Flink Web UI 中观察任务运行情况

打开浏览器访问:

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 代码。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hello.Reader

请我喝杯咖啡吧😊

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

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

打赏作者

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

抵扣说明:

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

余额充值