详细信息:我正在尝试使用位于本文底部的docker-compose.yml文件运行wurstmeister / kafka和wurstmeister / zookeeper图像。
为了测试容器,我遵循了kafka的官方网站。它指的bin/kafka-server-start.sh
是图像中没有的类似脚本。我还尝试使用docker exec -it zookeeper bash
和浏览了容器,docker exec -it kafka bash
并在/bin/
目录中找到了zkServer.sh和其他一些脚本。
Problem: The problem is that I don't know how to use it, because the config/server.properties is available in the kafka container not zookeeper. So I'm not aware of the proper solution. Is it a good solution to download the scripts and put them in the host directory and copy them to the container?
docker-compose.yml
version:'2'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
kafka:
build: .
container_name: kafka
links:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka
KAFKA_ADVERTISED_PORT: 9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_OPTS: -javaagent:/usr/app/jmx_prometheus_javaagent.jar=7071:/usr/app/prom-jmx-agent-config.yml
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Dockerfile
FROM wurstmeister/kafka
ADD prom-jmx-agent-config.yml /usr/app/prom-jmx-agent-config.yml
ADD jmx_prometheus_javaagent-0.10.jar /usr/app/jmx_prometheus_javaagent.jar
You don't have to use bin/kafka-server-start.sh
script. There is script called start-kafka.sh
in wurstmeister/kafka
image. Here is how I did it in one of my projects:
docker-compose.yml
zookeeper:
container_name: zookeper
image: wurstmeister/zookeeper:3.4.6
ports:
- "2181:2181"
kafka:
container_name: kafka
build:
context: .
dockerfile: kafka.Dockerfile
image: kafka-service
ports:
- "9092:9092"
kafka.Dockerfile
FROM wurstmeister/kafka:2.11-2.0.0
COPY wait-for-it.sh /wait-for-it.sh
RUN chmod +x /wait-for-it.sh
CMD ["/wait-for-it.sh", "zookeper:2181", "--", "start-kafka.sh"]
在dockerfile中,我基本上是这样说的:“等一下动物园管理员,他必须先站起来,然后您可以启动,然后在他之后运行start-kafka.sh
”。您可以在此处下载wait-for-it.sh脚本:https : //github.com/vishnubob/wait-for-it/blob/master/wait-for-it.sh
PS:您可以使用以下命令查看任何图像的基本信息:
docker inspect <image-name>
您能否编写在kafka官方网站中找到的命令的等效docker-compose.yml文件?
看看编辑后的答案。您缺少dockerfile的CMD部分。
图片:kafka服务如何?
kafka-image是从kafka.Dockerfile构建的。我包含了dockerfile,因为我不得不用wait-for-it.sh脚本丰富该官方的kafka映像,因为官方的kafka映像不包含该脚本。您可以不使用该脚本(CMD [“ start-kafka.sh”]),但是我不知道如果kafka在Zookeper之前启动会发生什么。
我不明白你在问什么。如果问题是如何编写python生产者,我不知道,我对python不熟悉。如果您正在询问如何启动kafka,我已经回答了;如果您不了解,请弄清楚您不了解的部分,以便为您提供更多帮助。如果要运行控制台生产者,则可以在此处查看步骤4。kafka.apache.org/quickstart