关于kafka:kafka错误之-Topic-xxx-not-present-in-metadata-after-60000-ms

85次阅读

共计 2221 个字符,预计需要花费 6 分钟才能阅读完成。

一、背景

明天尝试应用 kafka 的 生产者 api 写一下,音讯发送,后果遇到以下问题,
Topic xxx not present in metadata after 60000 ms,找了半天后果发现是 jar 包引入不全导致的,为防当前遗记,在此记录一下。

二、场景还原

1、jar 包引入

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>2.6.0</version>
</dependency>

2、jar 代码

public class KafkaProducerDemo {public static void main(String[] args) {Properties properties = new Properties();

        properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092,127.0.0.1:9093,127.0.0.1:9094");
        properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
        properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
        properties.put(ProducerConfig.ACKS_CONFIG, "all");
        properties.put(ProducerConfig.BUFFER_MEMORY_CONFIG, 33554432);
        properties.put(ProducerConfig.RETRIES_CONFIG, 0);
        properties.put(ProducerConfig.RETRY_BACKOFF_MS_CONFIG, 300);
        properties.put(ProducerConfig.BATCH_SIZE_CONFIG, 16384);

        // KafkaProducer 是线程平安的,能够多个线程应用用一个 KafkaProducer
        KafkaProducer<String, String> kafkaProducer = new KafkaProducer<>(properties);
        for (int i = 0; i < 100; i++) {ProducerRecord<String, String> record = new ProducerRecord<>("topic-a", "value - (" + i + 1 + ")");
            kafkaProducer.send(record, new Callback() {
                @Override
                public void onCompletion(RecordMetadata metadata, Exception exception) {if (exception != null) {System.err.println("发送数据到 kafka 中, 产生了异样.");
                        exception.printStackTrace();
                        return;
                    }
                    System.out.println("topic:" + metadata.topic() + "offset:" + metadata.offset() + "partition:"
                            + metadata.partition());
                }
            });
        }

        System.out.println("音讯发送实现");
        kafkaProducer.close();}
}

3、运行后果


运行下面的代码呈现了 org.apache.kafka.common.errors.TimeoutException: Topic topic-a not present in metadata after 60000 ms 异样。

三、问题解决

其实这个问题很简略,在启动我的项目的时候退出 logback.xml 配置文件,而后退出 logback 相干的 jar 包,发现,短少 jackson 的 jar,引入之后就好了。

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>2.6.0</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.0</version>
</dependency>

四、参考文档

1、https://stackoverflow.com/questions/63714401/org-apache-kafka-common-errors-timeoutexception-topic-not-present-in-metadata-a

2、http://kafka.apache.org/26/documentation.html#producerapi

正文完
 0