Running Kafka Locally: A Step-by-Step Guide
I am writing this because on the web there is no proper way to bootstrap kakfa locally and i spent few hours to figure out an issue !! frustrating right !
Introduction
Kafka is a powerful distributed streaming platform that is widely used for real-time data processing and messaging. To get started with Kafka without the need for a cloud-based environment, you can run it locally on your development machine. This guide will walk you through the process of setting up a local Kafka cluster using Docker Compose.
Prerequisites
- Docker installed on your system
Steps:
- Create a Docker Compose File: Create a file named
docker-compose.ymlwith the following content:
version: '3' services: zookeeper: image: wurstmeister/zookeeper:latest ports: - "2181:2181" kafka: image: wurstmeister/kafka:2.11-1.1.1 ports: - "9092:9092" links: - zookeeper environment: KAFKA_ADVERTISED_HOST_NAME: ${HOST_IP} KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true' KAFKA_DELETE_TOPIC_ENABLE: 'true' KAFKA_CREATE_TOPICS: "topic-test:1:1" volumes: - /var/run/docker.sock:/var/run/docker.sock KAFKA_ADVERTISED_HOST_NAME: ${HOST_IP}
This is very Important line while setting up kafka localy, this will allow local system to use IP and connect to kafka container, so get your IP quickly ! we can HOST_IP while booting up docker compose
- Start the Kafka Cluster: Run the following command in your terminal:
export HOST_IP=$(ifconfig | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1) docker-compose up This will start the Zookeeper and Kafka containers in the background.
Using Kafka
Once Kafka is running, you can produce and consume messages using a Kafka client library. Here's an example using the kafkajs library:
const { Kafka } = require('kafkajs') const ip = require('ip') const host = process.env.HOST_IP || ip.address() console.log(host) const kafka = new Kafka({ clientId: 'my-app', brokers: [`${host}:9092`], }) const producer = kafka.producer() const consumer = kafka.consumer({ groupId: 'test-group' }) const run = async () => { // Producing await producer.connect() await producer.send({ topic: 'topic-test', messages: [ { value: 'Hello KafkaJS user!' }, ], }) // Consuming await consumer.connect() await consumer.subscribe({ topic: 'test-topic', fromBeginning: true }) await consumer.run({ eachMessage: async ({ topic, partition, message }) => { console.log({ partition, offset: message.offset, value: message.value.toString(), }) }, }) } run().catch(console.error) Additional Tips:
- Kafka Connect: Use Kafka Connect to integrate with other data sources and sinks.
- Schema Registry: Implement a schema registry to ensure data consistency and compatibility.
- Security: Configure security measures like authentication and authorization for your Kafka cluster.
By following these steps, you can set up a local Kafka cluster and start experimenting with its capabilities.

Top comments (0)