如何同时启动Zookeper和Kafka?

时间:2019-10-19 06:49:21

标签: docker apache-kafka dockerfile apache-zookeeper

我编写了一个使用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”]

1 个答案:

答案 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