kafka往虚拟机中的kafka发送消息失败

z 发表于: 2020-11-15   最后更新时间: 2020-11-15 11:28:47   1,797 游览

kafka 搭建再hyper-v虚拟机中,虚拟机配置了两张网卡,一个动态ip用于访问外网,一个静态ip 192.168.2.220 用于其他机器访问。zookeeper 使用的是kafka自带的,部署在同一台机器上。

kafka 的配置如下

broker.id=0
listeners=PLAINTEXT://192.168.2.220:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=0

执行的代码如下

 Properties properties = new Properties();
 properties.put("bootstrap.servers", "192.168.2.220:9092");
 properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
 properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
 final KafkaProducer<String, String> producer = new KafkaProducer<>(properties);

 ProducerRecord<String, String> record = new ProducerRecord<>("quickstart-events", "France");
 try {
     producer.send(record,(metadata,e)->{
         if (e != null) {
             e.printStackTrace();
             System.out.println("失败!");
         }else {
             System.out.println("success!");
         }
     });
 } catch (Exception e) {
     e.printStackTrace();
 }

异常如下

org.apache.kafka.common.errors.TimeoutException: Topic quickstart-events not present in metadata after 60000 ms.

做过一下尝试,使用命令行工具

bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server 192.168.2.220:9092

可以正确的发送命令

telnet 192.168.2.220 9092 能通

发表于 2020-11-15
z
添加评论

看了下,代码和你的验证步骤没啥问题。
java程序应该和kafka命令执行应该不在同一环境吧,java在本机,命令在虚拟机。
可以在检查下双网卡问题。

你的答案

查看kafka相关的其他问题或提一个您自己的问题