首页 > 解决方案 > 春季卡夫卡: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 警告 8544 --- [| adminclient-1] org.apache.kafka.clients.NetworkClient : [AdminClient clientId=adminclient-1] 连接到节点 34bcfcc207e0:9092 时出错(id: 1001 rack: null)

java.net.UnknownHostException:34bcfcc207e0

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

在此处输入图像描述

怎么了?

标签: javakotlinapache-kafkaspring-kafka

解决方案


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

  2. 如果您在容器中运行 Kafka,则默认通告的侦听器使用其主机名(容器 ID),您需要将其更改为使用您期望的地址连接到在 Docker 中运行的 Kafka


推荐阅读