一、背景
明天尝试应用 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