You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flume跨VM连接Kafka实例时出现Connection Refused问题求助

解决Flume跨虚拟机连接Kafka时的连接拒绝问题

这种跨机器的连接坑我之前踩过好几次,咱们一步步来排查解决:

第一步:先确认虚拟机之间的基础网络连通性

  • 先在Flume所在的172.16.26.139虚拟机上,ping一下Kafka的IP 172.16.26.138,看看能不能收到响应。如果ping不通,那说明两台虚拟机的网络根本没打通,得先检查虚拟机的网络配置(比如是不是在同一个子网、有没有开启网络隔离)。
  • 如果ping通了,再用telnet测试Kafka的默认端口9092:telnet 172.16.26.138 9092。要是这个也被拒绝,那大概率是Kafka的监听配置不对,或者防火墙挡了这个端口。

第二步:检查Kafka的核心配置(最容易踩坑的点)

Kafka默认只会监听localhost,这就导致只能本机访问,跨机器肯定连不上。你得修改Kafka安装目录下的config/server.properties文件:

  • 找到listeners配置,把它改成listeners=PLAINTEXT://0.0.0.0:9092(或者直接指定Kafka虚拟机的IP:PLAINTEXT://172.16.26.138:9092),这样Kafka就会监听所有网卡的9092端口。
  • 还要同步修改advertised.listeners,这个是Kafka告诉客户端的实际连接地址,必须设置成Flume能访问到的IP:advertised.listeners=PLAINTEXT://172.16.26.138:9092。
    改完之后一定要重启Kafka服务,然后再用Flume虚拟机telnet测试9092端口,这时候应该就能连通了。

第三步:核对Flume的配置是否正确

确保你的Flume配置文件里,Kafka Sink的kafka.bootstrap.servers是指向Kafka虚拟机的IP,而不是localhost。比如配置里应该有这样的内容:

# 示例Flume Kafka Sink配置
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.bootstrap.servers = 172.16.26.138:9092
a1.sinks.k1.kafka.topic = your-test-topic
a1.sinks.k1.kafka.producer.acks = 1
a1.sinks.k1.kafka.producer.batch.size = 16384

第四步:检查虚拟机的防火墙设置

  • 在Kafka所在的172.16.26.138虚拟机上,要么临时关闭防火墙测试,要么直接开放9092端口。比如用firewalld的话:
    firewall-cmd --add-port=9092/tcp --permanent
    firewall-cmd --reload
    
    如果是用iptables:
    iptables -A INPUT -p tcp --dport 9092 -j ACCEPT
    service iptables save
    
  • 另外也要确认Flume所在的172.16.26.139虚拟机,没有拦截 outgoing 的9092端口请求。

最后验证

等所有配置修改完、服务重启后,再用telnet给Flume发消息,看看Flume的DEBUG日志里还会不会出现连接拒绝。同时可以在Kafka虚拟机上用消费者脚本测试:

kafka-console-consumer.sh --bootstrap-server 172.16.26.138:9092 --topic your-test-topic --from-beginning

如果能收到你发的消息,那就说明问题解决啦!

内容的提问来源于stack exchange,提问作者LivinTheDream86

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:17:09