通过SSH隧道配置Debezium源连接器连接PostgreSQL报Connection refused错误
问题排查解决步骤
- 首先确认Debezium(Kafka Connect服务)的运行环境
你本地的Dbeaver/PgAdmin能连接,是因为SSH隧道搭建在你本地机器上,你本地访问localhost:6432指向的是本地的隧道转发端口。如果Debezium运行在Docker容器、远程服务器、K8s集群等非你本地的环境中,它访问的localhost是自身所在的运行环境,不是你本地机器,自然无法连接到你本地的隧道端口。
对应的解决方案:- 如果Debezium和你本地机器在同一局域网内,搭建SSH隧道时绑定所有网卡地址:
ssh -L 0.0.0.0:6432:<PostgreSQL实际地址>:<PostgreSQL实际端口> <SSH跳板机账号>@<SSH跳板机地址>,同时将连接器配置里的database.hostname改为你本地机器的局域网IP,不要使用localhost - 如果Debezium运行在公网/其他隔离网络,直接将SSH隧道搭建在Debezium所在的机器上,或者更换为PostgreSQL的可直接访问地址
- 如果Debezium和你本地机器在同一局域网内,搭建SSH隧道时绑定所有网卡地址:
- 验证隧道端口监听状态
在你搭建SSH隧道的机器上执行命令查看端口绑定情况:
正常输出应该显示监听地址为ss -tulpn | grep 6432127.0.0.1:6432或者0.0.0.0:6432,如果没有对应监听进程,说明SSH隧道未建立成功,需要重新建立隧道并检查跳板机连通性。 - 在Debezium运行环境手动验证连通性
进入Debezium所在的运行环境(比如Docker容器用docker exec -it <容器ID> /bin/bash进入),执行以下命令测试连接:
如果这一步无法连接,说明是网络层面的问题,和Debezium配置无关,先排查网络连通性即可。# 测试端口连通性 nc -zv localhost 6432 # 测试数据库连通性(需安装psql客户端) psql -h localhost -p 6432 -U test -d postgres - 修正配置文件隐含错误(非当前连接报错原因,避免后续运行异常)
你当前的连接器配置存在两处错误:transforms配置重复,第一次定义为unwrap,第二次直接覆盖为route,导致unwrap transform不生效,需要改为"transforms":"unwrap,route"- 正则匹配规则写错,
([^.]+).(^.]+).([^.]+)里的第二个分组符号写反,应该改为([^.]+).([^.]+).([^.]+)
- 本地环境运行的额外检查
如果确认Debezium和SSH隧道都运行在你本地机器上仍然报错,检查本地防火墙/SELinux规则是否限制了6432端口的本地回环访问,或者是否有其他进程占用了6432端口。
内容的提问来源于stack exchange,提问作者DebianUser
相关产品推荐
相关产品推荐

