Spring卡夫卡:UnknownHostException:34bcfcc207e0

Spring Kafka: UnknownHostException: 34bcfcc207e0

我为我的应用编写了 kafka 生产者/消费者:

消费者配置:

@EnableKafka
@Configuration
class KafkaConsumerConfig {

    @Bean
    fun consumerFactory(): ConsumerFactory<String, String> {
        val props: MutableMap<String, Any> = HashMap()
        props[ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG] = "http://localhost:9092"
        props[ConsumerConfig.GROUP_ID_CONFIG] = "group12345"
        props[ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG] = StringDeserializer::class.java
        props[ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG] = StringDeserializer::class.java
        return DefaultKafkaConsumerFactory(props)
    }

    @Bean
    fun kafkaListenerContainerFactory(): ConcurrentKafkaListenerContainerFactory<String, String> {
        val factory = ConcurrentKafkaListenerContainerFactory<String, String>()
        factory.consumerFactory = consumerFactory()
        return factory
    }
}

生产者配置:

@Configuration
class KafkaProducerConfig {

    @Bean
    fun producerFactory(): ProducerFactory<String, String> {
        val configProps: MutableMap<String, Any> = HashMap()
        configProps[ProducerConfig.BOOTSTRAP_SERVERS_CONFIG] = "http://localhost:9092"
        configProps[ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG] = StringSerializer::class.java
        configProps[ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG] = StringSerializer::class.java
        return DefaultKafkaProducerFactory(configProps)
    }

    @Bean
    fun kafkaTemplate(): KafkaTemplate<String, String> {
        return KafkaTemplate(producerFactory())
    }
}

主题配置:

@Configuration
class KafkaTopicConfig {

    @Bean
    fun kafkaAdmin(): KafkaAdmin {
        val configs: MutableMap<String, Any?> = HashMap()
        configs[AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG] = "http://localhost:9092"
        return KafkaAdmin(configs)
    }

    @Bean
    fun topic1(): NewTopic {
        return NewTopic("kafkaTest", 1, 1.toShort())
    }
}

卡夫卡服务:

@Service
class KafkaService(
    private val kafkaTemplate: KafkaTemplate<String, String>
) {

    fun send() {
        kafkaTemplate.send("kafkaTest", "test message ${System.currentTimeMillis()}")
    }

    @KafkaListener(topics = ["kafkaTest"], groupId = "group12345")
    fun listenGroupFoo(message: String) {
        println("--> $message")
    }
}

这就是我应用程序中的全部 类。当我尝试 运行 应用程序时,出现此异常:

2021-10-11 17:20:13.319 WARN 8544 --- [| adminclient-1] org.apache.kafka.clients.NetworkClient : [AdminClient clientId=adminclient-1] Error connecting to node 34bcfcc207e0:9092 (id: 1001 rack: null)

java.net.UnknownHostException: 34bcfcc207e0

我不知道,主机是什么34bcfcc207e0。它出现在开始或线程。

怎么了?

  1. Kafka 不是 HTTP 服务。从所有字符串中删除 http://

  2. 如果您是 运行 容器中的 Kafka,则默认播发的侦听器使用其主机名(容器 ID),您需要将其更改为使用您期望的地址