Flink SQL Client 是 Flink 自带的一个命令行工具,允许用户以交互的方式编写和提交 SQL 任务。
以下是进入该界面的步骤以及在面试中需要注意的细节:
1. 进入 Flink SQL Client 的步骤
要启动 SQL Client,你首先需要有一个正在运行的 Flink 集群(本地或远程)。
-
启动集群(以本地为例): 在 Flink 安装目录下执行:
./bin/start-cluster.sh -
启动 SQL 客户端: 执行以下命令进入交互界面:
./bin/sql-client.sh成功进入后,你会看到一个非常经典的 ASCII 艺术风格的松鼠(Flink Logo)。
2. 两种执行模式
“SQL Client 提交的任务是怎么运行的?”
两种模式:
-
嵌入式模式 (Embedded Mode): 默认模式。SQL Client 进程本身就是一个简易的驱动程序,直接与集群通信。
-
网关模式 (Gateway Mode): 通过
flink-sql-gateway运行。这种模式下,SQL Client 只是一个远程客户端,适合生产环境的多用户并发访问。
3. 进入界面后的常用指令
进入界面后,你可以执行以下命令来检查环境:
4. 另一种“界面”:Flink Web UI
如果你的意思是可视化查看 SQL 任务的运行状态,那么应该进入 Flink Web UI:
-
默认地址通常是:
http://localhost:8081。 -
在 Web UI 中,你不能直接编写 SQL,但可以查看 SQL 任务转换后的 拓扑图 (Plan)、反压 (Backpressure) 情况和 Checkpoint 状态。
5. 进阶:如何集成 Hive 或 Kafka?
如何通过配置文件进入 SQL 界面并加载持久化元数据?
-
SQL Client 配置文件: 在新版本中,可以通过
sql-gateway-defaults.yaml或直接在启动时指定-i(init file) 来加载环境。 -
Catalog 配置: 只有配置了 Hive Catalog,你进入 SQL 界面后才能看到以前创建过的表,否则 SQL Client 重启后表信息会丢失。
我在 SQL Client 里执行了一个 SELECT 查询,为什么控制台一直转圈不出结果?
-
检查数据源: 是否有数据实时流入?
-
检查结果模式: 默认模式可能是
changelog,建议切换为tableau模式观察。 -
检查资源: 检查 Web UI,看 TaskManager 是否有足够的 Slot 来运行这个 Query 任务。
你想了解如何通过 Flink SQL Gateway 在 Web 端(如 Zeppelin)通过图形化界面写 SQL 吗?这在企业级开发中更常用。
想。
在企业级开发中,直接用命令行(SQL Client)的情况其实不多,更多是使用 Apache Zeppelin 或 Flink SQL Gateway 这种图形化或服务化的方式。
1. 为什么企业更倾向于可视化 SQL 界面?
-
多用户协作: 命令行不支持多人同时在线开发。
-
结果持久化: 命令行关掉,查询出的结果就没了;Zeppelin 可以保存查询历史。
-
可视化图表: Flink SQL 查出的流数据,在 Zeppelin 里可以直接转成实时的折线图或柱状图。
2. 通过 Zeppelin 连接 Flink SQL
Zeppelin 是目前 Flink 官方最推荐的可视化笔记本工具。
如何配置进入:
-
安装配置: 在
zeppelin-site.xml中配置flink.interpreter,指向你的 Flink 安装目录。 -
创建 Note: 进入 Zeppelin 网页(默认
8080端口),新建一个 Note。 -
编写 SQL: 使用
%flink.ssql(Streaming SQL) 或%flink.bsql(Batch SQL) 标识。
3. 通过 Flink SQL Gateway (中台化方案)
如果你的公司在做“实时计算平台”,那么 SQL Gateway 就是核心。
-
它的角色: 它像是一个“翻译官”。它暴露 REST API,接收来自 Web 端的 SQL 代码,然后把它提交给远端的 Flink 集群。
-
优势: 它可以管理 Session(会话)。这意味着你在这个界面定义的视图(View)或临时表,在另一个界面也能访问到。
4. Flink SQL 执行流程
当你点击界面上的“运行”按钮时,底层发生了什么?面试时按这个顺序说:
-
SQL 解析 (Parser): 将 SQL 文本解析为 SqlNode(抽象语法树 AST)。
-
校验 (Validator): 结合 Catalog(元数据)检查表名、列名、数据类型是否存在。
-
优化 (Optimizer): Flink 使用 Apache Calcite 将 SqlNode 转换成 RelNode,进行逻辑优化(如谓词下推、剪枝)。
-
物理计划生成: 将逻辑计划转换为 ExecNode。
-
转换 (Translate): 将 ExecNode 转换成 Flink 底层的 Transformation(即 Java 代码层次的算子)。
-
提交: 封装成 JobGraph 发送到 JobManager。
5. Flink SQL相关问题
-
Flink SQL 如何做维表关联(Lookup Join)?
-
通常使用
FOR SYSTEM_TIME AS OF语法,这需要维表实现LookupTableSource接口(比如连接 Redis 或 HBase)。
-
-
Flink SQL 如何保证 Exactly-once?
-
主要是通过开启 Checkpoint。在 SQL 界面中,你可以通过
SET 'execution.checkpointing.interval' = '10s';来开启。
-
(airflow-venv) frank@ZZHPC:~$ sql-client.sh
▒▓██▓██▒
▓████▒▒█▓▒▓███▓▒
▓███▓░░ ▒▒▒▓██▒ ▒
░██▒ ▒▒▓▓█▓▓▒░ ▒████
██▒ ░▒▓███▒ ▒█▒█▒
░▓█ ███ ▓░▒██
▓█ ▒▒▒▒▒▓██▓░▒░▓▓█
█░ █ ▒▒░ ███▓▓█ ▒█▒▒▒
████░ ▒▓█▓ ██▒▒▒ ▓███▒
░▒█▓▓██ ▓█▒ ▓█▒▓██▓ ░█░
▓░▒▓████▒ ██ ▒█ █▓░▒█▒░▒█▒
███▓░██▓ ▓█ █ █▓ ▒▓█▓▓█▒
░██▓ ░█░ █ █▒ ▒█████▓▒ ██▓░▒
███░ ░ █░ ▓ ░█ █████▒░░ ░█░▓ ▓░
██▓█ ▒▒▓▒ ▓███████▓░ ▒█▒ ▒▓ ▓██▓
▒██▓ ▓█ █▓█ ░▒█████▓▓▒░ ██▒▒ █ ▒ ▓█▒
▓█▓ ▓█ ██▓ ░▓▓▓▓▓▓▓▒ ▒██▓ ░█▒
▓█ █ ▓███▓▒░ ░▓▓▓███▓ ░▒░ ▓█
██▓ ██▒ ░▒▓▓███▓▓▓▓▓██████▓▒ ▓███ █
▓███▒ ███ ░▓▓▒░░ ░▓████▓░ ░▒▓▒ █▓
█▓▒▒▓▓██ ░▒▒░░░▒▒▒▒▓██▓░ █▓
██ ▓░▒█ ▓▓▓▓▒░░ ▒█▓ ▒▓▓██▓ ▓▒ ▒▒▓
▓█▓ ▓▒█ █▓░ ░▒▓▓██▒ ░▓█▒ ▒▒▒░▒▒▓█████▒
██░ ▓█▒█▒ ▒▓▓▒ ▓█ █░ ░░░░ ░█▒
▓█ ▒█▓ ░ █░ ▒█ █▓
█▓ ██ █░ ▓▓ ▒█▓▓▓▒█░
█▓ ░▓██░ ▓▒ ▓█▓▒░░░▒▓█░ ▒█
██ ▓█▓░ ▒ ░▒█▒██▒ ▓▓
▓█▒ ▒█▓▒░ ▒▒ █▒█▓▒▒░░▒██
░██▒ ▒▓▓▒ ▓██▓▒█▒ ░▓▓▓▓▒█▓
░▓██▒ ▓░ ▒█▓█ ░░▒▒▒
▒▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▓▓ ▓░▒█░
______ _ _ _ _____ ____ _ _____ _ _ _ BETA
| ____| (_) | | / ____|/ __ \| | / ____| (_) | |
| |__ | |_ _ __ | | __ | (___ | | | | | | | | |_ ___ _ __ | |_
| __| | | | '_ \| |/ / \___ \| | | | | | | | | |/ _ \ '_ \| __|
| | | | | | | | < ____) | |__| | |____ | |____| | | __/ | | | |_
|_| |_|_|_| |_|_|\_\ |_____/ \___\_\______| \_____|_|_|\___|_| |_|\__|
Welcome! Enter 'HELP;' to list all available commands. 'QUIT;' to exit.
Command history file path: /home/frank/.flink-sql-history
Flink SQL> SHOW CATALOGS;
+-----------------+
| catalog name |
+-----------------+
| default_catalog |
+-----------------+
1 row in set
Flink SQL>
(airflow-venv) frank@ZZHPC:~$ sql-gateway.sh
Starting sql-gateway daemon on host ZZHPC.

浙公网安备 33010602011771号