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 能通
看了下,代码和你的验证步骤没啥问题。
java程序应该和kafka命令执行应该不在同一环境吧,java在本机,命令在虚拟机。
可以在检查下双网卡问题。
你的答案