第二期【Demo教程】教你使用MySQL CDC连接器,把数据从MySQL导到Doris

随着数据技术的快速发展,了解并掌握各种工具和技术变得尤为重要。为此,我们准备在Apache SeaTunnel社区发起如何使用连接器的Demo演示计划,邀请所有热爱数据同步技术的同学分享他们的知识和实操经验!

file

我们第二期主题是:如何使用MySQL CDC从MySQL同步到Doris,如果您对此计划感兴趣,也欢迎联系社区运营同学参与Demo录制!无论您是数据工程师、开发者还是技术爱好者,都欢迎您参与并展示您的技术才能。

敲重点敲重点如果你是用户,想看什么同步场景的Demo!请下滑到最底部留言,我们优先出品呼声最高的同步场景Demo!

Demo计划目标

我们的目标是创建一个共享和学习的平台,通过具体的Demo演示和对应的文档帮助社区成员更好地理解和应用各种数据连接器。这些Demo可以帮助新手快速学习,同时也为资深专家提供一个展示创新解决方案的舞台。

src="//player.bilibili.com/player.html?isOutside=true&aid=1554958983&bvid=BV111421i75r&cid=1552242217&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true">

本文详细介绍了 MySQL CDC(变更数据捕获)连接器的设置和使用方法,该连接器支持通过 SeaTunnel Zeta 和 Flink 从 MySQL 数据库中高效读取快照数据和增量数据

如何使用 MySQL CDC 连接器进行高效数据同步

探索如何使用 MySQL CDC 连接器从 MySQL 数据库读取快照和增量数据,以及如何通过 SeaTunnel Zeta 和 Flink 实现高效数据处理。

本视频教程中提及的代码

env {
  job.mode = "STREAMING"
  parallelism = 1
}
source {
  MySQL-CDC {
    base-url = "jdbc:mysql://datasource01:3306/qa_source"
    username = "root"
    password = "root@123"

    table-names = ["qa_source.batch_mysql_to_doris", "qa_source.batch_mysql_to_doris_offline_incremental_where"]
    startup.mode = "latest"

  }
}

sink {
    Doris {
        fenodes = "datasource01:8034"
        query-port = 9034
        username = root
        password = "root@123"
        schema_save_mode = "RECREATE_SCHEMA"
        database = "e2e_sink"
        table = "${table_name}_from_mysql"
        sink.enable-2pc = "true"
        sink.enable-delete = "true"
        sink.label-prefix = "test_json"
        doris.config = {
            format="json"
            read_json_by_line="true"
        }
    }
}

支持的处理引擎

  • SeaTunnel Zeta
  • Flink

主要特性

  • 流式处理
  • 精确一次语义
  • 支持自定义分片
  • 并行处理
  • 批处理
  • 列投影

支持的数据源版本

数据源支持的版本驱动连接示例Maven 地址
MySQLMySQL 5.6, 5.7, 8.0.xcom.mysql.cj.jdbc.Driverjdbc:mysql://localhost:3306/test下载

依赖安装

安装 JDBC 驱动

请确保jdbc 驱动包已被放置在 ${SEATUNNEL_HOME}/plugins/ 目录下。

对于 SeaTunnel Zeta 引擎

请确保jdbc 驱动包已被放置在 ${SEATUNNEL_HOME}/lib/ 目录下。

创建 MySQL 用户

您需要定义一个具有适当权限的MySQL用户,以便Debezium MySQL连接器监控所有数据库。

  1. 创建 MySQL 用户:
mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
  1. 授予用户所需权限:
    mysql> GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user' IDENTIFIED BY 'password';
  2. 最终确认用户权限:
    mysql> FLUSH PRIVILEGES;

启用 MySQL Binlog

必须为 MySQL 复制启用二进制日志记录。二进制日志记录交易更新以便复制工具传播更改。

  1. 检查 log-bin 选项是否已启用:
