我在虚拟机上安装了kafka并启动,然后再maven项目里编写了测试文件,显示kafka拒绝连接

关注让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。
如果答案让您满意,请采纳、点赞、关注,非常感谢!
.
每日一句正能量,让它带给您好心情:努力的意义,在于当机会来临时,你有能力抓住它。
.
根据您提供的错误信息,这是一个典型的Kafka连接问题。以下是详细的分析和解决方案:
从错误日志可以看到:
192.168.15.10Connection refused: no further information首先确认Kafka服务正在运行:
# 检查Kafka服务状态
systemctl status kafka
# 或者
ps aux | grep kafka
# 如果Kafka未运行,启动服务
systemctl start kafka
# 或者使用Kafka自带的启动脚本
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
检查Kafka服务器的 server.properties 配置文件:
# 查看Kafka配置
cat /opt/kafka/config/server.properties | grep -E "(listeners|advertised.listeners|host.name)"
关键配置项:
# 确保监听地址正确配置
listeners=PLAINTEXT://0.0.0.0:9092
# 或者指定具体IP
listeners=PLAINTEXT://192.168.15.10:9092
# 广告地址(客户端连接使用的地址)
advertised.listeners=PLAINTEXT://192.168.15.10:9092
从客户端测试网络连通性:
# 测试端口连通性
telnet 192.168.15.10 9092
# 或者使用nc命令
nc -zv 192.168.15.10 9092
确保防火墙没有阻止Kafka端口:
# 检查防火墙状态
systemctl status firewalld
# 或
ufw status
# 如果防火墙开启,添加Kafka端口例外
firewall-cmd --permanent --add-port=9092/tcp
firewall-cmd --reload
在您的Java代码中,确保正确配置bootstrap servers:
Properties props = new Properties();
// 使用正确的Kafka服务器地址和端口
props.put("bootstrap.servers", "192.168.15.10:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
Producer<String, String> producer = new KafkaProducer<>(props);
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
import java.util.Properties;
public class KafkaTest {
public static void main(String[] args) {
Properties props = new Properties();
props.put("bootstrap.servers", "192.168.15.10:9092");
props.put("acks", "all");
props.put("retries", 0);
props.put("batch.size", 16384);
props.put("linger.ms", 1);
props.put("buffer.memory", 33554432);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
try (Producer<String, String> producer = new KafkaProducer<>(props)) {
producer.send(new ProducerRecord<>("test-topic", "key", "value"));
System.out.println("消息发送成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}
按照以上步骤逐一排查,应该能够解决连接拒绝的问题。如果问题仍然存在,请检查虚拟机的网络配置和Kafka日志获取更多详细信息。