【问题标题】:Kafka: Topic not present in metadata ExceptionKafka:元数据异常中不存在主题
【发布时间】: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


【解决方案1】:

您需要在 BOOTSTRAP_SERVERS_CONFIG 属性中指定代理 url 而不是 zookeeper url。您可以尝试在

server.properties

在 kafka 安装下的/config 文件夹中可用。通常会是

bootstrap.servers=localhost:9092

【讨论】:

    猜你喜欢
    • 2020-11-09
    • 2021-10-17
    • 2019-04-05
    • 1970-01-01
    • 2021-12-26
    • 2020-09-19
    • 2022-01-11
    • 2021-10-07
    • 1970-01-01
    相关资源
    最近更新 更多