org.apache.kafka.common.errors.TimeoutException: Topic not present in metadata 解决方法
生活随笔
收集整理的這篇文章主要介紹了
org.apache.kafka.common.errors.TimeoutException: Topic not present in metadata 解决方法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【README】
本文po出了 topic not present in metadata 的解決方法;
很多博文說是 因為? jackson-databind 沒有引入,但是我重新引入后,還是沒有解決問題;
最后,原因在于我要發(fā)送消息的分區(qū),topic 沒有對應分區(qū)會報這個錯誤;
【1】場景重現(xiàn)
1)新建topic hello02, 分為3個分區(qū),每個分區(qū)2個副本;
[root@centos201 kafka3.0.0]# kafka-topics.sh --bootstrap-server centos201:9092 --describe --topic hello02 Topic: hello02 TopicId: xbNGvz9uTDu77qpkw7D3Ug PartitionCount: 3 ReplicationFactor: 2 Configs: segment.bytes=1024Topic: hello02 Partition: 0 Leader: 3 Replicas: 2,3 Isr: 3,2Topic: hello02 Partition: 1 Leader: 3 Replicas: 3,1 Isr: 3,1Topic: hello02 Partition: 2 Leader: 2 Replicas: 1,2 Isr: 2,12)java 生產(chǎn)者發(fā)送數(shù)據(jù)
設置目的分區(qū)為3;
/* 10.發(fā)送數(shù)據(jù) */ String now = DateUtils.getNowDate(); for (int i = 0; i < 10; i++) { Future<RecordMetadata> future = producer.send(new ProducerRecord<String, String>("hello02", 3, "", DataFactory.INSTANCE.genOneHundred()));try {System.out.println("[生產(chǎn)者] " + future.get().partition() + "-" + future.get().offset());} catch (Exception e) {e.printStackTrace();} }報錯如下:
[kafka-producer-network-thread | producer-1] INFO org.apache.kafka.clients.Metadata - [Producer clientId=producer-1] Cluster ID: Sbvo8XzuQxeoikbg-Oo8ZQ java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Topic hello02 not present in metadata after 3000 ms.at org.apache.kafka.clients.producer.KafkaProducer$FutureFailure.<init>(KafkaProducer.java:1320)at org.apache.kafka.clients.producer.KafkaProducer.doSend(KafkaProducer.java:989)at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:889)at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:775)at kafka.produer.MyProducer.main(MyProducer.java:51)3)把 分區(qū)設置為2 ,我們再試下;
Future<RecordMetadata> future = producer.send(new ProducerRecord<String, String>("hello02", 2, "", DataFactory.INSTANCE.genOneHundred()));public ProducerRecord(String topic, Integer partition, K key, V value) {this(topic, partition, null, key, value, null);}成功發(fā)送;
【2】小結(jié)
1)問題根因,應該都看到了:
就是因為 生產(chǎn)者設置的分區(qū)號,在kafka集群中不存在導致的; 然后報錯信息提示 topic 不存在,而不是說 partition不存在; 其實在發(fā)送消息時,不設置分區(qū)也不會出現(xiàn)這個問題;
?
總結(jié)
以上是生活随笔為你收集整理的org.apache.kafka.common.errors.TimeoutException: Topic not present in metadata 解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux的dns缓存时间(linux的
- 下一篇: 做ddos黑客能赚钱吗(做ddos黑客能