1 분 소요


This post was written while reading the book Kafka, The Definitive Guide. For simple execution and example programming, I referred to the official documentation rather than the book.

Apache Kafka

image

Publishing Kafka Topics and Creating Producer and Consumer Programs - Python

Let’s create a new Topic. We’ll create a Topic called blog-post to use as an example.

bin/kafka-topics.sh --create --topic blog-post --bootstrap-server localhost:9092

Setting Up the Development Environment

  • Setting up a virtual environment
virtualenv venv
source venv/bin/activate

  • Installing the kafka module
(venv) $ pip3 install kafka-python

producer.py

I used the time module to measure how long it takes to send 10,000 messages to the Queue.

import time
from kafka import KafkaProducer

# Create producer object
# acks 0 -> prioritize fast transmission, acks 1 -> prioritize data accuracy
producer = KafkaProducer(acks=0, compression_type='gzip',bootstrap_servers=['localhost:9092'])

start = time.time()

for i in range(10000):
 producer.send('blog-post',b'Kafka Blog Post Event Message')
 producer.flush() # Send data in the queue

end = time.time() - start
print(end)

consumer.py

from kafka import KafkaConsumer, consumer

# Create consumer object
consumer = KafkaConsumer(
    'blog-post',
    bootstrap_servers=['127.0.0.1:9092'],
    auto_offset_reset='earliest',
    enable_auto_commit=True,
    consumer_timeout_ms=1000
)

while True:
    for message in consumer:
        print(message.topic, message.partition, message.offset, message.key, message.value)

Execution

  • Since we created the Topic before starting, we just need to run producer.py and consumer.py.
  • producer.py generates data and sends 10,000 messages to the ‘blog-post’ Topic.
  • consumer.py reads data, and since we created an infinite loop, it prints messages as they are received.
> python producer.py
3.8476390838623047

> python consumer.py
...
blog-post 0 100 None b'Kafka Blog Post Event Message'
blog-post 0 101 None b'Kafka Blog Post Event Message'
blog-post 0 102 None b'Kafka Blog Post Event Message'
blog-post 0 103 None b'Kafka Blog Post Event Message'
...

댓글남기기