无法从java连接到docker容器中运行的kafka

5kgi1eie  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(676)

这个问题在这里已经有答案了

连接Kafka在docker中跑步(3个答案)
去年关门了。
我对kafka和docker很陌生,我想从java连接到docker容器中运行的kafka,但是我遇到了一个错误,我这边似乎缺乏网络知识。
我定义了一个env变量: KAFKA_HOSTNAME=kafka 这是我的 docker-compose.yml 文件:

version: '1.1'

networks:
  sb:
    driver: bridge

services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    container_name: zookeeper
    hostname: zookeeper
    networks:
     - sb
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  kafka:
    image: confluentinc/cp-kafka:latest
    container_name: kafka
    hostname: ${KAFKA_HOSTNAME:-kafka}
    depends_on:
      - zookeeper
    networks:
     - sb
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_HOST_NAME: ${KAFKA_HOSTNAME:-kafka}
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://${KAFKA_HOSTNAME:-kafka}:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

当我运行 docker-compose up ,可以看到zookeeper和kafka broker启动成功:

CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS              PORTS                                        NAMES
60460c26ef86        confluentinc/cp-kafka:latest       "/etc/confluent/dock…"   19 minutes ago      Up 19 minutes       0.0.0.0:9092->9092/tcp                       kafka
0d1fd4000a83        confluentinc/cp-zookeeper:latest   "/etc/confluent/dock…"   19 minutes ago      Up 19 minutes       2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp   zookeeper

下面是我尝试运行的简单java程序:

private static final String bootstrapServers = "192.168.0.102:9092";

//create producer properties
Properties properties = new Properties();
properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
properties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
properties.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());

//create producer
KafkaProducer<String, String> producer = new KafkaProducer<String, String>(properties);

//producer record
ProducerRecord<String, String> record = new ProducerRecord("first_topic", "hello from java");

//send data
producer.send(record);

producer.flush();
producer.close();

在docker日志中,我可以看到它正在创建 first-topic 在kafka容器中,但在java程序中,我得到以下错误: [kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Error connecting to node kafka:9092 (id: 1 rack: null) java.net.UnknownHostException: kafka 我有几个问题:1。我错过了什么?2如何正确设置 KAFKA_ADVERTISED_HOST_NAME docker compose文件中的属性?硬编码ip正确吗?三。如何正确设置 KAFKA_ADVERTISED_LISTENERS: 财产?
非常感谢你!

suzh9iv8

suzh9iv81#

如果您在mac上运行,请尝试kafka\u hostname=docker.for.mac.localhost
在windows上尝试kafka\u hostname=docker.for.win.localhost

相关问题