如何同时启动 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