Kafka به توسعهدهندگان امکان مدیریت چندین Topic و تقسیم هر Topic به چند Partition را میدهد. این قابلیت باعث مقیاسپذیری و توزیع بار پردازشی بین Consumerها میشود.
۱. ایجاد چند Topic
میتوان با دستور CLI چند Topic ایجاد کرد:
docker exec -it kafka kafka-topics --bootstrap-server localhost:9092 --create --topic topic1 --partitions 2 --replication-factor 1
docker exec -it kafka kafka-topics --bootstrap-server localhost:9092 --create --topic topic2 --partitions 3 --replication-factor 1
۲. ارسال پیام به Partition مشخص
میتوان پیامها را به Partition خاصی از یک Topic ارسال کرد. در kafka-python با استفاده از کلید پیام (key) Partition مشخص میشود:
from kafka import KafkaProducer
producer = KafkaProducer(
bootstrap_servers='localhost:9092',
value_serializer=lambda v: v.encode('utf-8')
)
# ارسال پیام به topic1
producer.send('topic1', key=b'partition-0', value='پیام برای Partition 0')
producer.send('topic1', key=b'partition-1', value='پیام برای Partition 1')
producer.flush()
۳. مصرف پیامها از چند Topic
Consumer میتواند به چند Topic متصل شود و پیامها را از همه آنها دریافت کند:
from kafka import KafkaConsumer
consumer = KafkaConsumer(
'topic1', 'topic2',
bootstrap_servers='localhost:9092',
auto_offset_reset='earliest',
enable_auto_commit=True,
group_id='multi-topic-group',
value_deserializer=lambda v: v.decode('utf-8')
)
for message in consumer:
print(f"Topic: {message.topic}, Partition: {message.partition}, پیام: {message.value}")
توضیح مفاهیم:
- Topic: دستهبندی پیامها برای مدیریت منطقی دادهها.
- Partition: تقسیم Topic به بخشهای جداگانه برای توزیع بار و حفظ Ordering در هر Partition.
- Key: تعیین Partition برای هر پیام به کمک hash key.
- Consumer گروهی: هر Partition تنها توسط یک Consumer در گروه پردازش میشود و بار بین اعضا تقسیم میشود.