我编写了一个使用Kafka在生产者和消费者之间共享数据的python应用程序。我要对其进行dockerize,所以我写了dockerfile。问题出在最后的步骤中,当我运行Zookeeper服务器时,它说绑定到端口...,并且永远不会退出,因此也可以运行Kafka服务器。
FROM ubuntu:18.04
ADD app.py /
RUN apt-get update -y && apt-get install -y apt-transport-https
RUN apt-get update \
&& apt-get install -y wget \
&& rm -rf /var/lib/apt/lists/*
RUN apt-get install gzip
RUN apt-get update \
&& apt-get install -y default-jdk \
&& rm -rf /var/lib/apt/lists/*
RUN wget http://mirrors.estointernet.in/apache/kafka/2.2.0/kafka_2.11-2.2.0.tgz
RUN tar -xvzf kafka_2.11-2.2.0.tgz
RUN cd kafka_2.11-2.2.0 \
&& ./bin/zookeeper-server-start.sh ./config/zookeeper.properties \
&& ./bin/kafka-server-start.sh ./config/server.properties
CMD [ “python”, “.app.py”]
答案 0 :(得分:1)
通常,您只需要为自己的应用程序创建一个容器。 Kafka和Zookeeper已经有许多可用的容器。
建议使用 docker compose 运行一个简单的Kafka堆栈,然后从外部启动您的应用程序(例如,通过命令行或IDE)或创建一个docker容器并运行它。
仅包含Kafka和Zookeeper的简单Kafka堆栈将需要一个简单的docker-compose文件,其中包含以下内容(当然,您需要在系统上安装docker-compose):
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:4.0.0
restart: unless-stopped
ports:
- 2181:2181
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
kafka:
image: confluentinc/cp-kafka:4.0.0-2
depends_on:
- zookeeper
ports:
- 9092:9092
environment:
KAFKA_BROKER_ID: 1
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO"
如果将以上内容放在名为simple-kafka-stack.yml的文件中,则可以通过运行以下命令来执行它:
docker-compose -f simple-kafka-stack.yml up