【发布时间】:2021-05-09 05:02:24
【问题描述】:
我使用 Spring KafkaTemplate 功能在 Kafak-topic 中发送消息。
配置是:
@Bean
public KafkaAdmin createKafkaAdmin() {
Map<String, Object> configs = new HashMap<>();
configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:2181");
return new KafkaAdmin(configs);
}
@Bean
public ProducerFactory<String, String> producerFactory() {
Map<String, Object> configProps = new HashMap<>();
configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:2181");
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class);
return new DefaultKafkaProducerFactory<>(configProps);
}
@Bean
public KafkaTemplate<String, String> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}
然后我尝试发送消息:
@Autowire
private KafkaTemplate<String, String> kafkaTemplate;
ListenableFuture<SendResult<String, String>> future =
kafkaTemplate.send("waiting_for_ack",key, value);
但我收到以下异常:
TimeoutException: Topic waiting_for_ack not present in metadata after 60000 ms.
存在目标主题,其中能够确定,通过:
./kafka-topics.sh --zookeeper localhost:2181 --list _consumer_offsets
waiting_for_ack
我做错了什么,我用什么方法来确定这个异常的原因?
【问题讨论】:
-
在您的代码中使用端口 9092...我认为您应该使用
kafka-topics.sh --bootstrap-server,因为 Zookeeper 标志已被弃用
标签: spring-boot apache-kafka spring-kafka kafka-producer-api