龙空技术网

kafka错误之 Topic xxx not present in metadata after 60000 ms

huan1993 152

前言:

今天你们对“apache错误码”大概比较讲究,咱们都想要分析一些“apache错误码”的相关资讯。那么小编也在网上网罗了一些对于“apache错误码””的相关文章,希望看官们能喜欢,我们一起来学习一下吧!

一、背景

今天尝试使用 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、

2、

标签: #apache错误码