Flink学习---15、FlinkCDC(CDC介绍、案例实操)

                       星光下的赶路人star的个人主页

                      未来总是藏在迷雾中让人胆怯,但当你踏入其中,便会云开雾散

文章目录

  • 1、CDC简介
    • [1.1 什么是CDC](#1.1 什么是CDC)
    • [1.2 CDC的种类](#1.2 CDC的种类)
    • [1.3 Flink-CDC](#1.3 Flink-CDC)
  • 2、FlinkCDC案例实操
    • [2.1 开启MySQL Binlog并重启MySQL](#2.1 开启MySQL Binlog并重启MySQL)
    • [2.2 FlinkSQL方式的应用](#2.2 FlinkSQL方式的应用)
      • [2.2.1 导入依赖](#2.2.1 导入依赖)
      • [2.2.2 编写代码](#2.2.2 编写代码)

1、CDC简介

1.1 什么是CDC

CDC是Change Data Capture(变更数据获取)的简称。核心思想是,检测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件以及其他服务进行订阅及消费。

1.2 CDC的种类

CDC主要分为基于查询和基于Binlog两种方式,以下这两种之间的区别:

基于查询的CDC 基于Binlog的CDC
开源产品 Sqoop、DataX Canal、Maxwell
执行模式 Batch Streaming
是否可以捕获所有数据变化 否 是
延迟性 高延迟 低延迟
是否增加数据库压力 是 否

Flink摄取开发了Flink-cdc-connectors组件,这是一个可以直接从MySQL、PostgreSQL等数据库直接读取全量数据和增量变更数据的Source组件,

目前已经开源,开源地址:https://github.com/ververica/flink-cdc-connectors

2、FlinkCDC案例实操

2.1 开启MySQL Binlog并重启MySQL

java 复制代码
vim /etc/my.cnf

2.2 FlinkSQL方式的应用

2.2.1 导入依赖

xml 复制代码
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-table-planner-blink-loader
</artifactId>
    <version>1.17.0</version>
</dependency>

2.2.2 编写代码

java 复制代码
public class FlinkCDC_SQL {
    public static void main(String[] args) throws Exception {
        // TODO 1. 准备环境
        // 1.1 流处理环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(1);
        // 1.2 表执行环境
        StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);

        // TODO 2. 创建动态表
        tableEnv.executeSql("CREATE TABLE user_info (\n" +
                "id INT,\n" +
                "name STRING,\n" +
                "age INT,\n" +
                "primary key(id) not enforced\n" +
                ") WITH (" +
                "'connector' = 'mysql-cdc'," +
                "'hostname' = 'hadoop102'," +
                "'port' = '3306'," +
                "'username' = 'root'," +
                "'password' = '123456'," +
                "'database-name' = 'test'," +
                "'table-name' = 'user'" +
                ")");

        tableEnv.executeSql("select * from user_info").print();

        // TODO 3. 执行任务
        env.execute();
    }
}

运行截图:

MySQL表数据截图:

                      您的支持是我创作的无限动力

                      希望我能为您的未来尽绵薄之力

                      如有错误,谢谢指正;若有收获,谢谢赞美

相关推荐
智码看视界1 小时前
技术选型指南:Kafka Streams vs Flink:流处理框架选型实战对比与性能压测
flink·实时计算·状态管理·流处理·大数据架构·kafkastreams·流处理选型
starzy19901 小时前
KafkaProducer 源码深度剖析:batch 发送的条件
大数据·kafka
外收内放11 小时前
面向对象高级(实战案例)
开发语言·python·学习
薛定e的猫咪12 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
Data-Miner12 小时前
需要做财务数据分析,有什么好用的工具?从准备到出报告的实操指南
大数据·数据库·数据分析
薛定e的猫咪12 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
阿里云大数据AI技术14 小时前
StarRocks × Paimon C++:加速湖上数据分析
大数据·人工智能
用户36105886261214 小时前
Flink 配置深度剖析:从配置加载到参数调优的完整指南
大数据·flink
ha_lydms14 小时前
Window Functions(窗口函数)
大数据·数据仓库·hadoop·spark·数据处理·dataworks·maxcompute
2601_9520477914 小时前
委外入库单同步:旺店通到金蝶云星空的实战配置
大数据·钉钉·制造