mysql> show variables where variable_name in ('log_bin', 'binlog_format', 'binlog_row_image', 'gtid_mode', 'enforce_gtid_consistency');
+--------------------------+----------------+
| Variable_name            | Value          |
+--------------------------+----------------+
| binlog_format            | ROW            |
| binlog_row_image         | FULL           |
| enforce_gtid_consistency | ON             |
| gtid_mode                | ON             |
| log_bin                  | ON             |
+--------------------------+----------------+
5 rows in set (0.00 sec)
  1. 如果与上述结果不一致,请在您的MySQL服务器配置文件($MYSQL_HOME/mysql.cnf)中设置如下属性:
# Enable binary replication log and set the prefix, expiration, and log format.
# The prefix is arbitrary, expiration can be short for integration tests but would
# be longer on a production system. Row-level info is required for ingest to work.
# Server ID is required, but this will vary on production systems
server-id         = 223344
log_bin           = mysql-bin
expire_logs_days  = 10
binlog_format     = row
binlog_row_image  = FULL

# enable gtid mode
gtid_mode = on
enforce_gtid_consistency = on
  1. 重启 MySQL 服务器
/etc/inint.d/mysqld restart
  1. 通过再次检查 Binlog 状态来确认您的更改
mysql> show variables where variable_name in ('log_bin', 'binlog_format', 'binlog_row_image', 'gtid_mode', 'enforce_gtid_consistency');
+--------------------------+----------------+
| Variable_name            | Value          |
+--------------------------+----------------+
| binlog_format            | ROW            |
| binlog_row_image         | FULL           |
| enforce_gtid_consistency | ON             |
| gtid_mode                | ON             |
| log_bin                  | ON             |
+--------------------------+----------------+
5 rows in set (0.00 sec)

注意事项

设置 MySQL 会话超时

对于大型数据库,当进行初始一致性快照时,已建立的连接可能会超时。 您可以通过配置 interactive_timeoutwait_timeout 来防止此行为。

interactive_timeout:服务器在关闭交互连接前等待活动的秒数。 wait_timeout:服务器在关闭非交互连接前等待活动的秒数

数据类型映射

MySQL 数据类型SeaTunnel 数据类型
BIT(1)、TINYINT(1)BOOLEAN
TINYINTTINYINT
SMALLINT UNSIGNED、MEDIUMINT、MEDIUMINT UNSIGNED、INT、INTEGER、YEARINT
BIGINT UNSIGNEDDECIMAL(20,0)
DECIMAL(p, s)、NUMERIC(p, s)DECIMAL(p,s)
FLOAT、FLOAT UNSIGNEDFLOAT
DOUBLE、DOUBLE UNSIGNED、REAL、REAL UNSIGNEDDOUBLE
CHAR、VARCHAR、TINYTEXT、MEDIUMTEXT、TEXT、LONGTEXT、ENUM、JSONSTRING
DATEDATE
TIMETIME
DATETIME、TIMESTAMPTIMESTAMP
BINARY、VARBINAR、BIT(p)、TINYBLOB、MEDIUMBLOB、BLOB、LONGBLOBBYTES

源选项

名称类型必填默认值描述
base-urlString-JDBC 连接的 URL。例如:jdbc:mysql://localhost:3306:3306/test
usernameString-连接数据库服务器时使用的数据库用户名。
passwordString-连接数据库服务器时使用的密码。
database-namesList-监控的数据库名称。
table-namesList-监控的表名称,需要包含数据库名,例如:database_name.table_name
table-names-configList-表配置列表,例如:[{"table": "db1.schema1.table1","primaryKeys":["key1"]}]
startup.modeEnumINITIALMySQL CDC 消费者的可选启动模式,有效值为 initialearliestlatestspecific
startup.specific-offset.fileString-指定的 binlog 文件名。当 startup.modespecific 时,此选项必需。
startup.specific-offset.posLong-指定的 binlog 文件位置。当 startup.modespecific 时,此选项必需。
...............

实用示例

