当前位置: 首页 > news >正文

用 CdcUp CLI 一键搭好 Flink CDC 演练环境

1. 前置条件

  • 一台 Linux 或 macOS 电脑
  • DockerDocker Compose v2(可用 docker compose version 验证)
  • bash 终端环境

Windows 建议用 WSL2 + Docker Desktop(启用 Compose v2 插件)。

2. 获取并进入 CdcUp

git clone https://github.com/apache/flink-cdc.git --depth=1
cd flink-cdc/tools/cdcup/
./cdcup.sh

你会看到用法帮助:

Usage: ./cdcup.sh { init | up | pipeline <yaml> | flink | mysql | stop | down | help }
  • init:生成演练环境配置并选择 Flink/CDC 版本与 Source/Sink 连接器
  • up:拉起并启动所有容器
  • pipeline <yaml>:提交 YAML 定义的 Flink CDC 作业
  • flink:打印 Flink Web UI 地址
  • mysql:打开 MySQL 控制台(若选择了 MySQL 源)
  • stop:停止容器(保留数据卷)
  • down:停止并删除容器、网络与卷(清库

3. 初始化与启动

3.1 交互式初始化

./cdcup.sh init

按提示用方向键选择:

  • Flink 版本(推荐 1.20.1)
  • Flink CDC 版本
  • Source/Sink 连接器(如 MySQL、StarRocks、Doris、Elastic、Print 等)

CdcUp 会生成对应的 Compose 文件与样例配置。

3.2 启动容器

./cdcup.sh up

提示:StarRocks/Doris 等目标库初始化较慢,第一次启动需稍等;可 docker compose logs -f 观察健康状态。

4. 在 MySQL 造数(示例)

如果选了 MySQL 作为 Source:

./cdcup.sh mysql

执行示例 SQL(建库/建表/插数/校验):

CREATE DATABASE cdc_playground;
USE cdc_playground;CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(32));
INSERT INTO test_table VALUES(1,'alice'),(2,'bob'),(3,'cicada'),(4,'derrida');SELECT * FROM test_table;

5. 编写与提交管道

你可以用任意 YAML。下面给两份常用模板:

5.1 最小可跑(MySQL → Print Sink)

适合首次验证:无需下游依赖,控制台直接可见同步结果。

# mysql-to-print.yaml
source:type: mysqlhostname: mysqlport: 3306username: rootpassword: 123456tables: cdc_playground\.*server-id: 5400-5404server-time-zone: UTCsink:type: printpipeline:name: MySQL to Printparallelism: 2

提交:

./cdcup.sh pipeline mysql-to-print.yaml

此时对 cdc_playground 下任意表做 INSERT/UPDATE/DELETE,在 Flink 日志中能看到事件被打印出来。

5.2 切换到 StarRocks(MySQL → StarRocks)

需在 init 时选择了 StarRocks 连接器,并确保 FE MySQL 端口(默认 9030)与 FE HTTP/Load 端口(常见 8030 或 8080)开放。

# mysql-to-starrocks.yaml
source:type: mysqlhostname: mysqlport: 3306username: rootpassword: 123456tables: cdc_playground\..*server-id: 5400-5404server-time-zone: UTCsink:type: starrocksjdbc-url: jdbc:mysql://starrocks:9030load-url: starrocks:8030       # 若镜像是 8080 暴露 FE HTTP,请改 8080username: rootpassword: ""table.create.properties.replication_num: 1# 如需 Upsert 语义,可启用主键模型(取决于实际版本能力):# table.create.properties.duplicate_key: false# table.create.properties.primary_key: "id"pipeline:name: MySQL to StarRocksparallelism: 2

提交:

./cdcup.sh pipeline mysql-to-starrocks.yaml

验证:用 DBeaver/DataGrip 或 mysql -h starrocks -P9030 -uroot 连上 StarRocks,查询对应库表是否已创建并有数据。

6. 打开 Flink Web UI

./cdcup.sh flink
# 输出类似:
# 🚩 Visit Flink Dashboard at: http://localhost:33448

浏览器访问该地址即可查看拓扑、吞吐、延时、反压与 Checkpoint 状态。

