Swiftorial Logo
Home
Swift Lessons
Tutorials
Learn More
Career
Resources

Advanced Concepts: Kafka with Docker

Introduction to Kafka with Docker

Using Docker to run Kafka simplifies the setup and management of Kafka clusters. Docker containers provide an isolated environment for Kafka brokers, making it easy to deploy and scale Kafka instances.

Prerequisites

  • Docker installed on your machine.
  • Basic knowledge of Docker and Docker Compose.

Setting Up Kafka with Docker

Step 1: Create a Docker Compose File

Create a docker-compose.yml file to define the Kafka and ZooKeeper services:


version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper:3.4.6
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka:2.12-2.5.0
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    

Step 2: Start the Kafka and ZooKeeper Services

Run the following command to start the Kafka and ZooKeeper services:

docker-compose up -d
Example:

Starting Kafka and ZooKeeper services:

docker-compose up -d

Interacting with Kafka

Once the services are up and running, you can interact with Kafka using Kafka CLI tools.

Step 1: Forward Kafka Service Port

Forward the Kafka service port to your local machine:


kubectl port-forward svc/my-kafka-kafka 9092:9092
    

Step 2: List Topics

Use the following command to list all topics in the Kafka cluster:


kubectl run kafka-client --restart='Never' --image=bitnami/kafka:latest --command -- sleep infinity
kubectl exec -it kafka-client -- kafka-topics.sh --list --bootstrap-server my-kafka-kafka:9092
    

Step 3: Create a Topic

Create a new topic in the Kafka cluster:


kubectl exec -it kafka-client -- kafka-topics.sh --create --topic my_topic --bootstrap-server my-kafka-kafka:9092 --replication-factor 1 --partitions 1
    

Step 4: Produce Messages

Produce messages to the Kafka topic:


kubectl exec -it kafka-client -- kafka-console-producer.sh --topic my_topic --bootstrap-server my-kafka-kafka:9092
    

Step 5: Consume Messages

Consume messages from the Kafka topic:


kubectl exec -it kafka-client -- kafka-console-consumer.sh --topic my_topic --bootstrap-server my-kafka-kafka:9092 --from-beginning
    

Scaling Kafka with Docker

You can easily scale Kafka by adding more broker instances to your Docker Compose file.

Step 1: Update Docker Compose File

Add more Kafka broker instances to the docker-compose.yml file:


version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper:3.4.6
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka:2.12-2.5.0
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  kafka2:
    image: wurstmeister/kafka:2.12-2.5.0
    ports:
      - "9093:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9093
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  kafka3:
    image: wurstmeister/kafka:2.12-2.5.0
    ports:
      - "9094:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9094
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    

Step 2: Scale Up the Kafka Cluster

Run the following command to start the additional Kafka broker instances:

docker-compose up -d

Monitoring and Managing Kafka with Docker

Regular monitoring and management are crucial to ensure the effective operation of Kafka with Docker.

Monitoring Kafka

Use monitoring tools like Prometheus and Grafana to monitor Kafka metrics. You can set up Prometheus to scrape metrics from Kafka and Grafana to visualize them.

Example:

Using Prometheus to monitor Kafka metrics:


# Prometheus configuration
scrape_configs:
  - job_name: 'kafka'
    static_configs:
      - targets: ['localhost:9092']
        

Managing Kafka with Kafka Manager

Kafka Manager is a tool for managing and monitoring Kafka clusters. You can run Kafka Manager in a Docker container:


docker run -d -p 9000:9000 --name=kafka-manager -e ZK_HOSTS="zookeeper:2181" hlebalbau/kafka-manager
    
Example:

Access Kafka Manager at http://localhost:9000

Best Practices for Kafka with Docker

  • Use Docker Compose to manage multi-container setups for Kafka and ZooKeeper.
  • Regularly monitor Kafka metrics using tools like Prometheus and Grafana.
  • Use Kafka Manager for efficient cluster management.
  • Scale Kafka by adding more broker instances as needed.
  • Document and maintain a history of Docker Compose configurations and changes.

Conclusion

In this tutorial, we've covered the core concepts of setting up and managing Kafka with Docker, including creating a Docker Compose file, interacting with Kafka, scaling Kafka, and monitoring and managing Kafka with Docker. Understanding and implementing these strategies is essential for ensuring high availability, fault tolerance, and optimal performance in a Kafka Docker setup.