如何同时启动 Zookeeper 和 Kafka?
How can I start Zookeper and Kafka both at the same time?
我写了一个 python 应用程序,它使用 Kafka 在生产者和消费者之间共享数据。我打算将它 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”]
通常,您只需要为自己的应用程序创建一个容器。已经有许多容器可用于 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 的文件中,则可以通过 运行ning 命令执行它:
docker-compose -f simple-kafka-stack.yml up
我写了一个 python 应用程序,它使用 Kafka 在生产者和消费者之间共享数据。我打算将它 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”]
通常,您只需要为自己的应用程序创建一个容器。已经有许多容器可用于 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 的文件中,则可以通过 运行ning 命令执行它:
docker-compose -f simple-kafka-stack.yml up