7. 在线验证:增删改与 Schema 演进

./cdcup.sh mysql 打开的会话里执行:

-- 新增
INSERT INTO cdc_playground.test_table VALUES (5, 'eve');-- 演进:加列
ALTER TABLE cdc_playground.test_table ADD COLUMN note VARCHAR(64) NULL;-- 更新
UPDATE cdc_playground.test_table SET note='hello' WHERE id=1;-- 删除
DELETE FROM cdc_playground.test_table WHERE id=2;
  • Print Sink:变化会实时打印到 Flink 日志
  • StarRocks/Doris:刷新客户端即可看到目标表同步更新

8. 分表并表与路由(可选)

把多张分表写入同一目标表(注意当前不支持不同分表里存在相同主键的并表场景):

route:- source-table: cdc_playground.order_.*sink-table: ods_db.ods_orders

按表改名/跨库迁移:

route:- source-table: cdc_playground.test_tablesink-table: ods_db.ods_test_table

9. 停止与清理

./cdcup.sh stop   # 停止所有容器,保留数据卷
./cdcup.sh down   # 停止并删除容器/网络/卷(清空数据)

10. 常见坑与排障清单

  • Compose 版本:CdcUp 依赖 Docker Compose v2(命令是 docker compose 而非 docker-compose)。
  • 端口差异:StarRocks FE HTTP 端口常见为 8030,部分 all-in-one 镜像是 8080load-url 与浏览器访问请一致。
  • Server ID 冲突server-id: 5400-5404 与现有复制/采集冲突会报错,换个区间即可。
  • 时区偏移:务必设 server-time-zone: UTC(或与你源库一致的时区),避免 TIMESTAMP/DATETIME 偏移。
  • 初始化等待:首次 up 后下游(StarRocks/Doris)可能需要几分钟 ready;观察 docker compose logs -f
  • Down 会清库down 会删除卷,演练数据会丢;用 stop 可保留数据。
  • Exactly-Once:开箱即用依赖 Flink Checkpoint,建议在生产演练里合理调节间隔/超时,并优先使用主键/唯一键支持的 upsert 模型。
http://www.dtcms.com/a/578106.html

相关文章:

  • 【云运维】zabbix管理(续)
  • centos安装ES
  • 网站子目录是什么南通制作公司网站
  • 怎样设计网站或网页怎么样在百度做网站
  • SELinux 布尔值详解:灵活调整安全策略的开关
  • 李宏毅机器学习笔记41
  • 1-GGML:看ctx是个什么东西
  • 【Java SE 基础学习打卡】02 计算机硬件与软件
  • SDIO(Secure Digital Input Output,安全数字输入输出)
  • wordpress批量下载外链图片长春网站推广优化公司
  • 在 Ubuntu 上安装 Ollama 并通过 Open WebUI 运行本地大语言模型
  • 用Python来学微积分34-定积分的基本性质及其应用
  • 如何做网站代码荥阳市城乡建设规划网站
  • Jmeter+ant+Jenkins 接口自动化框架-让jmeter脚本自己跑起来
  • 宝安区住房和建设局网站河南做网站多少钱
  • Java集合框架:深入理解List与Set及其实现类
  • 前端工程师职业规划与转型指南
  • 网站建设管理情况的通报国外工业产品设计网站
  • EventOS:面向MCU的事件驱动框架
  • 视频直播点播平台EasyDSS:打造高品质赛事直播的全链路解决方案
  • 广州网站制作哪家全面万达做的电商网站
  • C# 分部类读取学生信息
  • 分布式事务的实现方案:从理论到实践的全方位解析
  • 瑞萨RH850使用记录(三):看门狗(选项字)、AD、CAN、软复位(复位原因)
  • web应用构建与部署的本质区别
  • 源码管理 网站2021年企业所得税怎么征收
  • 建设小说网站的系统有哪些目前最新推广平台
  • iOS文件管理工具深度剖析,从系统沙盒到跨平台文件操作的多工具协同实践
  • 数据结构—排序算法篇二
  • 基于SpringBoot2+Vue2的实验室和实验器材预约平台