کار با چند Topic و Partition در Kafka

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/06/25
  • تعداد بازدید: 3

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 در گروه پردازش می‌شود و بار بین اعضا تقسیم می‌شود.

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.