Pulsar客户端连接集群时报getPartitionedTopicMetadata连接超时如何解决?
Pulsar客户端连接超时问题排查方案
异常信息
2021-03-10 14:38:26.107 WARN 7 --- [r-client-io-1-1]
o.a.pulsar.client.impl.ConnectionPool : Failed to open connection
to my-pulsar-server-ms-tls.domain.com:6651 :
io.netty.channel.ConnectTimeoutException: connection timed out:
my-pulsar-server-ms-tls.domain.com/10.80.13.38:6651 2021-03-10
14:38:26.212 WARN 7 --- [al-listener-3-1]
o.a.pulsar.client.impl.PulsarClientImpl : [topic:
persistent://myTenant/myNamespace/myTopic]
Could not get connection while getPartitionedTopicMetadata -- Will try
again in 100 ms
根因分析
已经确认证书、token有效,且其他环境同版本代码可正常连接集群,基本排除客户端代码逻辑、服务端整体故障的可能,问题集中在当前部署环境和Pulsar集群之间的链路层面:
- 网络访问策略限制:当前环境的出向防火墙、安全组、ACL拦截了到Pulsar集群6651端口的请求,或者Pulsar集群侧的入向规则、负载均衡白名单未放开当前环境的出口IP
- 路由不可达:当前环境的网络路由配置异常,无法到达Pulsar服务端所在的10.80.13.0/24网段
- 客户端配置失误:
serviceUrl未正确添加pulsar+ssl://前缀,使用普通pulsar协议访问TLS端口导致握手失败超时
排查解决步骤
- 第一步验证基础连通性:在应用部署节点执行端口连通性命令
如果执行结果为连接失败,直接定位为网络链路问题,联系运维同学排查两端的安全策略和路由配置# 任选一种命令执行 telnet my-pulsar-server-ms-tls.domain.com 6651 nc -zv my-pulsar-server-ms-tls.domain.com 6651 - 第二步验证域名解析:执行
nslookup my-pulsar-server-ms-tls.domain.com,确认解析结果和异常中给出的10.80.13.38一致,排除域名解析错误的问题 - 第三步验证客户端配置:确认
serviceUrl的完整格式为pulsar+ssl://my-pulsar-server-ms-tls.domain.com:6651,不要遗漏协议前缀 - 第四步验证TLS握手:如果基础连通性正常,执行openssl命令验证TLS链路:
如果握手失败,再检查证书文件的权限、路径配置是否正确openssl s_client -connect my-pulsar-server-ms-tls.domain.com:6651 -CAfile ${serverCertificateFilePath}
内容的提问来源于stack exchange,提问作者devinbost
相关产品推荐
相关产品推荐

