这个问题在这里已经有答案了:
连接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:
财产?
非常感谢你!
1条答案
按热度按时间suzh9iv81#
如果您在mac上运行,请尝试kafka\u hostname=docker.for.mac.localhost
在windows上尝试kafka\u hostname=docker.for.win.localhost