📖 Scenario: You are working with Apache Kafka to send and receive messages between applications. Kafka uses topics to organize messages. In this project, you will create a simple Kafka producer to send a message and a Kafka consumer to receive it.
🎯 Goal: Build a Kafka producer that sends a message to a topic called first_topic and a Kafka consumer that reads and prints that message.
📋 What You'll Learn
Create a Kafka producer that sends the message 'Hello Kafka!' to the topic first_topic.
Create a Kafka consumer that subscribes to first_topic and reads messages.
Print the received message to the console.
💡 Why This Matters
🌍 Real World
Kafka is widely used for building real-time data pipelines and streaming apps. Sending and receiving messages is the core of Kafka's communication.
💼 Career
Understanding Kafka producers and consumers is essential for roles in data engineering, backend development, and real-time analytics.
Progress0 / 4 steps
1
Create Kafka producer and send message
Create a Kafka producer using the KafkaProducer class from kafka-python. Send the message 'Hello Kafka!' to the topic 'first_topic'. Use bootstrap_servers=['localhost:9092'] when creating the producer.
Kafka
Hint
Use KafkaProducer to create the producer. The message must be bytes, so prefix the string with b.
2
Create Kafka consumer and subscribe to topic
Create a Kafka consumer using the KafkaConsumer class from kafka-python. Subscribe the consumer to the topic 'first_topic'. Use bootstrap_servers=['localhost:9092'] when creating the consumer.
Kafka
Hint
Use KafkaConsumer('first_topic', bootstrap_servers=['localhost:9092'], auto_offset_reset='earliest') to create and subscribe in one step.
3
Read message from consumer
Use a for loop to read messages from the consumer. Inside the loop, get the message value using message.value. Decode the bytes to a string using .decode('utf-8').
Kafka
Hint
Use a for loop to get messages. Decode the message bytes to string.
4
Print the received message
Print the decoded message stored in the variable text using print(text).
Kafka
Hint
Use print(text) to show the message on the screen.
Practice
(1/5)
1. What is the main purpose of producing a message in Kafka?
easy
A. To send data to a Kafka topic
B. To read data from a Kafka topic
C. To delete messages from a Kafka topic
D. To create a new Kafka topic
Solution
Step 1: Understand Kafka producing
Producing means sending messages to a Kafka topic as bytes.
Step 2: Differentiate producing from consuming
Consuming reads messages, but producing sends them.
Final Answer:
To send data to a Kafka topic -> Option A
Quick Check:
Producing = Sending messages [OK]
Hint: Producing means sending messages to Kafka topics [OK]
Common Mistakes:
Confusing producing with consuming
Thinking producing deletes messages
Assuming producing creates topics
2. Which of the following is the correct way to create a Kafka producer in Python using the kafka-python library?
easy
A. producer = KafkaConsumer(topic='mytopic')
B. producer = KafkaConsumer(bootstrap_servers='localhost:9092')
C. producer = KafkaProducer(topic='mytopic')
D. producer = KafkaProducer(bootstrap_servers='localhost:9092')
Solution
Step 1: Identify Kafka producer creation syntax
KafkaProducer is created with bootstrap_servers parameter specifying Kafka server address.
Step 2: Eliminate consumer and wrong parameters
KafkaConsumer is for consuming, not producing. Topic is not a parameter for producer creation.
Final Answer:
producer = KafkaProducer(bootstrap_servers='localhost:9092') -> Option D
Quick Check:
Producer uses KafkaProducer with bootstrap_servers [OK]
Hint: Producer uses KafkaProducer with bootstrap_servers [OK]
Common Mistakes:
Using KafkaConsumer instead of KafkaProducer
Passing topic during producer creation
Missing bootstrap_servers parameter
3. Consider this Python code snippet using kafka-python:
from kafka import KafkaProducer, KafkaConsumer
producer = KafkaProducer(bootstrap_servers='localhost:9092')
producer.send('test-topic', b'Hello Kafka')
producer.flush()
consumer = KafkaConsumer('test-topic', bootstrap_servers='localhost:9092', auto_offset_reset='earliest', consumer_timeout_ms=1000)
for msg in consumer:
print(msg.value.decode())
What will be the output when this code runs?
medium
A. Error: topic not found
B. Hello Kafka
C. No output, consumer times out
D. b'Hello Kafka'
Solution
Step 1: Analyze producer sending message
Producer sends bytes message b'Hello Kafka' to 'test-topic' and flushes to ensure delivery.
Step 2: Analyze consumer reading message
Consumer reads from 'test-topic' from earliest offset and decodes bytes to string before printing.
Final Answer:
Hello Kafka -> Option B
Quick Check:
Consumer prints decoded message string [OK]
Hint: Consumer decodes bytes to string before printing [OK]
Common Mistakes:
Expecting raw bytes output
Assuming consumer misses message due to timeout
Thinking topic does not exist
4. You wrote this code to consume messages but it raises an error:
consumer = KafkaConsumer('my-topic')
for message in consumer:
print(message.value.decode())
What is the most likely cause of the error?
medium
A. Using decode() on message.value which is already a string
B. Not calling consumer.poll() before iterating
C. Missing bootstrap_servers parameter when creating KafkaConsumer
D. Topic name should be a list, not a string
Solution
Step 1: Check KafkaConsumer creation requirements
KafkaConsumer requires bootstrap_servers parameter to connect to Kafka cluster.
Step 2: Validate other options
decode() is needed because message.value is bytes; consumer.poll() is optional; topic can be string or list.
Final Answer:
Missing bootstrap_servers parameter when creating KafkaConsumer -> Option C
Quick Check:
KafkaConsumer needs bootstrap_servers [OK]
Hint: Always specify bootstrap_servers when creating KafkaConsumer [OK]
Common Mistakes:
Omitting bootstrap_servers parameter
Assuming message.value is string without decoding
Thinking poll() is mandatory before iteration
5. You want to produce and consume the first message in a Kafka topic named 'orders'. Which sequence of steps correctly achieves this in Python using kafka-python?
hard
A. Create KafkaProducer with bootstrap_servers, send message as bytes, flush; create KafkaConsumer with bootstrap_servers and auto_offset_reset='earliest', then read and decode messages
B. Create KafkaConsumer first, then KafkaProducer; send message as string; consumer reads without decoding
C. Create KafkaProducer without bootstrap_servers, send string message; create KafkaConsumer with bootstrap_servers, read messages as bytes
D. Create KafkaProducer with topic parameter, send message; create KafkaConsumer without bootstrap_servers, read and decode messages
Solution
Step 1: Properly create KafkaProducer and send message
KafkaProducer must be created with bootstrap_servers; messages sent as bytes and flushed to ensure delivery.
Step 2: Properly create KafkaConsumer and read messages
KafkaConsumer needs bootstrap_servers and auto_offset_reset='earliest' to read from the first message; decode bytes to string when reading.
Final Answer:
Create KafkaProducer with bootstrap_servers, send message as bytes, flush; create KafkaConsumer with bootstrap_servers and auto_offset_reset='earliest', then read and decode messages -> Option A
Quick Check:
Correct producer and consumer setup with bytes and decoding [OK]
Hint: Producer sends bytes and flushes; consumer reads earliest and decodes [OK]
Common Mistakes:
Creating producer or consumer without bootstrap_servers
Sending string instead of bytes
Not setting auto_offset_reset to 'earliest'
Not decoding message bytes before printing
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.