简单示例:支持多表读取
env {
  parallelism = 1
  job.mode = "STREAMING"
  checkpoint.interval = 10000
}

source {
  MySQL-CDC {
    base-url = "jdbc:mysql://localhost:3306/testdb"
    username = "root"
    password = "root@123"
    table-names = ["testdb.table1", "testdb.table2"]

    startup.mode = "initial"
  }
}

sink {
  Console {
  }
}

随着技术的迭代,我们将继续优化文档和功能,敬请期待未来的更新。通过本文介绍的 MySQL CDC 连接器,开发者可以实现对 MySQL 数据库的实时变更数据捕获,从而在不中断数据库操作的情况下进行数据同步和分析。

这不仅提高了数据处理的效率,而且也为构建实时数据应用提供了强大的数据支持。无论您是数据工程师还是系统架构师,掌握如何配置和使用 MySQL CDC 连接器都将为您带来极大的便利和效益。

本文由 白鲸开源科技 提供发布支持!

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Flink CDC(Change Data Capture)是一种数据同步技术,可以从源数据库中捕获变更数据并将其同步到目标数据库中。DorisDB是一款分布式数据仓库,支持海量数据的存储和查询分析。下面以将数据DorisDB同步DorisDB为例,介绍如何使用Flink CDC实现数据同步。 1. 准备工作 在开始之前,需要安装好以下工具和环境: - DorisDB - Flink - Flink CDC 2. 创建数据源 首先需要创建一个数据源,用于从DorisDB中读取数据。可以使用Flink的JDBCInputFormat来读取DorisDB中的数据。在Flink中,可以使用以下代码创建一个JDBCInputFormat: ``` JDBCInputFormat jdbcInputFormat = JDBCInputFormat.buildJDBCInputFormat() .setDrivername(driverName) .setDBUrl(dbUrl) .setUsername(username) .setPassword(password) .setQuery("SELECT * FROM table") .finish(); ``` 其中,driverName、dbUrl、username和password是DorisDB的连接信息,"SELECT * FROM table"是要读取的表的SQL语句。 3. 创建数据同步任务 接下来需要创建一个Flink的数据流任务,用于将从DorisDB中读取的数据同步到另一个DorisDB中。可以使用Flink的DataStream API来实现数据同步。以下是一个示例代码: ``` StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<Row> sourceStream = env.createInput(jdbcInputFormat); DataStream<Row> sinkStream = sourceStream.map(new MapFunction<Row, Row>() { @Override public Row map(Row value) throws Exception { // 对数据进行转换 return value; } }); DorisDBOutputFormat dorisDBOutputFormat = new DorisDBOutputFormat(); dorisDBOutputFormat.setDrivername(driverName); dorisDBOutputFormat.setDBUrl(dbUrl); dorisDBOutputFormat.setUsername(username); dorisDBOutputFormat.setPassword(password); dorisDBOutputFormat.setTable(table); dorisDBOutputFormat.setBatchSize(batchSize); sinkStream.writeUsingOutputFormat(dorisDBOutputFormat); env.execute(); ``` 其中,sourceStream是从DorisDB中读取的数据流,sinkStream是经过转换后要写入到DorisDB的数据流。可以使用map函数对数据进行转换。DorisDBOutputFormat是一个自定义的输出格式,用于将数据写入到DorisDB中。在这个示例代码中,DorisDBOutputFormat的batchSize属性设置为1000,表示每1000条数据进行一次批量写入。 4. 运行数据同步任务 将上述代码保存为一个Java程序,并使用Flink命令行工具提交任务即可开始数据同步。在执行过程中,Flink CDC会自动监控DorisDB中的数据变更,将新增、修改、删除等操作同步到目标数据库中。 总的来说,使用Flink CDC实现DorisDB数据同步是一种高效、可靠的方式。它不仅可以帮助用户快速实现数据同步,还可以提高数据的实时性和准确性,为企业的数据分析和决策提供有力支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SeaTunnel

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

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

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

打赏作者

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

抵扣说明:

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

余额充值