MySQL-CDC-Connector(Flink SQL CDC Connectors)

本文详细介绍如何使用 Apache Flink 的 MySQL CDC 连接器来实现数据库变更数据捕获。主要内容包括 Flink 的安装配置、数据库设置、Flink 客户端操作及通过 Java 代码监听 MySQL 数据变化。

Flink SQL CDC Connectors

参见文章(Flink SQL CDC 实践以及一致性分析)


一、安装flink

在这里插入图片描述
将flink-sql-connector-mysql-cdc-1.2.0.jar 拷贝至flink lib目录下
启动flink

./start-cluster.sh 

在这里插入图片描述

二、配置数据库

创建用户和授权

CREATE USER 'flink'@'%' IDENTIFIED BY 'flink';
GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'flink' IDENTIFIED BY 'flink';
FLUSH PRIVILEGES;

查询binlog是否开启

set global show_compatibility_56=on;
SELECT variable_value as "BINARY LOGGING STATUS (log-bin) ::"
FROM information_schema.global_variables WHERE variable_name='log_bin';

通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接。
查看mysql客户端超时参数

show global variables like 'wait_timeout';
show global variables like 'interactive_timeout';

三、flink客户端操纵

1.启动flink客户端

在这里插入图片描述

2.查看Mysql CDC 同步

CREATE TABLE orders (
  order_id INT,
  order_date TIMESTAMP(0),
  customer_name STRING,
  price DECIMAL(10, 5),
  product_id INT,
  order_status BOOLEAN
) WITH (
  'connector' = 'mysql-cdc',
  'hostname' = 'localhost',
  'port' = '3306',
  'username' = 'flink',
  'password' = 'flink',
  'database-name' = 'flink',
  'table-name' = 'orders'
);

在这里插入图片描述

SELECT * FROM orders;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、通过flink-connector-mysql-cdc(JAVA代码)监听数据变化

import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.api.Table;
import org.apache.flink.table.api.bridge.java.StreamTableEnvironment;
import org.apache.flink.types.Row;

public class FlinkConnectorMysqlCDCDemo {

    public static void main(String[] args) throws Exception {
        final ParameterTool params = ParameterTool.fromArgs(args);
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(1); // source only supports parallelism of 1
        final StreamTableEnvironment tEnv = StreamTableEnvironment.create(env);
        // register a table in the catalog
        tEnv.executeSql(
                "CREATE TABLE orders (\n" +
                        "  order_id INT,\n" +
                        "  order_date TIMESTAMP(0),\n" +
                        "  customer_name STRING,\n" +
                        "  price DECIMAL(10, 5),\n" +
                        "  product_id INT,\n" +
                        "  order_status BOOLEAN\n" +
                        ") WITH (\n" +
                        "  'connector' = 'mysql-cdc',\n" +
                        "  'hostname' = 'localhost',\n" +
                        "  'port' = '3306',\n" +
                        "  'username' = 'flink',\n" +
                        "  'password' = 'flink',\n" +
                        "  'database-name' = 'flink',\n" +
                        "  'table-name' = 'orders'\n" +
                        ")");

        // define a dynamic aggregating query
        final Table result = tEnv.sqlQuery("SELECT * FROM orders");

        // print the result to the console
        tEnv.toRetractStream(result, Row.class).print();

        env.execute();
    }
}

在这里插入图片描述
项目源码见:https://github.com/yunplusplus/flink-mysql-sync

你提到 **`flink-sql-connector-mysql-cdc-2.3.2.jar` 下载地址不对**,这是一个非常常见的问题。我们来详细解释原因,并提供 **正确的下载方式和替代方案**。 --- ## ❌ 为什么 Maven Central 上找不到 `flink-sql-connector-mysql-cdc`? ### 根本原因: > **`flink-sql-connector-mysql-cdc` 并不是 Apache Flink 官方项目的一部分**,而是由 **Ververica(现为阿里云子公司)开发并维护的开源项目:`ververica/flink-cdc-connectors`** 因此: - 它 **不在 Apache 的官方发行版中** - 也 **不会出现在 Maven Central 的 `org.apache.flink` 命名空间下** - 正确的 Group ID 是:`com.ververica` --- ## ✅ 正确的 JAR 名称与下载地址 ### 🔧 正确的依赖信息: | 属性 | 值 | |------|----| | **Group ID** | `com.ververica` | | **Artifact ID** | `flink-sql-connector-mysql-cdc` | | **Version** | `2.3.2` | | **Classifier** | (无)或 `jar-with-dependencies`(推荐) | --- ### ✅ 推荐下载地址(带所有依赖的 fat jar) 👉 使用带有 `-jar-with-dependencies` 后缀的版本,避免运行时缺少类! ``` https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mysql-cdc/2.3.2/flink-sql-connector-mysql-cdc-2.3.2-jar-with-dependencies.jar ``` 🔗 直接点击访问: > [https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mysql-cdc/2.3.2/flink-sql-connector-mysql-cdc-2.3.2-jar-with-dependencies.jar](https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mysql-cdc/2.3.2/flink-sql-connector-mysql-cdc-2.3.2-jar-with-dependencies.jar) ✅ 这个 JAR 包含了: - MySQL CDC 核心逻辑 - Debezium 引擎嵌入 - MySQL JDBC Driver(可选) - 所有依赖库(避免 `ClassNotFoundException`) --- ### ⚠️ 错误示例(不要用这些) ```bash # ❌ 错误:这不是 Ververica 的包 https://repo1.maven.org/maven2/org/apache/flink/flink-sql-connector-mysql-cdc/... # ❌ 错误:不存在这个路径 https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mysql-cdc/2.3.2/flink-sql-connector-mysql-cdc-2.3.2.jar # ↑ 缺少依赖,运行时报错 ``` --- ## ✅ 如何验证下载成功? 下载完成后检查文件大小: - `flink-sql-connector-mysql-cdc-2.3.2-jar-with-dependencies.jar` 大小约为 **~20MB** - 普通 jar(不带依赖)只有 ~200KB —— **不能用!** 你可以解压看看是否包含 `io.debezium` 等包: ```bash unzip -l flink-sql-connector-mysql-cdc-2.3.2-jar-with-dependencies.jar | grep debezium ``` 如果有输出,说明完整。 --- ## ✅ 放置位置建议 将该 JAR 放入 Flink 的 `lib/` 目录下: ```bash cp flink-sql-connector-mysql-cdc-2.3.2-jar-with-dependencies.jar /path/to/flink-1.16.3/lib/ ``` 这样在启动 SQL Client 时就能自动加载 CDC 功能。 --- ## ✅ 其他版本选择建议 | 版本 | 推荐场景 | |------|---------| | `2.3.2` | 推荐!稳定,支持 Flink 1.15~1.17,MySQL 8.0 | | `2.4.1` | 新特性多,但需注意是否兼容你的 Flink 版本 | | `3.0.0+` | 使用 Flink 1.18+ 和 JDK11,不适合你当前环境 | 📌 所以你应坚持使用: - **Flink 1.16.3** - **flink-cdc-connectors 2.3.2** - **JDK8** --- ## ✅ 如果无法访问 Maven Central?手动构建方法 如果网络受限,可以克隆源码自己打包: ```bash git clone https://github.com/ververica/flink-cdc-connectors.git cd flink-cdc-connectors git checkout release-2.3.2 # 构建 MySQL CDC 模块(生成 fat jar) mvn clean install -DskipTests -Pinclude-mysql ``` 生成的 JAR 在: ``` flink-sql-connector-mysql-cdc/target/flink-sql-connector-mysql-cdc-2.3.2-jar-with-dependencies.jar ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值