我已经安装了Flink 2.0.1,它包含Flink SQL Gateway吗?
1. 它是官方标准组件吗?
是的。 从 Flink 1.16 版本开始,Flink SQL Gateway 就已经正式从外部项目合并到了 Flink 的核心发行包中。
只要你安装的是最近两年的主流版本(如 1.16, 1.17, 1.18, 1.19, 1.20),你的安装目录下一定已经包含了它。
2. 如何确认它在不在?
你可以进入你的 Flink 安装目录进行检查:
-
脚本文件: 检查
bin/目录。你应该能看到sql-gateway.sh文件。ls bin/sql-gateway.sh -
库文件: 检查
lib/目录。你应该能看到类似flink-sql-gateway-*.jar的文件。
3. 如何启动它?
-
启动前置: 确保你的 Flink Session 集群(JobManager/TaskManager)已经启动。
-
启动 Gateway:
sql-gateway.sh start -Dsql-gateway.endpoint.rest.address=0.0.0.0 -Dsql-gateway.endpoint.rest.port=8083Check log files to make sure it started successfully:
(airflow-venv) frank@ZZHPC:~/download/flink-2.0.1/log$ lh | grep gateway -rw-r--r-- 1 frank frank 0 Dec 22 21:01 flink-frank-sql-gateway-1-ZZHPC.out -rw-r--r-- 1 frank frank 15K Dec 22 21:01 flink-frank-sql-gateway-1-ZZHPC.log
(airflow-venv) frank@ZZHPC:~/download/flink-2.0.1/log$ netstat -tuln | grep 8083 tcp6 0 0 :::8083 :::* LISTEN
-
验证: 你可以通过 curl 访问它的 REST API 来验证:
(airflow-venv) frank@ZZHPC:~/download/flink-2.0.1/log$ curl http://localhost:8083/v1/info {"productName":"Apache Flink","version":"2.0.1"}(airflow-venv)
4. 为什么要单独启动它?
既然有了 sql-client.sh,为什么还要单独起一个 sql-gateway.sh?
-
多客户端接入:
sql-client只能一个人用命令行。sql-gateway启动后,你可以同时让 Zeppelin、DBeaver(通过 JDBC)或者你自研的 Web UI 同时连接进来。 -
状态保持: SQL Gateway 维护了用户的 Session。即便你的 Zeppelin 页面刷新了,Gateway 里的临时表和视图依然存在。
-
JDBC 支持: Flink 提供了一个 SQL JDBC Driver,这个 Driver 底层就是通过 REST 协议去连接 SQL Gateway 的。
在 Zeppelin 中配置 Flink Interpreter 以连接 SQL Gateway,需要在 Zeppelin 的 Web 界面进行设置。
以下是具体的关键参数配置清单(在 Interpreter 设置页面找到 flink 分组):
1. 核心连接参数
这些参数决定了 Zeppelin 如何找到你的 SQL Gateway。
| 参数名 | 推荐值/示例 | 说明 |
| flink.execution.mode | remote | 必须设置为 remote 模式才能连接外部 Gateway。 |
| flink.sql.gateway.address | 192.168.1.100 | 运行 SQL Gateway 服务的 IP 地址。 |
| flink.sql.gateway.port | 8083 | SQL Gateway 默认端口是 8083。 |
| FLINK_HOME | /opt/flink | 非常重要:Zeppelin 本机也需要一份 Flink 二进制包,以便调用本地类库。 |
2. 运行时与资源配置
为了确保 SQL 任务能顺利提交,建议同时检查以下参数:
-
flink.address: 设置为你的 JobManager 地址(例如
localhost:8081)。 -
flink.main.container.image: 如果你在 Kubernetes 上运行,这里需要填入 Flink 的镜像名。
-
zeppelin.flink.enable.sql.gateway: 设置为
true。
3. 如何在 Zeppelin 中使用(代码层)
配置完成后,在 Zeppelin 的笔记(Note)里,你需要使用专用的前缀来切换到 SQL Gateway 模式:
-
流处理 SQL:
%flink.ssql -
批处理 SQL:
%flink.bsql
示例代码:
%flink.ssql(type=update)
-- 这里的查询会通过 SQL Gateway 发送到 Flink 集群
SELECT window_start, window_end, COUNT(*)
FROM TABLE(TUMBLE(TABLE MySensorTable, DESCRIPTOR(ts), INTERVAL '1' MINUTE))
GROUP BY window_start, window_end;

(airflow-venv) frank@ZZHPC:~/download/flink-2.0.1/opt$ cp flink-python-2.0.1.jar ../lib (airflow-venv) frank@ZZHPC:~/download/flink-2.0.1/opt$ zeppelin-daemon.sh stop Please specify HADOOP_CONF_DIR if USE_HADOOP is true Zeppelin stop [ OK ] (airflow-venv) frank@ZZHPC:~/download/flink-2.0.1/opt$ stop-cluster.sh Stopping taskexecutor daemon (pid: 7627) on host ZZHPC. Stopping standalonesession daemon (pid: 7077) on host ZZHPC. (airflow-venv) frank@ZZHPC:~/download/flink-2.0.1/opt$ sql-gateway.sh stop Stopping sql-gateway daemon (pid: 13364) on host ZZHPC. (airflow-venv) frank@ZZHPC:~/download/flink-2.0.1/opt$ start-cluster.sh Starting cluster. Starting standalonesession daemon on host ZZHPC. Starting taskexecutor daemon on host ZZHPC. (airflow-venv) frank@ZZHPC:~/download/flink-2.0.1/opt$ sql-gateway.sh start -Dsql-gateway.endpoint.rest.address=0.0.0.0 -Dsql-gateway.endpoint.rest.port=8083 Starting sql-gateway daemon on host ZZHPC. (airflow-venv) frank@ZZHPC:~/download/flink-2.0.1/opt$ zeppelin-daemon.sh start Please specify HADOOP_CONF_DIR if USE_HADOOP is true Zeppelin start [ OK ] (airflow-venv) frank@ZZHPC:~/download/flink-2.0.1/opt$ netstat -tuln | grep 8081 tcp6 0 0 :::8081 :::* LISTEN (airflow-venv) frank@ZZHPC:~/download/flink-2.0.1/opt$ netstat -tuln | grep 8083 tcp6 0 0 :::8083 :::* LISTEN (airflow-venv) frank@ZZHPC:~/download/flink-2.0.1/opt$ netstat -tuln | grep 8084 tcp6 0 0 :::8084 :::* LISTEN


浙公网安备 33010602011771号