【发布时间】:2019-04-09 01:00:05
【问题描述】:
我已经尝试让kafka-docker 工作几天了,但我不知道我做错了什么。现在,我无法使用我的 ruby-kafka 客户端访问任何主题,因为节点“不存在”。这是我的 docker-compose.yml 文件:
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka:0.9.0.1
ports:
- "9092:9092"
links:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100
KAFKA_ADVERTISED_PORT: 9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
kafka2:
image: wurstmeister/kafka:0.9.0.1
ports:
- "9093:9092"
links:
- zookeeper
environment:
KAFKA_BROKER_ID: 2
KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100
KAFKA_ADVERTISED_PORT: 9093
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
kafka3:
image: wurstmeister/kafka:0.9.0.1
ports:
- "9094:9092"
links:
- zookeeper
environment:
KAFKA_BROKER_ID: 3
KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100
KAFKA_ADVERTISED_PORT: 9094
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
我指定“KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'”是因为我想手动创建主题,所以我进入我的第一个代理容器并输入:
./kafka-topics.sh --create --zookeeper 172.19.0.2:2181 --topic test1 --partitions 4 --replication-factor 3
一切似乎都很好:
./kafka-topics.sh --list --zookeeper 172.19.0.2:2181 -> test1
但是,当我尝试这样做时:
./kafka-console-producer.sh --broker-list localhost:9092 --topic test1
上面写着:
在获取关联 ID 为 24 的元数据时出现警告错误:{test1=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
如果我再次创建主题,它说它已经存在,所以我不知道发生了什么。
【问题讨论】:
-
代替 localhost 尝试使用 kafka 广告主机。
-
这似乎有效,但消费者无法使用以下命令显示任何消息:./kafka-console-consumer.sh --zookeeper 172.19.0.2:2181 --bootstrap-server 192.168。 99.100:9092 --topic order --from-beginning.
-
这里没关系,但不清楚你为什么用这么老版本的Kafka
-
注意:使用相同的
KAFKA_ADVERTISED_HOST_NAME运行 3 个 Docker Kafka 容器将无法正常工作。另外,在同一台机器上运行三个,使用相同的网络 I/O 和磁盘实际上比一个容器的吞吐量要低
标签: docker apache-kafka docker-compose kafka-producer-api ruby-kafka