Lesson 4 / 25
Your First Topic: Create, Produce, Consume
Run a local broker and use the command-line tools to create a topic, send keyed records and read them.
Try it locally
The quickest way to experiment is the official Docker image, which starts a single-node broker in KRaft mode. The tools kafka-topics.sh, kafka-console-producer.sh and kafka-console-consumer.sh live in the image under /opt/kafka/bin. You create a topic with a partition count, produce lines (optionally with keys), and consume them from the beginning. This is for learning only; production uses several brokers.
Start a broker and create a topic, run
I ran these against Kafka 3.9.0. The container image needs about ten seconds to be ready.
docker run -d --name kafka-demo apache/kafka:3.9.0
docker exec kafka-demo /opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 \
--create --topic orders --partitions 6 --replication-factor 1
docker exec kafka-demo /opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
Output:
Created topic orders. orders
Produce keyed records and read them back, run
Each line is key:value. The consumer prints the partition and offset; note that user-1 and user-2 landed in partition 2 and the two user-1 records are in order (offsets 0 and 2). The list is sorted for readability.
printf 'user-1:placed\nuser-2:placed\nuser-3:placed\nuser-4:placed\nuser-5:placed\nuser-6:placed\nuser-1:paid\n' | \
docker exec -i kafka-demo /opt/kafka/bin/kafka-console-producer.sh \
--bootstrap-server localhost:9092 --topic orders \
--property parse.key=true --property key.separator=:
docker exec kafka-demo /opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server localhost:9092 --topic orders --from-beginning --max-messages 7 \
--property print.key=true --property print.partition=true --property print.offset=true
Output:
Partition:1 Offset:0 user-4 placed Partition:2 Offset:0 user-1 placed Partition:2 Offset:1 user-2 placed Partition:2 Offset:2 user-1 paid Partition:4 Offset:0 user-5 placed Partition:5 Offset:0 user-3 placed Partition:5 Offset:1 user-6 placed
Quick check: In the output, both `user-1` records are in the same partition. Why?
- Kafka picks partitions randomly each time
- The same key is hashed to the same partition
- Partitions are chosen alphabetically by value
- It was a coincidence of the broker
Answer
The same key is hashed to the same partition — The default partitioner hashes the key, so equal keys always map to one partition.