任务目标
这里任务目标主要是利用 Flink CDC(Change Data Capture,即变更数据捕获)技术,将达梦数据库中的数据实时同步至 MySQL 数据库。Flink 作为一款强大的流处理框架 ,搭配 CDC 技术能够高效地捕获源数据库的变更,并将这些变更实时同步到目标数据库,为数据的实时处理和分析提供了有力支持。逐步部署、配置、测试等环节通过,搭建起从达梦数据库到 MySQL 数据库的实时同步环境。
使用Flink CDC技术,实现达梦数据库(DM8)与MySQL的实时数据同步.
参考文档:FlinkCDC 达梦数据库实时同步_达梦cdc-CSDN博客
这里仅实现在 Linux 系统下部署
如果需要在本地部署可参考官方文档
安装前准备 | 达梦技术文档本文安装环境如下:
操作系统 CPU 数据库 Ubuntu 2.24 x86_64 架构 dm8_20240116_x86_rh7_64
整体架构流程
任务起始时间(3.17 - 3.19)
**1.**Flink 部署与配置 :首先要确保 Java 环境正确配置,这是 Flink 运行的基础。接着安装并配置 Flink,包括设置 Flink 的 Java 环境路径、修改 REST 服务地址和端口等。同时,将 Flink CDC 相关的 Jar 包放置到 Flink 安装目录的 lib 文件夹下,以支持 CDC 功能。
(预估完成时间 3.17)2. 达梦数据库搭建 :利用 Docker 快速部署达梦数据库,并对其进行相关配置,如开启日志归档功能,这对于 Flink CDC 捕获达梦数据库的变更数据至关重要。
(预估完成时间 3.18)3. 实时同步测试 :在达梦数据库中创建源表,定义好数据结构和连接配置,用于提供待同步的数据。在 MySQL 数据库中创建目标表,用于接收同步过来的数据。最后,通过 Flink SQL 的 INSERT INTO...SELECT 语句,实现从达梦源表到 MySQL 目标表的数据实时同步。
(预估完成时间 3.19)
技术名词解释
- Flink:一个分布式流批一体化开源平台,能对有界和无界数据流进行有状态计算,在实时数据处理领域应用广泛。它具有高吞吐、低延迟、容错性强等特点,为数据实时处理提供了丰富的功能和高效的执行引擎。
- Flink CDC:Flink 的变更数据捕获技术,通过监听源数据库的日志或使用特定的数据库 API,能够实时获取数据库的增、删、改操作,并将这些变更数据传输到 Flink 系统中进行后续处理,从而实现数据在不同数据库之间的实时同步。
- 达梦数据库:国内知名的数据库管理系统,具有高性能、高可靠、高安全等特性,广泛应用于金融、政府、能源等众多关键领域,在国产化数据库应用中占据重要地位。
- MySQL:世界上最流行的开源关系型数据库之一,以其开源、易用、高性能和可扩展性在互联网行业和各类企业级应用中被大量使用。
技术实现
1. Flink 部署细节:(3.17)
1.1 Java 环境配置
Java 是 Flink 运行的基础环境,我们需要配置 Java 的相关路径,让系统能够正确找到 Java 并使用它。
打开系统配置文件 /etc/profile
进行编辑:
bash
vi /etc/profile
在文件中添加以下内容:
bash
export JAVA_HOME=/data/flinkcdc/jdk1.8.0_181
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH

上述配置中,JAVA_HOME
指向 Java 的安装目录,CLASSPATH
包含了 Java 运行所需的工具和类库,PATH
把 Java 的可执行文件路径添加到系统路径。
保存并退出文件后,让配置立即生效:
source /etc/profile
- 接着,编辑用户个人的配置文件
~/.bash_profile
:
bash
vi ~/.bash_profile
添加如下内容:
bash
export FLINK_HOME=/data/flinkcdc/flink-1.17.0
export PATH=$PATH:$FLINK_HOME/bin

这里设置了 Flink 的安装路径,并将其可执行文件路径添加到系统路径。保存退出后,使配置生效.
1.2Flink 安装:
前提条件
在安装 Flink 之前,需要确保系统已经安装了 Java 环境,因为 Flink 是基于 Java 开发的。建议使用 Java 8 或更高版本。你可以通过以下命令检查 Java 版本:
java
java -version

