日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

org.apache.kafka.common.errors.TimeoutException: Topic not present in metadata 解决方法

發(fā)布時間:2023/12/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 org.apache.kafka.common.errors.TimeoutException: Topic not present in metadata 解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【README】

本文po出了 topic not present in metadata 的解決方法;

很多博文說是 因為? jackson-databind 沒有引入,但是我重新引入后,還是沒有解決問題;

最后,原因在于我要發(fā)送消息的分區(qū),topic 沒有對應分區(qū)會報這個錯誤;


【1】場景重現

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,1

2)java 生產者發(fā)送數據

設置目的分區(qū)為3;

/* 10.發(fā)送數據 */ 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("[生產者] " + 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】小結

1)問題根因,應該都看到了:

就是因為 生產者設置的分區(qū)號,在kafka集群中不存在導致的; 然后報錯信息提示 topic 不存在,而不是說 partition不存在; 其實在發(fā)送消息時,不設置分區(qū)也不會出現這個問題

?

總結

以上是生活随笔為你收集整理的org.apache.kafka.common.errors.TimeoutException: Topic not present in metadata 解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。