为了启动一个kafka容器,我正在关注this guide。我正在开发win10 pro,我的cli是gitbash。
docker-compose-single-broker.yml:
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_CREATE_TOPICS: "test:1:1"
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
容器启动没有任何问题:
$ docker-compose -f docker-compose-single-broker.yml up -d
Creating kafka-docker_zookeeper_1 ... done
Creating kafka-docker_kafka_1 ... done
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19929c6c3297 wurstmeister/kafka "start-kafka.sh" 17 seconds ago Up 15 seconds 0.0.0.0:9092->9092/tcp kafka-docker_kafka_1
d343a8ecf7ed wurstmeister/zookeeper "/bin/sh -c '/usr/sb…" 17 seconds ago Up 15 seconds 22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp kafka-docker_zookeeper_1
但是,当我尝试从容器内部运行任何kafka命令(创建主题,列出主题)时,如下所示:
> $KAFKA_HOME/bin/kafka-topics.sh --create --topic test --partitions 1 --replication-factor 1 --bootstrap-server `broker-list.sh`
> $KAFKA_HOME/bin/kafka-topics.sh --describe --topic test --bootstrap-server `broker-list.sh`
我收到以下警告,然后出现超时异常:
$ ./start-kafka-shell.sh localhost
bash-4.4# $KAFKA_HOME/bin/kafka-topics.sh --create --topic test --partitions 1 --replication-factor 1 --bootstrap-server `broker-list.sh`
[2020-06-09 11:47:26,241] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (/172.17.54.145:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2020-06-09 11:47:29,306] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (/172.17.54.145:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
start-kafka-shell.sh的内容:
$ cat start-kafka-shell.sh
#!/bin/bash
docker run --rm -v //var/run/docker.sock:/var/run/docker.sock -e HOST_IP=$1 -e ZK=$2 -i -t wurstmeister/kafka /bin/bash
答案 0 :(得分:0)
我不确定start-kafka-shell.sh
的目的是什么。如果您使用的是Docker,则可以按照以下说明从Windows Shell与之交互:
docker exec -it tmp_kafka_1 bash -c '$KAFKA_HOME/bin/kafka-topics.sh --create --topic test4 --partitions 1 --replication-factor 1 --bootstrap-server `broker-list.sh`'
docker exec -it tmp_kafka_1 bash -c '$KAFKA_HOME/bin/kafka-topics.sh --describe --topic test4 --bootstrap-server `broker-list.sh`'
Topic: test4 PartitionCount: 1 ReplicationFactor: 1 Configs: segment.bytes=1073741824
Topic: test4 Partition: 0 Leader: 1001 Replicas: 1001 Isr: 1001
您只需要正确的Docker容器名称(在上面的示例中为tmp_kafka_1
),即可使用docker ps
进行确认。