背景
最近在部署flink集群,jobmanager的 8081 端口可以访问,但是 task managers 这里什么都没有显示,估计是 启动失败。
在task manager的服务器上翻日志,可以找到一些有用的信息:
2023-01-18 16:32:46: 2023-01-18 16:32:46,317 WARN akka.remote.transport.netty.NettyTransport [] - Remote connection to [null] failed with java.net.ConnectException: Connection refused: taskmanager/xxxx:6123
2023-01-18 16:32:46: 2023-01-18 16:32:46,318 WARN akka.remote.ReliableDeliverySupervisor [] - Association with remote system [akka.tcp://flink@taskmanager:6123] has failed, address is now gated for [50] ms. Reason: [Association failed with [akka.tcp://flink@taskmanager:6123]] Caused by: [java.net.ConnectException: Connection refused: taskmanager/xxxx:6123]
2023-01-18 16:32:46: 2023-01-18 16:32:46,320 INFO org.apache.flink.runtime.taskexecutor.TaskExecutor [] - Could not resolve ResourceManager address akka.tcp://flink@taskmanager:6123/user/rpc/resourcemanager_*, retrying in 10000 ms: Could not connect to rpc endpoint under address akka.tcp://flink@taskmanager:6123/user/rpc/resourcemanager_*.
应该是 taskmanager 的配置出了问题。
解决办法
1、首先检查配置:
flink-conf.yaml 文件
jobmanager.rpc.address: jobmanager Ip
确保这里配置的是 jobmanager 对应的 ip 或者 主机名。
如果还是报错,添加如下配置:
taskmanager.host: localhost
2、
以上两个是网上比较常用的建议。可是问题并没有解决,报错的内容还是一样的,而jobmanager 并没有报错。
由此想到 taskmanager的 jobmanager.rpc.address 配置并不是来自于 flink-conf.yaml。我的部署方式是通过docker来进行的,最终的解决办法是在docker-compose.yml中进行配置。
environment:
FLINK_PROPERTIES: |-
jobmanager.rpc.address: xxxx
至此,问题解决。
ps:taskmanager.numberOfTaskSlots 也是通过 docker-compose.yml 进行配置的