MCPcopy Index your code
hub / github.com/SophiaData/Bigdata_Code_Tutorial

github.com/SophiaData/Bigdata_Code_Tutorial @v1.1.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.1.0 ↗ · + Follow
649 symbols 1,615 edges 78 files 95 documented · 15%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Bigdata_Code_Tutorial

Flink CDC 整库实时同步示例仓库,基于 Flink 1.20 + flink-cdc 3.x,支持 MySQL → MySQL 和 MySQL → Paimon 两种同步模式。

CI License Java Flink Dependabot

模块

模块 说明
flink-demo DataStream / SQL / CDC DDL / UDF / TableFunction 示例与 Mock 数据源
cdc-mysql-sync 整库同步核心:flink-cdc 3.x → JDBC sink,含 SchemaEvolver
cdc-paimon-sync CDC → Apache Paimon 数据湖同步(MySQL + MongoDB)
e2e-tests 端到端集成测试(Testcontainers)

快速开始

环境要求

  • Docker 和 Docker Compose(推荐)
  • JDK 11+ + Maven 3.8+(本地开发)

🚀 一键 Docker 测试(推荐)

最简单的方式是使用 Docker Compose 一键启动所有服务:

# 1. 启动所有服务(MySQL + Flink)
chmod +x test-cdc.sh
./test-cdc.sh start

# 2. 访问 Web UI
# Flink UI: http://localhost:18081
# MySQL Source: localhost:33061
# MySQL Sink: localhost:33062

# 3. 运行测试
./test-ddl-changes.sh    # DDL 变更测试
./test-load.sh           # 性能测试

# 4. 停止服务
./test-cdc.sh stop

本地开发环境

构建

# 切换到 JDK 11
export JAVA_HOME=/Users/gaotingkai/Library/Java/JavaVirtualMachines/corretto-11.0.21/Contents/Home
export PATH="$JAVA_HOME/bin:$PATH"

# 编译(跳过测试)
./mvnw -DskipTests package

# 运行单元测试(排除集成测试)
./mvnw test -Dtest='!*IT,!*IntegrationTest,!*FlinkSqlWDSTest'

# 运行覆盖率报告
./mvnw verify -Djacoco.skip=false -pl cdc-mysql-sync
open cdc-mysql-sync/target/site/jacoco/index.html

运行同步任务

修改 config.properties 中的 MySQL 连接信息后:

# 在 cdc-mysql-sync 目录下运行
java -cp target/cdc-mysql-sync-1.1.0-jar-with-dependencies.jar \
    io.sophiadata.flink.sync.FlinkSqlWDS \
    --config config.properties

详细说明见 FlinkSqlWDS.java

测试和部署

🐳 Docker 一键测试

提供完整的 Docker 测试环境,包括: - MySQL 源数据库和目标数据库 - Flink 集群 - 自动化测试脚本 - 性能测试工具

详细使用说明见 DOCKER_TEST_GUIDE.md

🧪 测试类型

测试类型 脚本 说明
基础功能 ./test-cdc.sh start 一键启动所有服务
DDL 变更 ./test-ddl-changes.sh 测试 Schema 变更同步
性能测试 ./test-load.sh 大批量数据同步性能
集成测试 ./mvnw test 单元测试和集成测试

🚀 CI/CD

工具 状态 说明
CI/CD ✅ GitHub Actions lint + unit + IT + package + CodeQL
依赖更新 ✅ Dependabot 每周自动创建依赖 PR
代码格式化 ✅ spotless google-java-format AOSP 风格
代码规范 ✅ checkstyle 阿里巴巴 Java 规范
测试覆盖率 ✅ JaCoCo 覆盖率报告已配置
安全扫描 ✅ CodeQL Java 安全静态分析
依赖审计 ✅ dependency-review GitHub 原生依赖安全审计

详细工程化文档见 docs/reliability/

核心流程

