flink mysql cdc到kafka

思路:

1、创建flink mysql cdc表

2、将order join products的结果写入到kafka表中。

这样就相当于完成了,DWD中的事实表构建。写入到kafka中,等待消费构建DWS或者ADS。

主要参考https://ververica.github.io/flink-cdc-connectors/master/content/快速上手/index.html

安装flink1.3.5

启动单机版 flink

./bin/start-cluster.sh

启动flink sql clint

./bin/sql-client.sh

有三种展示结果的模式:

SET sql-client.execution.result-mode=table;

SET sql-client.execution.result-mode=changelog;

SET sql-client.execution.result-mode=tableau;

使用flink cdc2.1.1

下载flink-sql-connector-mysql-cdc-2.1.1.jar 放到flink_home/lib下

https://github.com/ververica/flink-cdc-connectors/releases

在mysql中准备数据

-- MySQL

CREATE DATABASE mydb;

USE mydb;

CREATE TABLE products (

  id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,

  name VARCHAR(255) NOT NULL,

  description VARCHAR(512)

);

ALTER TABLE products AUTO_INCREMENT = 101;

INSERT INTO products

VALUES (default,"scooter","Small 2-wheel scooter"),

       (default,"car battery","12V car battery"),

       (default,"12-pack dril

### 使用 Flink CDC 实现 MySQL 数据变更捕获与 Kafka 流处理集成 #### 1. 添加依赖项 为了实现这一功能,在项目中需引入必要的 Maven 或 Gradle 依赖来支持 FlinkFlink CDCKafka 的连接器。 对于 Maven 用户来说,`pom.xml` 文件应包含如下片段: ```xml <dependencies> <!-- Flink dependencies --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.12</artifactId> <version>${flink.version}</version> </dependency> <!-- Flink CDC Connector for MySQL --> <dependency> <groupId>com.ververica</groupId> <artifactId>flink-connector-mysql-cdc</artifactId> <version>2.3.0</version> </dependency> <!-- Kafka connector dependency --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-kafka_2.12</artifactId> <version>${flink.version}</version> </dependency> </dependencies> ``` #### 2. 创建源表定义 通过 SQL DDL 定义一个逻辑上的 "source table" 来表示来自 MySQL 的输入流。此操作会自动启动 Debezium 连接器监听指定数据库的变化日志。 ```sql CREATE TABLE mysql_source ( id BIGINT, name STRING, description STRING, PRIMARY KEY (id) NOT ENFORCED ) WITH ( 'connector' = 'mysql-cdc', 'hostname' = 'localhost', -- 替换为实际主机名 'port' = '3306', -- 默认端口可调整 'username' = 'root', -- 更改为有效用户名 'password' = 'your_password_here', -- 设置相应密码 'database-name' = 'test_db', -- 指定要监控的数据库名称 'table-name' = 'orders' -- 关注的具体表格列表 ); ``` #### 3. 构建 Sink 表至 Kafka 主题 同样利用 SQL 声明方式创建目标存储位置——即 Kafka topic ——用于接收由上述 source 所产生的记录序列。 ```sql CREATE TABLE kafka_sink ( id BIGINT, name STRING, description STRING ) WITH ( 'connector' = 'kafka', 'topic' = 'order_updates_topic', -- 自定义主题名字 'properties.bootstrap.servers' = 'localhost:9092', -- Kafka broker 地址 'format' = 'json' ); ``` #### 4. 启动数据管道作业 最后一步是编写一段简单的 Java/Scala 应用程序代码用来提交整个 ETL 工作流程给 Apache Flink 集群执行。 ```java import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; // ... other imports ... public class MysqlToKafkaJob { public static void main(String[] args) throws Exception { final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); String createSourceTableDDL = "..."; // 上述 Source Table DDL String createSinkTableDDL = "..."; // 上述 Sink Table DDL tEnv.executeSql(createSourceTableDDL); tEnv.executeSql(createSinkTableDDL); // 插入查询语句将变化的数据从 MySQL 发送到 Kafka 中去 tEnv.executeSql( "INSERT INTO kafka_sink SELECT * FROM mysql_source" ); env.execute("Mysql to Kafka Data Pipeline"); } } ``` 以上过程展示了如何配置 Flink CDC 以实现实时捕获 MySQL 数据库内的变动,并借助于 Apache Kafka 将其高效地分发出去[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值