Pulsar配置RabbitMQ源连接器出现健康检查失败连接拒绝报错
问题根因
核心报错来自日志最内层栈:
Caused by: io.grpc.netty.shaded.io.netty.channel.AbstractChannel$AnnotatedConnectException: finishConnect(..) failed: Connection refused: /127.0.0.1:46247
- 这个连接拒绝是Pulsar Function Worker主进程访问本地环回地址
127.0.0.1:46247失败,该端口是Pulsar给RabbitMQ Source连接器子进程随机分配的gRPC健康检查端口,和远端RabbitMQ服务没有任何关系。 - 你能在RabbitMQ管理台看到初始连接记录,已经证明RabbitMQ侧的网络连通性、账号权限、端口配置全部正常,完全不需要调整RabbitMQ服务端的任何配置。
- 报错的本质是:RabbitMQ Source连接器对应的独立子进程启动后意外崩溃/提前退出,没有在本地指定端口上监听健康检查接口,Pulsar主进程轮询健康状态时直接触发连接拒绝。
常见触发原因
- 本地运行Pulsar二进制时,给连接器/函数运行时分配的内存不足,连接器进程刚启动就因OOM被操作系统杀掉
- Pulsar 2.10.0早期版本的RabbitMQ Source连接器存在已知的类加载冲突、依赖兼容问题,启动后抛出未捕获异常直接退出
- 启动Pulsar的操作系统用户对Pulsar临时工作目录没有读写权限,连接器进程初始化写临时文件失败直接退出
- 配置中填写的
requestedChannelMax: 0参数和部分RabbitMQ版本的连接协商逻辑不兼容,连接器和RabbitMQ建连后触发未捕获异常退出
修复排查步骤
- 进入Pulsar安装目录下的
logs/connectors/rabbit-connector-local-0路径,查看连接器独立进程的输出日志,这里会记录进程退出的具体错误栈,比Function Worker侧的健康检查报错信息精准得多 - 临时删除配置中的
requestedChannelMax参数,或将其改为RabbitMQ默认的2047,验证是否为参数协商导致的进程崩溃 - 修改
conf/functions_worker.yml中的functionRuntimeFactoryConfigs配置,给连接器进程分配不低于512MB的堆内存,避免OOM被杀 - 若当前使用Pulsar 2.10.0版本,建议升级到2.10.3及以上的稳定小版本,或单独替换RabbitMQ连接器为对应大版本的最新发行包,修复早期版本的类加载兼容问题
内容的提问来源于stack exchange,提问作者Filippos Ser
相关产品推荐
相关产品推荐

