10分钟闪学 ,Flink SQL CLI 快速入门

2,140 阅读4分钟

一. 前言

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

通过这个定义我们可以看出一些特性 :

  • 源表 和 目标表 分别表示 来源数据集和输出数据集 ,他们本身都是虚拟表(逻辑表)
  • 源表 和 目标表 对应的外部数据源都需要是物理存在的
  • 整体来说 ,他们可以看成外部资源的抽象 ,其中包括连接信息 ,数据格式 , 字段映射

image.png

三. 前置准备

  • 前置准备过程中有两个要注意的点 :
    • 确定好要同步的数据集 ,比如 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 集群 ,创建完成可以看到以下几个容器 :

image.png

我们本次使用的 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
  • 可以看到 ,这里还有很多其他的脚本 :

image.png

image.png

3.2 安装 lib 资源包

我这边使用的是 MySQL 同步 ,所以我需要安装 MySQL 的资源包到服务器中 :

  • flink-connector-jdbc : 用于 Flink JDBC 连接 , 用于开启 Flink 的连接功能
  • mysql-connector-java : 用于连接具体的数据源 ,这里就是 MySQL
  • jar 包放在 lib 目录下面 ,可以在该目录底下找到很多类似的 jar

image.png

// 这里自行去 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 后 ,即可进行创建 动态表
  1. 创建资源表
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'
);
  1. 创建目标表
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'
);
  1. 创建操作流
INSERT INTO sink_ant_user SELECT id, user_name, user_code, user_value, user_status FROM source_ant_user;

image.png

重点 :

  • 注意你的 jar 包的版本号要匹配
  • 添加完 jar 后需要重启服务才能生效
  • 注意 Flink 版本 ,推荐使用高版本(我这边一开始使用低版本折腾了很久,很多命令都没有)

总结

Flink SQL CLI 主要用于进行一些简单的操作, 并不适合复杂的生产场景。

但是学习 Flink 可以通过这个环节入手,可以很直观的感受它的功能。

下一篇开始简单看看 CLI 的场景命令。

Flink 确实是个好东西,生态完善 ,功能好用 , 学一学很有用哦!!!

最后的最后 ❤️❤️❤️👇👇👇