Flink 端口配置教程 - 解决与 Spark 的端口冲突
一、问题说明
默认端口冲突
Spark 和 Flink 的默认端口可能会发生冲突:
| 服务 | 默认端口 | 用途 |
|---|---|---|
| Spark Master UI | 8080 | Spark 集群管理界面 |
| Spark Application UI | 4040 | Spark 应用运行界面 |
| Spark/Flink 冲突 | 8081 | Web UI 端口冲突 |
| Flink Dashboard | 8081 (默认) | Flink 管理界面 |
如果同时运行 Spark 和 Flink,会导致端口冲突,其中一个服务无法启动或访问错误的界面。
二、解决方案:修改 Flink 端口
方案概览
将 Flink 的 Web UI 端口从 8081 改为 8082,避免与 Spark 冲突。
修改后的端口分配:
| 服务 | 端口 | 用途 |
|---|---|---|
| Spark Master UI | 8080 | Spark 集群管理 |
| Spark Application UI | 4040 | Spark 任务运行 |
| Spark History Server | 8081 | Spark 历史任务 |
| Flink Dashboard | 8082 | Flink 管理界面 |
三、修改步骤
步骤 1:停止 Flink 集群
如果 Flink 正在运行,先停止:
stop-cluster.sh
步骤 2:打开配置文件
nano $FLINK_HOME/conf/flink-conf.yaml
或者使用完整路径:
nano /opt/bigdata/flink/conf/flink-conf.yaml
步骤 3:修改端口配置
在配置文件中找到 rest.port 这一行(如果没有则添加),修改为:
# Web UI 端口(改为 8082,避免与 Spark 8081 冲突)
rest.port: 8082
完整的推荐配置:
#==============================================================================
# Common
#==============================================================================
# JobManager 的主机名或 IP 地址
jobmanager.rpc.address: localhost
# JobManager 的 RPC 端口
jobmanager.rpc.port: 6123
# JobManager Web UI 的端口(修改此项避免冲突)
rest.port: 8082
#==============================================================================
# JobManager
#==============================================================================
# JobManager 的 JVM 堆内存大小
jobmanager.memory.process.size: 1600m
#==============================================================================
# TaskManager
#==============================================================================
# TaskManager 的 JVM 堆内存大小
taskmanager.memory.process.size: 1728m
# 每个 TaskManager 提供的任务槽数量
taskmanager.numberOfTaskSlots: 4
#==============================================================================
# Parallelism
#==============================================================================
# 默认并行度
parallelism.default: 1
步骤 4:保存并退出
- 按
Ctrl + X - 按
Y确认保存 - 按
Enter确认文件名
步骤 5:重启 Flink 集群
start-cluster.sh
步骤 6:验证配置
1. 检查进程是否启动:
jps
应该看到:
StandaloneSessionClusterEntrypointTaskManagerRunner
2. 检查端口占用:
lsof -i :8082
应该看到类似输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 12345 user 123u IPv6 0x... 0t0 TCP *:8082 (LISTEN)
3. 查看日志确认:
tail -f $FLINK_HOME/log/flink-*-standalonesession-*.log
应该看到类似日志:
INFO [] - Rest endpoint listening at localhost:8082
INFO [] - http://localhost:8082 was granted leadership...
步骤 7:访问 Web UI
打开浏览器访问:http://localhost:8082
你应该看到 Flink Dashboard,显示:
- Overview(概览)
- Running Jobs(运行中的任务)
- Completed Jobs(已完成的任务)
- Task Managers(任务管理器)
- Job Manager(作业管理器)
四、其他端口配置(可选)
如果需要修改更多端口
在 flink-conf.yaml 中还可以配置:
# JobManager 的 RPC 端口(默认 6123)
jobmanager.rpc.port: 6123
# Web UI 端口(已修改为 8082)
rest.port: 8082
# TaskManager 的数据交换端口范围
taskmanager.rpc.port: 6122
# Blob Server 端口(用于传输大文件)
blob.server.port: 6124
# Query Server 端口(用于状态查询)
queryable-state.proxy.ports: 6125
修改 Spark 端口(另一种解决方案)
如果你更希望保持 Flink 使用默认端口 8081,可以修改 Spark 的端口:
修改 Spark Master UI 端口:
# 编辑 spark-env.sh
nano $SPARK_HOME/conf/spark-env.sh
# 添加或修改
export SPARK_MASTER_WEBUI_PORT=8083
修改 Spark Application UI 端口:
在启动 Spark 应用时添加参数:
spark-submit --conf spark.ui.port=4041 your-app.jar
五、端口冲突检测
检查端口是否被占用
# 检查 8081 端口
lsof -i :8081
# 检查 8082 端口
lsof -i :8082
# 检查多个端口
lsof -i :8080,:8081,:8082
查看所有监听端口
# macOS
netstat -an | grep LISTEN
# 或使用 lsof
lsof -nP -iTCP -sTCP:LISTEN
杀掉占用端口的进程
# 找到进程 PID
lsof -i :8081
# 杀掉进程
kill -9 <PID>
六、配置文件详解
flink-conf.yaml 结构
#==============================================================================
# 常规配置
#==============================================================================
jobmanager.rpc.address: localhost # JobManager 地址
jobmanager.rpc.port: 6123 # RPC 通信端口
rest.port: 8082 # Web UI 端口(重要)
#==============================================================================
# 高可用配置(可选)
#==============================================================================
# high-availability: zookeeper
# high-availability.storageDir: hdfs:///flink/ha/
# high-availability.zookeeper.quorum: localhost:2181
#==============================================================================
# 内存配置
#==============================================================================
jobmanager.memory.process.size: 1600m # JobManager 内存
taskmanager.memory.process.size: 1728m # TaskManager 内存
taskmanager.numberOfTaskSlots: 4 # 任务槽数量
#==============================================================================
# 并行度配置
#==============================================================================
parallelism.default: 1 # 默认并行度
#==============================================================================
# 检查点配置(可选)
#==============================================================================
# state.backend: filesystem
# state.checkpoints.dir: file:///tmp/flink-checkpoints
# state.savepoints.dir: file:///tmp/flink-savepoints
#==============================================================================
# 历史服务器配置(可选)
#==============================================================================
# jobmanager.archive.fs.dir: file:///tmp/flink-completed-jobs
# historyserver.web.address: localhost
# historyserver.web.port: 8083
七、验证配置生效
完整验证流程
# 1. 停止所有服务
stop-cluster.sh
# 2. 清理日志(可选)
rm -rf $FLINK_HOME/log/*
# 3. 启动集群
start-cluster.sh
# 4. 检查进程
jps | grep -E "Standalone|TaskManager"
# 5. 检查端口
lsof -i :8082
# 6. 查看日志
tail -f $FLINK_HOME/log/flink-*-standalonesession-*.log
# 7. 测试 Web UI
curl http://localhost:8082
预期输出
jps 命令输出:
12345 StandaloneSessionClusterEntrypoint
12346 TaskManagerRunner
lsof 命令输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 12345 user 123u IPv6 xxxxxx 0t0 TCP *:8082 (LISTEN)
curl 命令输出:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Flink Dashboard</title>
...
八、多环境端口规划建议
开发环境端口规划
| 服务 | 端口 | 说明 |
|---|---|---|
| Spark Master | 8080 | Spark 集群主节点 |
| Spark Worker | 8081 | Spark 工作节点 |
| Spark Application | 4040 | Spark 应用界面 |
| Flink | 8082 | Flink Dashboard |
| Hadoop NameNode | 9870 | HDFS 管理界面 |
| Hadoop ResourceManager | 8088 | YARN 资源管理 |
| Kafka | 9092 | Kafka Broker |
| ZooKeeper | 2181 | 协调服务 |
生产环境端口规划
建议使用防火墙规则限制端口访问,只对内网开放管理端口。
九、常见问题
Q1: 修改后仍然无法访问 8082
排查步骤:
# 1. 确认配置文件已保存
cat $FLINK_HOME/conf/flink-conf.yaml | grep rest.port
# 2. 完全重启集群
stop-cluster.sh
start-cluster.sh
# 3. 检查日志错误
tail -50 $FLINK_HOME/log/flink-*-standalonesession-*.log
# 4. 检查防火墙
# macOS 通常不需要配置防火墙
Q2: 端口修改后提交任务失败
原因: 客户端仍使用旧端口
解决: 在提交任务时指定新端口
flink run -m localhost:8082 your-job.jar
或在代码中指定:
val env = StreamExecutionEnvironment
.createRemoteEnvironment("localhost", 8082, "your-job.jar")
Q3: 想恢复默认端口 8081
步骤:
# 1. 编辑配置文件
nano $FLINK_HOME/conf/flink-conf.yaml
# 2. 将 rest.port 改回 8081 或删除该行
rest.port: 8081
# 3. 重启集群
stop-cluster.sh
start-cluster.sh
十、总结
关键要点
✅ Flink 默认端口 8081 可能与 Spark 冲突
✅ 修改 flink-conf.yaml 中的 rest.port 为 8082
✅ 修改后需要重启 Flink 集群才能生效
✅ 使用 lsof 命令验证端口配置成功
✅ 访问 http://localhost:8082 查看 Flink Dashboard
配置文件位置
$FLINK_HOME/conf/flink-conf.yaml
或
/opt/bigdata/flink/conf/flink-conf.yaml
验证命令
# 查看配置
cat $FLINK_HOME/conf/flink-conf.yaml | grep rest.port
# 检查端口
lsof -i :8082
# 测试访问
curl http://localhost:8082
现在你可以同时运行 Spark 和 Flink,互不干扰!🎉
更多推荐
所有评论(0)