Apache Kafka with Java getting started tutorial demonstrates how quickly you can get started with Kafka using Docker.
Step 1: Make sure Docker engine is installed on your computer. For example on a Mac OS $ brew cask install docker or on Windows.
Step 2: Start the Docker engine on your operating system.
Kafka services on Docker
Step 3: Create the below docker-compose.yml file to run your Kafka, zookeeper & Apache Kafka Cluster Visualization (AKHQ) services. The images for these services are sourced from Docker hub.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
version: "2" services: zookeeper: image: docker.io/bitnami/zookeeper:3.8 ports: - "2181:2181" environment: - ALLOW_ANONYMOUS_LOGIN=yes kafka: image: docker.io/bitnami/kafka:3.4 ports: - "9093:9093" environment: - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181 - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=KAFKA_CLIENT:PLAINTEXT,EXTERNAL:PLAINTEXT - KAFKA_CFG_LISTENERS=KAFKA_CLIENT://:9092,EXTERNAL://:9093 - KAFKA_CFG_ADVERTISED_LISTENERS=KAFKA_CLIENT://kafka:9092, EXTERNAL://localhost:9093 - KAFKA_INTER_BROKER_LISTENER_NAME=KAFKA_CLIENT depends_on: - zookeeper akhq: image: tchiotludo/akhq ports: - "9099:8080" environment: AKHQ_CONFIGURATION: | akhq: connections: docker-kafka-server: properties: bootstrap.servers: "kafka:9092" depends_on: - kafka |
Step 4: Run the Docker container with the above services on the engine via a command-line terminal window where this file docker-compose.yml. Say, if the file is at /Users/yourfolder/projects/simple-kafka/docker-compose.yml
|
1 2 3 |
$ cd /Users/yourfolder/projects/simple-kafka/ $ docker-compose up -d |
It will take a few minutes to stand up the Docker containers with the requested services for Kafka – Kafka on port 9093, Zookeeper on port 2181 & Apache Kafka Cluster Visualization (AKHQ) on port 9099.
Step 5: You can open a browser to check if AKHQ is running on localhost:9099. This is the Kafka UI.
Java Project
Step 6: Create a new maven based Java project simple-kafka. For example, in Intellij IDEA File -> New Project -> Maven.
The pom.xml file with Kafka & logback dependencies:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>simple-kafka</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> </dependencies> </project> |
Step 7: Set up logging xml file logback.xml.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n </Pattern> </layout> </appender> <logger name="com.myapp" level="debug" additivity="false"> <appender-ref ref="CONSOLE"/> </logger> <root level="error"> <appender-ref ref="CONSOLE"/> </root> </configuration> |
Java Consumer
Step 8: Write a consumer in Java as shown below.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
package com.myapp; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; import org.apache.kafka.common.serialization.StringDeserializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.time.Duration; import java.util.Arrays; import java.util.Properties; public class ConsumerApp { private static final Logger LOG = LoggerFactory.getLogger(ConsumerApp.class); public static void main(String[] args) { String topic = "my-first-topic"; String group = "my-first-application"; Properties props = new Properties(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9093"); props.put(ConsumerConfig.GROUP_ID_CONFIG, group); props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); consumer.subscribe(Arrays.asList(topic)); LOG.info("Subscribed to Kafka Topic " + topic); //Keeps running & checks for messages every 5 seconds while (true) { ConsumerRecords<String, String> records = consumer.poll(Duration.ofSeconds(5)); for (ConsumerRecord<String, String> record : records) LOG.info(String.format("************ offset = %d, key = %s, value = %s\n", record.offset(), record.key(), record.value())); } } } |
Run the application within intellij IDEA:
|
1 2 3 |
..... 17:35:12.305 [main] INFO com.myapp.ConsumerApp - Subscribed to Kafka Topic my-first-topic |
Produce a message from akHQ.io UI
Step 9: Go to localhost:9099 akGQ.io & create a new topic named “my-first-topic“. Click on the button “Create a topic” at the right bottom corner.
Step 10: Double click on the topic “my-first-topic” & then click on “Produce to my-first-topic“.
Step 11: Click on the “Produce” button to send the message to the topic.
|
1 2 3 |
"my-message": "my test messge produced from akHQ.io" |
Java code ConsumerApp.java consumes the message
Step 12: In the console window within Intellij IDEA, the message will be consumed by ConsumerApp.java, which is already running.
|
1 2 |
17:48:16.661 [main] INFO com.myapp.ConsumerApp - ************ offset = 0, key = my-test-key, value = "my-message": "my test messge produced from akHQ.io" |
Bring down the Docker container
|
1 2 3 |
$ cd /Users/yourfolder/projects/simple-kafka/ $ docker-compose up -d |
More Apache Kafka Examples
1) Apache Kafka example with Java Producer & Consumer Tutorial – Part 2


