Java应用Flink CDC监听MySQL数据变动内容输出到控制台

文章目录

maven 依赖

xml 复制代码
<properties>
        <flink.version>1.14.0</flink.version>
        <flink-cdc.version>2.3.0</flink-cdc.version>
    </properties>
    <dependencies>
        <!-- Flink dependencies -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-base</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>com.ververica</groupId>
            <artifactId>flink-sql-connector-mysql-cdc</artifactId>
            <version>${flink-cdc.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_2.12</artifactId>
            <version>${flink.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients_2.12</artifactId>
            <version>${flink.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table-api-java-bridge_2.12</artifactId>
            <version>${flink.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-runtime-web_2.12</artifactId>
            <version>${flink.version}</version>
        </dependency>
    </dependencies>

自定义数据变化处理器

java 复制代码
package org.example;

import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;

public class CustomSink extends RichSinkFunction<String> {
    @Override
    public void open(Configuration parameters) throws Exception {
        super.open(parameters);
    }

    @Override
    public void close() throws Exception {
        super.close();
    }

    @Override
    public void invoke(String value, Context context) throws Exception {
        //0P字段,该字段也有4种取值。分别是C(Create ) , U(Updlate) . D(Delete ),Read 。
        // 对于U操作,其数据部分同时包含了Before和After.
         System.out.println(">>>" + value);

    }
}
java 复制代码
package org.example;

import com.ververica.cdc.connectors.mysql.source.MySqlSource;
import com.ververica.cdc.debezium.DebeziumDeserializationSchema;
import com.ververica.cdc.debezium.JsonDebeziumDeserializationSchema;
import org.apache.flink.api.common.eventtime.WatermarkStrategy;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.configuration.RestOptions;
import org.apache.flink.streaming.api.datastream.DataStreamSink;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class MysqlSourceExample {
    public static void main(String[] args) throws Exception {
        DebeziumDeserializationSchema debeziumDeserializationSchema = new JsonDebeziumDeserializationSchema();
        MySqlSource<String> source = MySqlSource.builder()
                .hostname("127.0.0.1")
                .port(3306)
                .databaseList("canal_manager")// set captured database
                .tableList("canal_manager.canal_user")// set captured table
                .startupOptions(StartupOptions.latest()) // 设置从最新的修改记录开始读取
                .username("root")
                .password("123456")
                .deserializer(debeziumDeserializationSchema) // converts SourceRecord to JSON string
                .includeSchemaChanges(true)
                .build();
        //启动一个webuI。
        Configuration configuration = new Configuration();
        configuration.setInteger(RestOptions.PORT, 8081);
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(configuration);

        //检者点间隔时间
        env .enableCheckpointing(5000);
        DataStreamSink<String> sink = env.fromSource(source, WatermarkStrategy.noWatermarks(), "MySQL Source")
                .addSink(new CustomSink());
        env.execute();

    }
}

验证

启动后web页面地址访问http://localhost:8081/,MySQL数据库canal_manager中的表canal_user数据发生修改,控制台有输出json:

相关推荐
像豆芽一样优秀5 分钟前
Hive和Flink数据倾斜问题
大数据·数据仓库·hive·hadoop·flink
float_六七10 分钟前
Java Stream流:从入门到精通
java·windows·python
青云交22 分钟前
Java 大视界 -- 基于 Java 的大数据分布式存储在智慧城市时空大数据管理与应用中的创新实践(408)
java·hdfs·flink·智慧城市·hbase·java 分布式存储·时空大数据
赶飞机偏偏下雨29 分钟前
【Java笔记】单例模式
java·笔记·单例模式
小蒜学长1 小时前
基于Spring Boot的火灾报警系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
武昌库里写JAVA1 小时前
基于Spring Boot + Vue3的办公用品申领管理系统
java·spring boot·后端
中国lanwp1 小时前
Spring Boot的配置文件加载顺序和规则
java·spring boot·后端
我命由我123451 小时前
Android 开发 - 一些画板第三方库(DrawBoard、FingerPaintView、PaletteLib)
android·java·java-ee·android studio·安卓·android-studio·android runtime
福赖1 小时前
《MySQL基础——C 语言链接》
c语言·数据库·mysql
程序新视界1 小时前
如何为MySQL中的JSON字段设置索引
数据库·mysql