Flink CDC 实时同步MySQL数据到Kafka

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);
        }

    }
}

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Flink CDC (Change Data Capture) 可以实现实时MySQL 数据同步数据。使用 Flink CDC 连接到 MySQL 数据库后,可以监听数据库中的变更(例如新增、更新和删除)并将其实时传输到其他系统,如 Kafka、Elasticsearch 或其他数据库。 ### 回答2: Flink CDC 是一个基于 Flink 的开源项目,它是一种基于 Apache Flink实时流式数据同步的解决方案。Flink CDC 可以实时监控 MySQL 中的数据变化,并将这些变化同步到目标系统中。在实时数据同步中,Flink CDC 的优点包括高性能、高可靠性和低延迟。下面将从 Flink CDCMySQL 的角度分析如何实现实时数据同步Flink CDC 是通过监视 MySQL 的 binlog 变化来实现实时数据同步的,因此同步前必须要开启 MySQL 的 binlog。Flink CDC 的工作流程如下:首先,Flink CDC 会连接到 MySQL 数据库,监听其 binlog 的变化。当 binlog 发生变化时,Flink CDC 就会捕获 MySQL 中的增、删、改操作,并将这些操作作为一个事件发出。接着,Flink CDC 将这些事件写入 Kafka 或者其他消息队列系统中。最后,Flink CDC 会从 Kafka读取消息并对其进行转换、过滤和聚合等操作,最终将数据同步到目标系统中,例如 Hadoop、Elasticsearch 或其他 NoSQL 数据库。 作为一个流处理框架,Flink CDC 具有高可扩展性和高性能的特征,可以处理大规模的并发请求和流量。同时,Flink CDC 支持多种格式的数据,包括 Avro、JSON 和 protobuf 等。另外,非常重要的一点是 Flink CDC 具有实时性,其处理延迟通常可以控制在毫秒级别以内。 当然,在实现实时同步 MySQL 时,Flink CDC 还需要处理一些细节问题,例如如何管理 MySQL 的 binlog、如何优化数据的转换和过滤、如何保证数据的可靠性和完整性等。此外,数据同步的效率也需要根据具体情况进行调优,以达到最优的同步效果。 综上所述,Flink CDC 是一种高效、灵活、可靠的实时数据同步方案,可用于将 MySQL 数据库中的数据实时同步到其他系统。实现数据同步的过程中需要注意一些细节问题,但只要采用恰当的方法和调优,就可以轻松实现高效的数据同步。 ### 回答3: Flink CDC 是一个 Flink 社区开源的工具,它能够实时MySQL的binlog中提取数据,并将这些数据通过 Flink 运算到任意的数据存储,从而实现 MySQL 数据库的实时同步Flink CDC 的原理很简单,当 MySQL 数据库中的数据发生变化时,binlog 会记录下这些变化的信息,Flink CDC 就可以通过监听 binlog 实时获取到这些变化,再将变化数据通过 Flink 程序处理和同步到其他的存储中。 Flink CDC 的特点是支持实时同步和高可靠性,它可以快速的捕获数据变化并同步到其他数据源中,同时通过CDC去除了对原始数据读取和写入操作,避免了对MySQL的影响。它还支持多种数据输出端,包括 HDFS、Kafka、Elasticsearch、Redis、HBase、JDBC、MBBROKER 等。 使用 Flink CDC 进行 MySQL 数据库的实时同步,需要经历以下几个步骤: 1. 确认 MySQL 是否开启 binlog,如果没有开启,需要在 my.cnf 中添加相应配置。 2. 安装 Flink CDC,可以从官方文档中获取相应的安装包,然后按照文档使用相应的方式进行安装。 3. 配置 Flink CDC,根据实际需求配置相应的参数,例如 CDC 连接、数据输入输出、数据映射、表过滤等。 4. 编写 Flink 程序,根据需求选择相应的 Flink API,如 DataStream API、SQL API、Table API 等进行具体的数据处理操作。 5. 启动 Flink 程序,通过 Zookeeper 进行 Flink Job Cluster 的管理,可实现 Flink 应用程序的自动化部署和扩展。 总之,Flink CDC 是一个非常实用的工具,可以实时同步 MySQL 数据库中的数据。使用 Flink CDC 可以简化数据同步的实现,并为数据处理、管理等提供更多的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

星辰境末

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

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

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

打赏作者

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

抵扣说明:

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

余额充值