一. 前言
Flink SQL CLI 是 Apache Flink 提供的一个命令行工具,用于与 Flink SQL 引擎交互。
用户可以通过 SQL 查询来执行实时数据处理任务、创建和管理表、查询和分析数据等。
本文要点 :
- 了解 Flink SQL CLI 的作用
- Flink SQL CLI 基础用法展示
二. Flink SQL CLI 基础概念
2.1 功能要点
Flink SQL CLI 是 Apache Flink 提供的一个命令行工具,用于运行和执行 SQL 查询 :
- SQL 查询交互 : 可以通过 CLI 直接输入和执行 SQL 查询 ,并且实时查看结果
- 连接不同数据源 : 可以通过 CLI 连接 MySQL , HDFS 等多种不同的数据券
- 创建动态表 : 可以在 CLI 中创建源表和目标表,用来存储计算结果
- 持久化操作 : 可以将 SQL 查询保存为脚本文件 ,反复使用和加载
什么是源表和目标表 ?
- 源表 :表示从外部数据源读取的数据流 ,可以是 MySQL , 也可以是 Kafka
- 目标表 :表示将查询结果输出到外部系统的目的地 , 同样可以是 MySQL 或者 Kafka
通过这个定义我们可以看出一些特性 :
- 源表 和 目标表 分别表示 来源数据集和输出数据集 ,他们本身都是虚拟表(逻辑表)
- 源表 和 目标表 对应的外部数据源都需要是物理存在的
- 整体来说 ,他们可以看成外部资源的抽象 ,其中包括
连接信息 ,数据格式 , 字段映射
三. 前置准备
- 前置准备过程中有两个要注意的点 :
- 确定好
要同步的数据集
,比如 MySQL 对应的表 - 准备好同步数据源
所需要的资源包
,放在 lib 中
- 确定好
3.1 数据准备
- 我在 MySQL 里面有一个数据表 : ant_user , 我希望从这个里面抽数 ,同时同步到另外一个表里面去
CREATE TABLE `ant_user` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`user_name` varchar(64) NOT NULL DEFAULT '' COMMENT '用户名',
`user_code` varchar(128) NOT NULL DEFAULT '' COMMENT '用户Code',
`user_value` varchar(1024) NOT NULL DEFAULT '' COMMENT '用户值',
`user_type` varchar(4) NOT NULL DEFAULT '' COMMENT '用户类型',
`user_status` tinyint NOT NULL DEFAULT '0' COMMENT '用户状态',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_create_time` (`create_time`) USING BTREE,
KEY `idx_update_time` (`update_time`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1373539253159535673 COMMENT='用户表';
// 再去建一个相同的 ant_user_image
前置要点 : Flink 集群体系
我这里使用的是 Docker Componse 创建的 Flink 集群 ,创建完成可以看到以下几个容器 :
我们本次使用的 sql-client.sh 可以在以上三个容器里面都可以找到 :
// S1 : 进入容器 (JobManager)
docker exec -it 39a4b262c935 /bin/bash
// S2 : 进入 Flink 目录
cd /opt/flink/bin
// S3 : 运行 sql-client.sh
./sql-client.sh embedded
- 可以看到 ,这里还有很多其他的脚本 :
3.2 安装 lib 资源包
我这边使用的是 MySQL 同步 ,所以我需要安装 MySQL 的资源包到服务器中 :
- flink-connector-jdbc : 用于 Flink JDBC 连接 , 用于开启 Flink 的连接功能
- mysql-connector-java : 用于连接具体的数据源 ,这里就是 MySQL
- jar 包放在 lib 目录下面 ,可以在该目录底下找到很多类似的 jar
// 这里自行去 https://mvnrepository.com/ 查询依赖的版本
wget https://repo1.maven.org/maven2/org/apache/flink/flink-connector-jdbc_2.12/xxx/flink-connector-jdbc_2.12-xxx.jar
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.27/mysql-connector-java-8.0.27.jar
添加后要重启一下 Docker 或者 Flink 服务
四. 创建要给同步 JOB
4.1 创建源表和目标表
- 进入 Job Manager 服务 sql-client 后 ,即可进行创建 动态表
- 创建资源表
CREATE TABLE source_ant_user (
id INT,
user_name STRING,
user_code STRING,
user_value STRING,
user_status INT,
PRIMARY KEY (id) NOT ENFORCED
) WITH (
'connector' = 'jdbc',
'url' = 'jdbc:mysql://39.106.111.111:3306/ant-test',
'table-name' = 'ant_user',
'username' = 'root',
'password' = 'test1111111'
);
- 创建目标表
CREATE TABLE sink_ant_user (
id INT,
user_name STRING,
user_code STRING,
user_value STRING,
user_status INT,
PRIMARY KEY (id) NOT ENFORCED
) WITH (
'connector' = 'jdbc',
'url' = 'jdbc:mysql://39.106.111.111:3306/ant-test',
'table-name' = 'ant_user_image',
'username' = 'root',
'password' = 'test1111111'
);
- 创建操作流
INSERT INTO sink_ant_user SELECT id, user_name, user_code, user_value, user_status FROM source_ant_user;
重点 :
- 注意你的 jar 包的版本号
要匹配
- 添加完 jar 后需要重启服务才能生效
- 注意 Flink 版本 ,
推荐使用高版本
(我这边一开始使用低版本折腾了很久,很多命令都没有)
总结
Flink SQL CLI 主要用于进行一些简单的操作, 并不适合复杂的生产场景。
但是学习 Flink 可以通过这个环节入手,可以很直观的感受它的功能。
下一篇开始简单看看 CLI 的场景命令。
Flink 确实是个好东西,生态完善 ,功能好用 , 学一学很有用哦!!!
最后的最后 ❤️❤️❤️👇👇👇
- 👈 欢迎关注 ,超200篇优质文章,未来持续高质量输出 🎉🎉
- 🔥🔥🔥 系列文章集合,高并发,源码应有尽有 👍👍
- 走过路过不要错过 ,知识无价还不收钱 ❗❗