我在docker compose yml文件中为广告的监听器提供了以下配置
我的docker-compose.yml
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
network_mode: host
environment:
ZOOKEEPER_CLIENT_PORT: 32181
ZOOKEEPER_TICK_TIME: 2000
extra_hosts:
- "moby:127.0.0.1"
kafka:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: localhost:32181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://lnc52c9:29092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
extra_hosts:
- "moby:127.0.0.1"
我使用以下属性连接此kafka
props.put("bootstrap.servers", "lnc52c9:29092");
当我尝试在该服务器中生成消息时,我收到以下错误
WARN o.apache.kafka.clients.NetworkClient - 获取相关ID为1的元数据时出错:{foo = LEADER_NOT_AVAILABLE}
主机可以从我的机器上ping,因为它全部在同一个网络中,没有防火墙问题。当我在docker容器中使用命令hostname
时,我可以看到相同的主机名。我错过了什么吗?
答案 0 :(得分:0)
我认为你需要容器中的expose port kafka。您可以在docker-compose文件中执行此操作,方法是添加以下内容:
ports: "29092:29092"
这应该在kafka服务定义中。