MySQL (Source) ──CDC──> Flink (cdc-mysql-sync) ──JDBC──> MySQL (Sink)
                           │
                           ├── SchemaEvolver: 自动处理 schema 变更
                           └── CDBBatchSink: 批量写入 + 按表分组

📖 文档

🎯 核心特性

✅ 整库同步

  • 自动发现源数据库所有表
  • 目标表自动添加 sink_ 前缀
  • 支持数据库和表级别的过滤

✅ Schema 变更同步

  • 无需重启任务:ADD/MODIFY/DROP/RENAME COLUMN
  • 无需重启任务:CREATE/DROP TABLE
  • 自动处理:SchemaEvolver 自动同步变更

✅ 高性能

  • 批量写入:CDBBatchSink 按表批量处理
  • 并行处理:可配置并行度
  • 检查点:支持 Exactly-Once 语义

✅ 易测试

  • Docker 环境:一键启动测试环境
  • 自动化测试:DDL 变更和性能测试
  • 实时监控:Flink Web UI 可视化监控

📚 大数据资料合集

扫码订阅 ima 知识库,获取大数据学习资料:

大数据资料合集

Core symbols most depended-on inside this repo

add
called by 63
flink-demo/src/main/java/io/sophiadata/flink/source/utils/RandomOptionGroup.java
mapType
called by 31
cdc-mysql-sync/src/main/java/io/sophiadata/flink/sync/util/MysqlUtil.java
getRandInt
called by 27
flink-demo/src/main/java/io/sophiadata/flink/source/utils/RandomNum.java
build
called by 22
flink-demo/src/main/java/io/sophiadata/flink/source/bean/AppPage.java
executeSql
called by 20
cdc-mysql-sync/src/main/java/io/sophiadata/flink/sync/util/MysqlUtil.java
map
called by 18
flink-demo/src/main/java/io/sophiadata/flink/streaming/IncrementMapFunction.java
getConnection
called by 15
cdc-mysql-sync/src/main/java/io/sophiadata/flink/sync/util/MysqlUtil.java
mapType
called by 14
cdc-paimon-sync/src/main/java/io/sophiadata/flink/paimon/mongo/MongoTypeMapper.java

Shape

Method 563
Class 80
Enum 6

Languages

Java100%

Modules by API surface

flink-demo/src/main/java/io/sophiadata/flink/source/bean/AppMain.java33 symbols
cdc-mysql-sync/src/main/java/io/sophiadata/flink/sync/schema/SchemaEvolver.java29 symbols
flink-demo/src/main/java/io/sophiadata/flink/source/bean/AppAction.java25 symbols
cdc-mysql-sync/src/test/java/io/sophiadata/flink/sync/CdcEventDeserializerTest.java25 symbols
flink-demo/src/main/java/io/sophiadata/flink/source/bean/AppPage.java22 symbols
flink-demo/src/main/java/io/sophiadata/flink/source/bean/AppCommon.java22 symbols
cdc-mysql-sync/src/test/java/io/sophiadata/flink/sync/schema/SchemaEvolverTest.java22 symbols
flink-demo/src/main/java/io/sophiadata/flink/source/bean/AppDisplay.java20 symbols
cdc-mysql-sync/src/main/java/io/sophiadata/flink/sync/CDBBatchSink.java19 symbols
flink-demo/src/test/java/io/sophiadata/flink/source/utils/ParamUtilTest.java18 symbols
cdc-mysql-sync/src/test/java/io/sophiadata/flink/utils/MySqlContainer.java17 symbols
cdc-mysql-sync/src/main/java/io/sophiadata/flink/sync/util/MysqlUtil.java16 symbols

Datastores touched

(mysql)Database · 1 repos
(mongodb)Database · 1 repos
flink_sinkDatabase · 1 repos
flink_sourceDatabase · 1 repos
mydbDatabase · 1 repos
sinkDatabase · 1 repos
sourceDatabase · 1 repos
test2Database · 1 repos

For agents

$ claude mcp add Bigdata_Code_Tutorial \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact