完整異常堆棧信息:
org.springframework.kafka.KafkaException: Send failed; nested exception is org.apache.kafka.common.errors.TimeoutException: Topic test not present in metadata after 60000 ms.
at org.springframework.kafka.core.KafkaTemplate.doSend(KafkaTemplate.java:574)
at org.springframework.kafka.core.KafkaTemplate.send(KafkaTemplate.java:389)
at com.yang.custom.kafka.kafka.ProducerDemo.send(ProducerDemo.java:37)
at com.yang.custom.kafka.CustomKafkaApplicationTests.contextLoads(CustomKafkaApplicationTests.java:23)
at java.util.ArrayList.forEach(ArrayList.java:1255)
at java.util.ArrayList.forEach(ArrayList.java:1255)
Caused by: org.apache.kafka.common.errors.TimeoutException: Topic test not present in metadata after 60000 ms.
問題出現:
向kafka broker 中發送消息
@Autowired private KafkaTemplate kafkaTemplate; public void send() { // 構造方法:ProducerRecord(String topic, Integer partition, Long timestamp, K key, V value, Iterable<Header> headers) ProducerRecord<Integer, String> producerRecord = new ProducerRecord( "test", // topic null, // 不指定partition System.currentTimeMillis(), // 發送消息的事件戳 null, // key不指定 "這是一條帶headers的消息", // msg new RecordHeaders().add(new RecordHeader("ttl", "20".getBytes(StandardCharsets.UTF_8))) ); kafkaTemplate.send(producerRecord); }
原因:
Jackson包版本沖突導致
項目Springboot:2.4.2
引入spring-kafka版本:2.6.5
spring-kafka依賴的Jackson版本為 2.11.3
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.11.3</version> <scope>compile</scope> <optional>true</optional> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.3</version> <scope>compile</scope> <optional>true</optional> </dependency>
springboot自帶依賴的Jackson版本:2.11.4
導致 spring-kafka 依賴的 Jackson 2.11.3版本失效,實際依賴的是2.11.4版本。
解決方案:
在項目中添加Jackson依賴,覆蓋springboot和spring-kafka的Jackson依賴
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.11.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.11.3</version> </dependency>
END.