kafka-stack-docker-compose

docker compose files to create a fully working kafka stack

Github星跟踪图

Build Status

kafka-stack-docker-compose

This replicates as well as possible real deployment configurations, where you have your zookeeper servers and kafka servers actually all distinct from each other. This solves all the networking hurdles that comes with Docker and docker-compose, and is compatible cross platform.

UPDATE: No /etc/hosts file changes are necessary anymore. Explanations at: https://rmoff.net/2018/08/02/kafka-listeners-explained/

Stack version

  • Zookeeper version: 3.4.9
  • Kafka version: 2.5.0 (Confluent 5.5.0)
  • Kafka Schema Registry: Confluent 5.5.0
  • Kafka Schema Registry UI: 0.9.4
  • Kafka Rest Proxy: Confluent 5.5.0
  • Kafka Topics UI: 0.9.4
  • Kafka Connect: Confluent 5.5.0
  • Kafka Connect UI: 0.9.4
  • ksqlDB Server: Confluent 5.5.0
  • Zoonavigator: 0.8.0

Optional: Kafka Desktop Application

Once you have started your cluster, you can use Conduktor to easily manage it.
Just connect against localhost:9092 if using Docker, or 192.168.99.100 if using Docker Toolbox

Requirements

Docker

Please export your environment before starting the stack:

export DOCKER_HOST_IP=127.0.0.1

(that's the default value and you actually don't need to do a thing)

Docker-Toolbox

If you are using Docker for Mac <= 1.11, or Docker Toolbox for Windows
(your docker machine IP is usually 192.168.99.100)

Please export your environment before starting the stack:

export DOCKER_HOST_IP=192.168.99.100

Single Zookeeper / Single Kafka

This configuration fits most development requirements.

  • Zookeeper will be available at $DOCKER_HOST_IP:2181
  • Kafka will be available at $DOCKER_HOST_IP:9092

Run with:

docker-compose -f zk-single-kafka-single.yml up
docker-compose -f zk-single-kafka-single.yml down

Single Zookeeper / Multiple Kafka

If you want to have three brokers and experiment with kafka replication / fault-tolerance.

  • Zookeeper will be available at $DOCKER_HOST_IP:2181
  • Kafka will be available at $DOCKER_HOST_IP:9092,$DOCKER_HOST_IP:9093,$DOCKER_HOST_IP:9094

Run with:

docker-compose -f zk-single-kafka-multiple.yml up
docker-compose -f zk-single-kafka-multiple.yml down

Multiple Zookeeper / Single Kafka

If you want to have three zookeeper nodes and experiment with zookeeper fault-tolerance.

  • Zookeeper will be available at $DOCKER_HOST_IP:2181,$DOCKER_HOST_IP:2182,$DOCKER_HOST_IP:2183
  • Kafka will be available at $DOCKER_HOST_IP:9092

Run with:

docker-compose -f zk-multiple-kafka-single.yml up
docker-compose -f zk-multiple-kafka-single.yml down

Multiple Zookeeper / Multiple Kafka

If you want to have three zookeeper nodes and three kafka brokers to experiment with production setup.

  • Zookeeper will be available at $DOCKER_HOST_IP:2181,$DOCKER_HOST_IP:2182,$DOCKER_HOST_IP:2183
  • Kafka will be available at $DOCKER_HOST_IP:9092,$DOCKER_HOST_IP:9093,$DOCKER_HOST_IP:9094

Run with:

docker-compose -f zk-multiple-kafka-multiple.yml up
docker-compose -f zk-multiple-kafka-multiple.yml down

Full stack

  • Single Zookeeper: $DOCKER_HOST_IP:2181
  • Single Kafka: $DOCKER_HOST_IP:9092
  • Kafka Schema Registry: $DOCKER_HOST_IP:8081
  • Kafka Schema Registry UI: $DOCKER_HOST_IP:8001
  • Kafka Rest Proxy: $DOCKER_HOST_IP:8082
  • Kafka Topics UI: $DOCKER_HOST_IP:8000
  • Kafka Connect: $DOCKER_HOST_IP:8083
  • Kafka Connect UI: $DOCKER_HOST_IP:8003
  • KSQL Server: $DOCKER_HOST_IP:8088
  • Zoonavigator Web: $DOCKER_HOST_IP:8004

Run with:

docker-compose -f full-stack.yml up
docker-compose -f full-stack.yml down

FAQ

Kafka

Q: Kafka's log is too verbose, how can I reduce it?

A: Add the following line to your docker-compose environment variables: KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO". Full logging control can be accessed here: https://github.com/confluentinc/cp-docker-images/blob/master/debian/kafka/include/etc/confluent/docker/log4j.properties.template

Q: How do I delete data to start fresh?

A: Your data is persisted from within the docker compose folder, so if you want for example to reset the data in the full-stack docker compose, first do a docker-compose -f full-stack.yml down, then remove the directory full-stack, for example by doing rm -r -f full-stack.

Q: Can I change the zookeeper ports?

A: yes. Say you want to change zoo1 port to 12181 (only relevant lines are shown):

  zoo1:
    ports:
      - "12181:12181"
    environment:
        ZOO_PORT: 12181
        
  kafka1:
    environment:
      KAFKA_ZOOKEEPER_CONNECT: "zoo1:12181"

Q: Can I change the Kafka ports?

A: yes. Say you want to change kafka1 port to 12345 (only relevant lines are shown). Note only LISTENER_DOCKER_EXTERNAL changes:

  kafka1:
    image: confluentinc/cp-kafka:5.5.0
    hostname: kafka1
    ports:
      - "12345:12345"
    environment:
      KAFKA_ADVERTISED_LISTENERS: LISTENER_DOCKER_INTERNAL://kafka1:19092,LISTENER_DOCKER_EXTERNAL://${DOCKER_HOST_IP:-127.0.0.1}:12345

Q: Kafka is using a lot of disk space for testing. Can I reduce it?

A: yes. This is for testing only!!! Reduce the KAFKA_LOG_SEGMENT_BYTES to 16MB and the KAFKA_LOG_RETENTION_BYTES to 128MB

  kafka1:
    image: confluentinc/cp-kafka:5.5.0
    ...
    environment:
      ...
      # For testing small segments 16MB and retention of 128MB
      KAFKA_LOG_SEGMENT_BYTES: 16777216
      KAFKA_LOG_RETENTION_BYTES: 134217728

主要指标

概览
名称与所有者conduktor/kafka-stack-docker-compose
主编程语言Shell
编程语言Shell (语言数: 1)
平台
许可证Apache License 2.0
所有者活动
创建于2016-12-07 04:48:19
推送于2025-04-09 14:09:57
最后一次提交2025-04-09 15:09:55
发布数22
最新版本名称v7.2.0 (发布于 )
第一版名称v3.2.0 (发布于 )
用户参与
星数3.4k
关注者数103
派生数1.3k
提交数122
已启用问题?
问题数79
打开的问题数4
拉请求数67
打开的拉请求数1
关闭的拉请求数13
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?