如果没有安装 Java,你需要先安装 Java 并配置好环境变量。
步骤 1:下载 Flink
-
你可以从 Flink 官方网站(https://flink.apache.org/downloads.html )下载适合你需求的 Flink 版本。这里以 Flink 1.17.0 为例,使用以下命令下载:
wget https://archive.apache.org/dist/flink/flink-1.17.0/flink-1.17.0-bin-scala_2.12.tgz
这里可以直接用 wget 通过 url 去下载,但是由于网络原因,可能较慢,所以建议采用另一种方式
- 先进行本地下载,在传输到服务器上。
访问网址: Index of /dist/flink/flink-1.17.0https://archive.apache.org/dist/flink/flink-1.17.0/

成功下载到本地之后有三种方式去实现从本地进行文件传输到服务器
Xshell 直接拖拽(需结合 Xftp)
- 操作:在 Xshell 已连接服务器的前提下,通过 "工具"-"新建 Xftp 选项卡" 开启关联。从本地资源管理器将安装包直接拖到 Xftp 窗口的服务器目标目录。
- 优势:操作简单便捷。
- 劣势:依赖 Xshell 和 Xftp 软件集成环境,若未安装或软件异常则无法使用。

Xftp 传输
- 操作:打开 Xftp,新建会话连接服务器,设置好传输模式(建议二进制传安装包),从本地选中安装包拖到服务器目标目录。
- 优势:专业的文件传输工具,支持断点续传,对文件传输的控制更精细。
- 劣势:需单独启动软件,对于仅需简单传输文件的场景稍显繁琐。

scp 指令传输
-
操作 :在本地终端使用
scp -P [端口号] 本地文件路径 用户名@服务器IP:服务器目标路径
格式的命令bashscp /Users/yourusername/Downloads/flink - 1.17.0 - bin - scala_2.12.tgz [email protected]:/data/
-
优势:无需额外图形化软件,纯命令行操作,在各类系统下通用性强,适合熟练掌握命令的用户快速传输 。
-
劣势:命令格式相对复杂,不太友好,若命令参数错误可能导致传输失败 。
注意:如果您使用的是 Windows 系统,需要先安装支持 scp 命令的工具,如 OpenSSH(可通过安装 Git 来获得,安装 Git 时选择安装 OpenSSH 组件)。如果是 macOS 或 Linux 系统,系统默认自带 scp 命令
步骤 2:解压文件
使用以下命令解压下载的压缩包:
tar -xzf flink-1.17.0-bin-scala_2.12.tgz
解压完成后,你会得到一个名为 flink-1.17.0
的目录,这就是 Flink 的安装目录。
步骤 3:配置 Java 环境
Flink 需要知道 Java 的安装路径,你可以通过编辑 conf/flink-conf.yaml
文件来指定 Java 环境。打开该文件:
vim conf/flink-conf.yaml
在文件中添加或修改以下配置:
env.java.home: /path/to/your/java/home
将 /path/to/your/java/home
替换为你实际的 Java 安装路径,例如 /usr/lib/jvm/java-8-openjdk-amd64
。
步骤 4:配置 Flink 服务地址和端口
修改 conf/flink-conf.yaml
文件中的相关配置。找到并修改以下两行:
bash
rest.port: 8088
rest.address: 192.168.33.231
rest.port
:指定 Flink Web UI 的访问端口,这里设置为 8088。rest.address
:指定 Flink 服务的访问地址,将其替换为你实际的服务器 IP 地址。

步骤 5:配置防火墙(可选)
如果你的服务器开启了防火墙,需要确保防火墙允许访问 Flink 的 Web UI 端口(默认是 8088)。你可以使用以下命令开放端口:
bash
# 对于 CentOS/RHEL 系统
sudo firewall-cmd --zone=public --add-port=8088/tcp --permanent
sudo firewall-cmd --reload
# 对于 Ubuntu/Debian 系统
sudo ufw allow 8088/tcp

1.3 引入 Flink CDC Jar 包
Flink CDC 连接达梦数据库需要特定的 Jar 包,如flink - cdc - connector - dm
相关的 Jar 包,以及达梦数据库的 JDBC 驱动 Jar 包。将这些 Jar 包正确放置到 Flink 的 lib 目录下,Flink 才能识别并使用它们进行达梦数据库的连接和数据捕获。
1.4、启动flink
进入 Flink 安装目录,使用以下命令启动 Flink 集群:
bash
./bin/start-cluster.sh

启动成功后,你可以通过浏览器访问 http://192.168.33.231:8088(这里要改成你自己的ip)
来查看 Flink 的 Web UI,确认 Flink 是否正常运行。(这里暂且没访问到)
1.5、启动 Flink SQL CLI
进入 Flink 安装目录
bash
bin/sql-client.sh
2. 达梦数据库配置细节:(3.18)
目标:通过Docker部署DM8,开启归档日志支持CDC。
具体步骤:
1. Docker安装与镜像准备
安装Docker(若未安装)执行下述命令
bash
yum install docker -y && systemctl start docker
拉取达梦镜像(如dm8_flinkcdc:dm8
)或使用官方镜像。
bash
docker pull dm8_flinkcdc:dm8
注意点:镜像是否包含CDC所需配置?
docker pull
是 Docker 用于从镜像仓库拉取镜像的命令。dm8_flinkcdc:dm8
是要拉取的镜像名称和标签。其中dm8_flinkcdc
是镜像名称,dm8
是标签,标签通常用于区分同一镜像的不同版本或配置。这里拉取的是专门为 Flink CDC(变更数据捕获)场景定制的达梦 8 数据库镜像。
2. 启动达梦容器
bash
docker run -d \
--name dm8 \
-p 5236:5236 \
-v /docker/dm8_data_cdc:/opt/dmdbms/data \
-e SYSDBA_PWD=SYSDBA001 \
dm8_flinkcdc:dm8
- 注意点 :数据卷
/docker/dm8_data_cdc
权限是否正确?
3. 开启归档日志
-
进入容器:
docker exec -it dm8 bash
。 -
修改
dm.ini
:设置ARCH_INI=1
。 -
创建
dmarch.ini
,配置归档路径和策略。 -
重启容器:
docker restart dm8
。 -
验证 :执行SQL
SELECT arch_mode FROM v$database;
返回Y
。
4. 创建测试表
sql
CREATE TABLE SYSDBA.dm_flinkcdc (
id INT PRIMARY KEY,
name VARCHAR(50),
insert_date DATE
);
3. 实时同步测试细节:(3.19)
目标:通过Flink SQL将达梦数据同步到MySQL。
具体步骤:
-
MySQL环境准备
-
安装MySQL,创建数据库
flinkcdc
和表dm_to_mysql
。 -
确保用户
root
有远程访问权限。
-
-
Flink SQL作业配置
-
达梦源表定义:
sqlCREATE TABLE t_source_dm (...) WITH ( 'connector' = 'dm', 'hostname' = '192.168.33.231', 'port' = '5236', 'username' = 'SYSDBA', 'password' = 'SYSDBA001', 'table' = 'dm_flinkcdc' );
-
MySQL目标表定义:
sqlCREATE TABLE sink_mysql_test (...) WITH ( 'connector' = 'jdbc', 'url' = 'jdbc:mysql://192.168.33.231:3306/flinkcdc', 'table-name' = 'dm_to_mysql' );
-
注意点 :检查MySQL驱动是否在Flink的
lib/
目录下(如mysql-connector-java-8.0.28.jar
)。
-
-
启动同步任务
sqlINSERT INTO sink_mysql_test SELECT * FROM t_source_dm;
- 验证 :在达梦插入数据,观察MySQL是否同步。
常见问题及解决
-
Flink启动失败:检查JDK路径、端口冲突、防火墙。
-
达梦连接超时:确认容器端口映射和网络策略。
-
CDC无数据:检查归档配置,确认表有更新操作。
-
MySQL同步失败:检查JDBC连接参数和驱动版本。