Create a file with name docker-compose.yml
version: "3.7"
services:
zookeeper:
restart: always
image: docker.io/bitnami/zookeeper:3.8
ports:
- "2181:2181"
volumes:
- "zookeeper-volume:/bitnami"
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
kafka:
restart: always
image: docker.io/bitnami/kafka:3.3
ports:
- "9093:9093"
volumes:
- "kafka-volume:/bitnami"
environment:
- KAFKA_BROKER_ID=1
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:PLAINTEXT,EXTERNAL:PLAINTEXT
- KAFKA_CFG_LISTENERS=CLIENT://:9092,EXTERNAL://:9093
- KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://kafka:9092,EXTERNAL://localhost:9093
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=CLIENT
depends_on:
- zookeeper
volumes:
kafka-volume:
zookeeper-volume:
Command to run kafka inside docker
docker-compose build // run this first time only
docker-compose up
Create a file to test if kafka working locally - name the file check_kafka.js
const { Kafka } = require('kafkajs');
// Define your Kafka broker(s)
const kafkaBrokers = ['localhost:9093'];
// Create a Kafka instance
const kafka = new Kafka({
clientId: 'kafka-test-client',
brokers: kafkaBrokers,
});
// Create a Kafka producer
const producer = kafka.producer();
// Create a Kafka consumer
const consumer = kafka.consumer({ groupId: 'kafka-test-group' });
// Function to produce a test message
async function produceMessage() {
await producer.connect();
await producer.send({
topic: 'test-topic',
messages: [{ value: 'Hello, Kafka!' }],
});
await producer.disconnect();
}
// Function to consume messages
async function consumeMessages() {
await consumer.connect();
await consumer.subscribe({ topic: 'test-topic', fromBeginning: true });
await consumer.run({
eachMessage: async ({ message }) => {
console.log(`Received message: ${message.value}`);
},
});
// Uncomment the following line if you want to stop the consumer after a certain period
// setTimeout(async () => await consumer.disconnect(), 5000);
}
// Run the test
async function runTest() {
try {
await produceMessage();
await consumeMessages();
} catch (error) {
console.error('Error:', error);
} finally {
await producer.disconnect();
}
}
// Run the test
runTest();
connnect with kafka container (to check if it's runnig)
# to find containers with name
docker ps --format '{{.Names}}'
docker exec -it setup-kafka-kafka-1 bin/bash #setup-kafka-kafka-1 is my kafka container name
# find kafka ip
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_id_or_name>
# to check if kafka working in machine
node check_kafka.js
On running kafka using docker you will get output something like this
If kafka working fine then you will get output something like this
For detail you can find more in my github repo
Top comments (0)