如何将Flink SQL Client连接至Kubernetes上的Flink集群?
前提:已通过Terraform + Helm部署Flink Kubernetes Operator(版本1.7.0),本地已下载对应版本的Flink SQL Client。
一、配置步骤
1. 部署Flink Session集群(若未部署)
当前Kubernetes集群仅运行Flink Operator,尚未创建实际的计算集群,需通过Operator部署Session集群:
- 创建Session集群配置文件(示例命名为
flink-session.yaml):
apiVersion: flink.apache.org/v1beta1 kind: FlinkSessionCluster metadata: name: flink-session spec: image: apache/flink:1.17.1 # 需与Operator版本兼容,1.7.0 Operator对应Flink 1.17.x系列 jobManager: replicas: 1 resource: memory: "2048m" cpu: 1 taskManager: resource: memory: "2048m" cpu: 1
- 应用配置到集群:
kubectl apply -f flink-session.yaml
- 等待Pod就绪,执行
kubectl get pods确认flink-session-jobmanager-xxx和flink-session-taskmanager-xxx状态为Running。
2. 暴露Flink JobManager的REST端口
Flink SQL Client需要连接JobManager的REST端口(默认8081),由于Session集群的默认Service为ClusterIP,需通过端口转发让本地访问:
kubectl port-forward svc/flink-session-jobmanager 8081:8081
保持该终端窗口处于打开状态,端口转发才能持续生效。
3. 配置本地Flink SQL Client连接远程集群
方法一:启动时直接指定连接参数
进入本地Flink SQL Client的bin目录,执行:
./sql-client.sh connect --remote-host localhost --remote-port 8081
方法二:修改配置文件
编辑Flink安装目录下的conf/sql-client-defaults.yaml,找到execution节点,修改为:
execution: planner: blink type: remote remote: host: localhost port: 8081
保存后启动SQL Client:
./sql-client.sh
二、连接验证方法
检查SQL Client启动状态
启动后若出现Flink SQL>提示符,且无连接失败类报错,说明连接已建立。执行测试SQL语句
在SQL Client中运行简单测试语句:
SELECT CURRENT_TIMESTAMP;
若能正常返回时间戳结果,证明连接可用。
查看Flink WebUI
在浏览器访问http://localhost:8081,进入Flink WebUI的「SQL」页面,可看到提交的查询任务,进一步验证连接有效性。检查JobManager日志
执行kubectl logs flink-session-jobmanager-xxx(替换为实际的JobManager Pod名称),查看日志中是否存在SQL Client连接的记录,确认连接正常建立。
内容的提问来源于stack exchange,提问作者Navid Sadeghi

