Kafka Connect连接Schema Registry超时及Postgres连接故障求助
问题总结与解决方案
最终问题根源是主机防火墙限制了Docker容器到主机的网络连通性,添加允许容器子网访问主机对应服务端口的防火墙规则后,所有连接问题解决。
问题排查过程
初始Schema Registry连接异常
配置中使用主机IP指定value.converter.schema.registry.url时,Kafka Connect抛出SerializationException,底层为SocketTimeoutException。但在主机上通过curl访问Schema Registry地址完全正常。- 在Connect容器内部测试:使用容器名
kafka-schemaregistry0-1访问Schema Registry(curl http://kafka-schemaregistry0-1:8085/schemas/ids/5)正常,说明容器间网络通信无问题,但容器到主机的网络通路受阻。 - 将Connector配置中的Schema Registry地址改为容器名后,Schema Registry连接恢复,但随即出现Postgres连接失败错误:
org.postgresql.util.PSQLException: The connection attempt failed,进一步确认容器无法访问主机上的服务。
- 在Connect容器内部测试:使用容器名
关键验证点
- 查看Docker网络信息:所有服务容器均处于
kafka_default桥接网络,子网为172.25.0.0/16,容器间IP和域名解析正常。 - 回顾近期操作:VM上安装NGINX并停止apache2,该操作可能修改了主机防火墙规则,导致容器子网的访问被阻断。
- 查看Docker网络信息:所有服务容器均处于
修复步骤
确认Docker容器子网
通过以下命令获取容器所属子网:docker network inspect kafka_default从输出中得到子网为
172.25.0.0/16。添加防火墙规则
允许容器子网访问主机的Postgres端口(默认5432)和Schema Registry端口(8085):- 若使用ufw防火墙:
ufw allow from 172.25.0.0/16 to any port 5432 ufw allow from 172.25.0.0/16 to any port 8085 ufw reload - 若使用iptables防火墙:
iptables -A INPUT -s 172.25.0.0/16 -p tcp --dport 5432 -j ACCEPT iptables -A INPUT -s 172.25.0.0/16 -p tcp --dport 8085 -j ACCEPT
- 若使用ufw防火墙:
验证修复效果
重启Kafka Connect容器,检查Connector日志确认连接正常:docker restart kafka-kafka-connect0-1
内容的提问来源于stack exchange,提问作者Kjell van Straaten
相关产品推荐
相关产品推荐

