Flink CDC 实时同步MySQL数据到Kafka

本文介绍了如何使用ApacheFlink的CDC功能从MySQL实时捕获数据变化,通过FlinkMySQLSource读取维度数据,然后将数据同步到Kafka。涉及的配置步骤和代码实现细节清晰详尽。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.前置要求

flink cdc底层就是通过监控mysql的binlog日志,实时捕获到一个表或多个表的变更;所以必须开启mysql的binlog日志。

1.1 打开mysql配置文件

mysql配置文件默认位于/etc/目录下,直接用过以下命令开启

sudo vim /etc/my.cnf

1.2 修改配置文件

##启动binlog,该参数的值会作为binlog的文件名
log-bin=mysql-bimysql
##binlog类型
binlog_format=row
##启用binlog的数据库,需根据实际情况作出修改,一个库占一行
binlog-do-db=库名
binlog-do-db=库名

1.3 重启mysql服务

systemctl restart mysqld

2.环境依赖

        <dependency>
            <groupId>com.ververica</groupId>
            <artifactId>flink-connector-mysql-cdc</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-kafka</artifactId>
            <version>1.17.0</version>
        </dependency>

如果cdc版本用了2.4.0出现异常的可以退回2.3.0

3.代码实现

public class TestApp {

    public static void main(String[] args) {

        //1.获取执行环境
        Configuration conf = new Configuration();
        //设置web端口
        conf.setInteger("rest.port",10000);
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(conf);

        //2.通过flink cdc 读取mysql中的维度数据并创建流
        MySqlSource<String> mySqlSource = MySqlSource.<String>builder()
                .hostname("主机号")
                .port(3306)
                .username("用户名")
                .password("密码")
                //设置mysql数据库
                .databaseList("数据库名")
                //设置mysql表(多个用,分隔)
                .tableList("表1,表2")
                //设置cdc启动方式
                .startupOptions(StartupOptions.initial())
                //设置反序列化器
                .deserializer(new JsonDebeziumDeserializationSchema())
                .build();
        DataStreamSource<String> streamSource = env.fromSource(mySqlSource, WatermarkStrategy.noWatermarks(), "cdc-source");

        //3.数据同步到kafka
        KafkaSink<String> kafkaSink = KafkaSink.<String>builder()
                //指定Kafka的连接地址
                .setBootstrapServers("主机:端口号")
                //指定序列化器
                .setRecordSerializer(
                        KafkaRecordSerializationSchema.<String>builder()
                                .setTopic("Topic")
                                .setValueSerializationSchema(new SimpleStringSchema())
                                .build()
                )
                //写入kafka的一致性级别
                .setDeliveryGuarantee(DeliveryGuarantee.EXACTLY_ONCE)
                //如果是精确一次,必须设置事务的前缀
                .setTransactionalIdPrefix("zhike-")
                //如果是精确一次必须设置事务超时时间
                .setProperty(ProducerConfig.TRANSACTION_TIMEOUT_CONFIG, "300000")
                .build();

        streamSource.sinkTo(kafkaSink);
        //4.执行任务
        try {
            env.execute("ods_cdc");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }
}

Flink CDCMySQL 同步Kafka 的流程如下: 1. 配置 MySQL 数据源:在 Flink CDC 中,使用 JDBC Connector 连接 MySQL 数据库,并配置相应的参数,例如数据库连接 URL、用户名、密码等。 2. 配置 Kafka 数据接收器:使用 Kafka Connector 连接 Kafka,配置相应的参数,例如 Kafka 主题、Kafka Broker 地址等。 3. 创建 Flink CDC 任务:使用 Flink SQL 或 Flink Table API 创建 Flink CDC 任务,并配置相应的数据源和数据接收器。 4. 启动 Flink CDC 任务:使用 Flink 自带的命令行工具或 Web UI 启动 Flink CDC 任务,开始同步 MySQL 数据Kafka 中。 具体的步骤如下: 1. 下载并安装 Flink:从 Flink 官网下载并安装 Flink。 2. 配置 MySQL 数据源:在 Flink 的 conf 目录下创建一个新的文件,例如 mysql.properties,配置 MySQL 数据源相关的参数,例如: ``` connector.class = jdbc connector.url = jdbc:mysql://localhost:3306/test?useSSL=false connector.table = my_table connector.username = root connector.password = password ``` 3. 配置 Kafka 数据接收器:在 Flink 的 conf 目录下创建一个新的文件,例如 kafka.properties,配置 Kafka 数据接收器相关的参数,例如: ``` connector.class = kafka connector.topic = my_topic connector.properties.bootstrap.servers = localhost:9092 ``` 4. 创建 Flink CDC 任务:使用 Flink SQL 或 Flink Table API 创建 Flink CDC 任务,例如: ``` CREATE TABLE my_table ( id INT, name STRING, age INT ) WITH ( 'connector' = 'jdbc', 'url' = 'jdbc:mysql://localhost:3306/test?useSSL=false', 'table-name' = 'my_table', 'username' = 'root', 'password' = 'password' ); CREATE TABLE my_topic ( id INT, name STRING, age INT ) WITH ( 'connector' = 'kafka', 'topic' = 'my_topic', 'properties.bootstrap.servers' = 'localhost:9092' ); INSERT INTO my_topic SELECT * FROM my_table; ``` 5. 启动 Flink CDC 任务:使用 Flink 自带的命令行工具或 Web UI 启动 Flink CDC 任务,例如: ``` ./bin/flink run -c com.example.MyCDCJob /path/to/my/cdc/job.jar ``` 通过以上步骤,就可以实现从 MySQL 同步数据Kafka 中的流程。需要注意的是,Flink CDC 可以根据实际的需求进行调整,例如任务并行度、缓冲区大小等参数。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

星辰境末

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

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

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

打赏作者

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

抵扣说明:

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

余额充值