8. Flink-CDC

Flink-cdc主要是用来同步数据库中的数据,它的主要优势在于基于Flink框架直接用Flink Stream Api 或Flink SQL 直接编程,不需要引入第三方组件

Flink-cdc在使用上需要注意的点

  • 注意Flink-cdc在2.1版本之前需要导入MySQL的连接包,之后版本不需要,如果环境中有MySQL的连接包需要去除掉
  • 在2.4版本之监控MySQL表需要它有主键,2.4版本开始只需要配置"scan.incremental.snapshot.chunk.key-column"参数即可
  • MySQL CDC Connector在监控多个表的时候,每个表需要指定库名,并用逗号隔开
  • Flink中必须要设置checkpoint,不设置无法正常监控binlog变更日志
    Flink-CDC基于DataStream的使用
java 复制代码
MySqlSource<String> mySqlSource = MySqlSource.<String>builder()
        .hostname("node2")      //设置MySQL hostname
        .port(3306)             //设置MySQL port
        .databaseList("db1")    //设置捕获的数据库
        .tableList("db1.tbl1,db1.tbl2") //设置捕获的数据表
        .username("root")       //设置登录MySQL用户名
        .password("123456")     //设置登录MySQL密码
        .deserializer(new JsonDebeziumDeserializationSchema()) //设置序列化将SourceRecord 转换成 Json 字符串
        .startupOptions(StartupOptions.initial())
        .build();
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
//开启checkpoint
env.enableCheckpointing(5000);
env.fromSource(mySqlSource, WatermarkStrategy.noWatermarks(),"MySQL Source")
        .setParallelism(4)
        .print();
env.execute();

基于Flink Sql的使用

java 复制代码
EnvironmentSettings settings = EnvironmentSettings.newInstance().inStreamingMode().build();
TableEnvironment tableEnv = TableEnvironment.create(settings);
//设置checkpoint
tableEnv.getConfig().getConfiguration().setLong("execution.checkpointing.interval", 5000L);
tableEnv.executeSql("" +
        "CREATE TABLE mysql_binlog (" +
        " id INT," +
        " name STRING," +
        " age INT," +
        " PRIMARY KEY(id) NOT ENFORCED" +
        ") WITH (" +
        " 'connector' = 'mysql-cdc'," +
        " 'hostname' = 'node2'," +
        " 'port' = '3306'," +
        " 'username' = 'root'," +
        " 'password' = '123456'," +
        " 'database-name' = 'db1'," +
        " 'table-name' = 'tbl1'" +
        ")");
tableEnv.executeSql("select * from mysql_binlog").print();

并行读取表的全量快照,然后以单并行度方式读取表的binlog进行增量数据的同步

  • 全量同步过程中,它会根据主键把数据分为多个chunk分片,然后分配给多并行度去分别读取这些chunk上的数据,读取快照期间,Flink支持chunk级别的checkpoint,即使在同步的过程中发生故障,也可以做到exactly-once级别的恢复

启动模式是指程序启动的时候,以怎么的方式监控数据库中的数据,共有如下几种模式

  • initial(默认): 对受监控的库表进行初始快照,并继续读取最新的binlog
  • earliest-offset: 它会跳过快照直接读取最早的binlog日志,它与initial方式区别在于,initial只读取已经操作后(表中现有数据)的数据
  • latest-offset: 不执行快照,从binlog的最新处开始读取增量数据
  • specific-offset: 从指定的binlog位点开始读取,位点可以通过binlog文件名和位置指定
  • timestamp: 从指定的时间戳读取binlog事件
相关推荐
渣渣盟41 分钟前
基于Scala实现Flink的三种基本时间窗口操作
开发语言·flink·scala
网安INF43 分钟前
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
java·web安全·网络安全·flink·漏洞
一叶知秋哈43 分钟前
Java应用Flink CDC监听MySQL数据变动内容输出到控制台
java·mysql·flink
代码匠心6 小时前
从零开始学Flink:揭开实时计算的神秘面纱
java·大数据·后端·flink
Apache Flink1 天前
Flink在B站的大规模云原生实践
大数据·云原生·flink
lifallen1 天前
Flink checkpoint
java·大数据·算法·flink
长河2 天前
Flink 重启后事件被重复消费的原因与解决方案
大数据·flink
网安INF2 天前
CVE-2020-17518源码分析与漏洞复现(Flink 路径遍历)
java·web安全·网络安全·flink·漏洞
火龙谷2 天前
【hadoop】Flink安装部署
flink
£菜鸟也有梦3 天前
从0到1,带你走进Flink的世界
大数据·hadoop·flink·spark