Flinkcdc 实现 MySQL 写入 Doris

Flinkcdc 实现 MySQL 写入 Doris

Flinkcdc 实现 MySQL 写入 Doris

一、环境配置

Doris:3.0.4 + JDK 17
MySQL (业务数据库):5.7
MySQL(本地数据库):5.7
Flink:flink-1.19.1
flinkcdc:flink-cdc-3.3.0

二、环境搭建

  1. 下载 Flink 1.19.1
wget https://archive.apache.org/dist/flink/flink-1.19.1/flink-1.19.1-bin-scala_2.12.tgz

解压后得到 flink-1.19.1 目录,设置 FLINK_HOME 为 flink-1.19.1 所在目录

sudo vim /etc/profile.d/my_env.sh

添加 Flink 路径

export JAVA_HOME=/opt/module/java
export PATH=$PATH:$JAVA_HOME/bin
export FLINK_HOME=/opt/module/flink-1.19.1
export PATH=$PATH:$FLINK_HOME/bin 
  1. 读入数据通过在 conf/flink-conf.yaml 配置文件追加下列参数开启 checkpoint,每隔 3 秒做一次 checkpoint。
execution.checkpointing.interval: 3000
  1. 使用下面的命令启动 Flink 集群
./bin/start-cluster.sh

启动成功的话,可以在 http://localhost:8081/访问到 Flink Web UI,如下所示:
在这里插入图片描述
多次执行 start-cluster.sh 可以拉起多个 TaskManager。

部署 Doris 和 MySQL 这部分省略

添加配置文件
Flink lib 目录下:
在这里插入图片描述
flinkcdc 3.3.0 lib 目录下
在这里插入图片描述

三、通过 Flink CDC CLI 提交任务

编写任务配置 yaml 文件。 下面给出了一个整库同步的示例文件 mysql-to-doris.yaml:

################################################################################
# Description: Sync MySQL all tables to Doris
################################################################################
source:
  type: mysql
  hostname: 172.16.11.154
  port: 3306
  username: root
  password: xxx
  tables: app_db.\.*
  server-id: 5400-5404
  server-time-zone: 'Asia/Shanghai'
sink:
  type: doris
  fenodes: 172.16.10.181:8030
  benodes: 172.16.10.181:8040
  username: root
  password: 123456
  table.create.properties.light_schema_change: true
  table.create.properties.replication_num: 1
  
pipeline:
  name: Sync MySQL Database to Doris
  parallelism: 1

其中: source 中的 tables: app_db..* 通过正则匹配同步 app_db 下的所有表。 sink 添加 table.create.properties.replication_num 参数是由于 Docker 镜像中只有一个 Doris BE 节点。

最后,通过命令行提交任务到 Flink Standalone cluster

bash 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 Web UI,可以看到一个名为 Sync MySQL Database to Doris 的任务正在运行。
在这里插入图片描述
后续相关信息,参考官网即可
https://nightlies.apache.org/flink/flink-cdc-docs-release-3.3/zh/docs/get-started/quickstart/mysql-to-doris/

### 使用 Dinky 和 FlinkCDC 实现 MySQL 整库同步的配置教程 #### 1. 配置概述 为了实现 MySQL 数据库的全量同步至目标存储(如 Doris 或 StarRocks),可以通过 Dinky 提供的功能来构建基于 FlinkCDC 的 Pipeline。此过程涉及源端数据库连接、数据捕获以及目标端的数据写入等多个环节。 以下是具体的操作指南: --- #### 2. 源端 MySQL 配置 在创建 Pipeline 前,需确保已准备好 MySQL 数据库的相关信息,包括但不限于主机地址、端口、用户名和密码等基本信息。这些参数将在后续的 Source 配置中被引用[^1]。 ```sql -- 示例 MySQL 数据库结构 CREATE DATABASE IF NOT EXISTS test; USE test; CREATE TABLE products ( id INT PRIMARY KEY, name VARCHAR(255), price DECIMAL(10, 2) ); CREATE TABLE orders ( order_id INT PRIMARY KEY, product_id INT, quantity INT ); ``` 上述 SQL 创建了一个 `test` 库及其下的两张表 `products` 和 `orders`,作为演示对象[^3]。 --- #### 3. 构建 Source 环节 Source 节点负责从 MySQL 获取增量或全量数据流。以下是一个典型的 JSON 格式的 Source 参数模板: ```json { "plugin_name": "mysql-cdc", "hostname": "#{host}", "port": "#{port}", "username": "#{username}", "password": "#{password}", "database-name": ["#{schemaName}"], "table-name": ["#{tableName}"] } ``` 其中: - `#{host}` 替换为 MySQL 主机地址; - `#{port}` 替换为 MySQL 端口号,默认为 3306; - `#{username}` 和 `#{password}` 是访问权限凭证; - `#{schemaName}` 和 `#{tableName}` 将分别由实际的库名和表名单独填充。 --- #### 4. 定义 Sink 环节 Sink 节点用于将来自 Source 的数据写入目标存储系统。假设目标是 Apache Doris,则可参考如下配置: ```json { "plugin_name": "doris", "fe-nodes": "localhost:8030", "table-identifier": "#{sinkSchema}.#{sinkTable}", "user": "#{sinkUser}", "password": "#{sinkPassword}" } ``` 在此配置中: - `#{sinkSchema}` 对应目标 Schema 名称(例如 `ods`); - `#{sinkTable}` 自动映射为目标表名称前缀加原表名的小写形式(如 `test__products`)。这一步遵循了整库同步的标准命名约定。 如果目标改为 StarRocks,则其配置逻辑相似,仅需调整插件名称及相关属性值即可[^2]。 --- #### 5. 测试与验证 完成以上两部分后,在 Dinky 平台上启动对应的 Job,并观察运行状态日志以确认无误。一旦发现异常情况,可通过调试工具定位问题所在并及时修正。 此外,还需注意定期维护上下游系统的元数据一致性,防止因版本升级或其他变更引发兼容性隐患。 --- #### 6. 注意事项 - **字段匹配**:确保 MySQL 表结构能够顺利映射到下游目标表上,必要时手动干预字段类型转换。 - **性能调优**:针对大规模数据迁移场景,合理设置并发度及其他资源分配策略。 - **错误处理机制**:提前规划好失败重试次数上限及告警通知方式,保障作业稳定性。 --- ### 示例代码片段 下面展示了一段完整的 YAML 文件定义样例,适用于描述整个流程链路: ```yaml name: mysql_to_doris_pipeline source: plugin_name: mysql-cdc hostname: localhost port: 3306 username: root password: secret database-name: [test] table-name: [] transform: - type: map fields: - from: 'id' to: 'product_id_mapped' sink: plugin_name: doris fe-nodes: localhost:8030 table-identifier: ods.test__products user: admin password: passw0rd ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ysksolution

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值