DEV Community

Cover image for Kafka containers with Docker Compose
Željko Šević
Željko Šević

Posted on • Originally published at sevic.dev on

Kafka containers with Docker Compose

Docker Compose facilitates spinning up a Kafka broker without installing it locally. Modern Kafka runs in KRaft mode (Kafka Raft metadata), which stores cluster metadata inside Kafka itself. Zookeeper is no longer required, it was removed in Kafka 4.0.

Prerequisites

  • Docker Compose installed

Configuration

The following configuration spins up a single-node Kafka broker in KRaft mode with the Kafka UI tool.

The Kafka broker address is localhost:29092, and Kafka UI is available at http://localhost:8085.

# docker-compose.yml
services:
  kafka:
    image: apache/kafka:4.3.0
    hostname: kafka
    ports:
      - '29092:29092'
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:29093
      KAFKA_LISTENERS: CONTROLLER://:29093,PLAINTEXT://:9092,PLAINTEXT_HOST://:29092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      CLUSTER_ID: MkU3OEVBNTcwNTJENDM2Qk

  kafka-ui:
    image: provectuslabs/kafka-ui:latest
    ports:
      - 8085:8080
    depends_on:
      - kafka
    environment:
      KAFKA_CLUSTERS_0_NAME: local
      KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092
Enter fullscreen mode Exit fullscreen mode

Run the following command to spin up the containers.

docker-compose up
Enter fullscreen mode Exit fullscreen mode

Demo

Docker Compose files for this post live in the kafka-docker-compose folder. Get access via code demos.

Top comments (0)