بخش اول: مفاهیم پایه، معماری و Kafka Core
بخش دوم : سایر بازیگران اکوسیستم کافکا
بخش سوم ابزارهای جانبی کافکا : کانکت و رجیستری
بخش چهارم : پردازش جریان در عمل
بخش پنجم :‌ مباحث مدیریتی و تکمیلی

قابلیت جدید Share Groups: نزدیک شدن Kafka به صف واقعی

در نسخه ۴.۱ Apache Kafka، ویژگی جدیدی به نام Share Groups معرفی شده است که رفتار Kafka را به سمت یک صف پیام توزیع‌شده شبیه به RabbitMQ یا SQS می‌برد، در حالی که همچنان از مزایای مقیاس‌پذیری و قابلیت اطمینان Kafka بهره‌مند می‌شود. این ویژگی به‌ویژه برای پردازش‌های پس‌زمینه، صف‌های کاری و سیستم‌های مبتنی بر رویداد که نیاز به انعطاف‌پذیری بیشتری نسبت به مدل‌های سنتی دارند، مناسب است.


چرا Share Groups اهمیت دارد؟

در مدل سنتی Kafka:

  • هر پارتیشن تنها توسط یک کانسیومر در گروه قابل خواندن است.
  • اگر تاپیک ۴ پارتیشن داشته باشد، تنها ۴ کانسیومر می‌توانند به‌صورت فعال پیام بخوانند.
  • کانسیومرهای اضافی یا باید منتظر بمانند یا بیکار می‌شوند.

با معرفی Share Groups:

  • چندین کانسیومر می‌توانند همزمان از یک پارتیشن پیام بخوانند.
  • این امکان فراهم می‌شود که تعداد کانسیومرها از تعداد پارتیشن‌ها بیشتر باشد.
  • پیام‌ها به‌صورت دینامیک و اشتراکی بین کانسیومرها توزیع می‌شوند.

نحوه کار Share Groups

در این مدل، یک مکانیزم مدیریتی جدید در بروکرهای Kafka به نام Share Group Coordinator معرفی شده است که وظایف زیر را بر عهده دارد:

  • مدیریت و پیگیری وضعیت پردازش پیام‌ها برای هر کانسیومر.
  • تخصیص پیام‌ها به کانسیومرها به‌صورت اشتراکی.
  • مدیریت acknowledgment پیام‌ها به‌صورت فردی.

این لایه به کانسیومرها این امکان را می‌دهد که بدون نگرانی از تعداد پارتیشن‌ها، پیام‌ها را پردازش کنند و در صورت نیاز، پیام‌ها را مجدداً دریافت کنند.


ویژگی‌های اصلی Share Groups

  • تعداد کانسیومرها بیشتر از پارتیشن‌ها: برخلاف مدل سنتی که تعداد کانسیومرها محدود به تعداد پارتیشن‌ها بود، در این مدل می‌توان تعداد کانسیومرها را افزایش داد.
  • acknowledgment فردی: هر پیام به‌صورت جداگانه تأیید می‌شود که این امکان را برای پردازش دقیق‌تر و مدیریت خطاها فراهم می‌کند.
  • پردازش موازی: کانسیومرها می‌توانند به‌صورت موازی پیام‌ها را پردازش کنند که موجب افزایش کارایی سیستم می‌شود.

وضعیت فعلی در Python

تا نسخه ۴.۱، کلاینت‌های Python مانند confluent-kafka و kafka-python از ویژگی Share Groups پشتیبانی نمی‌کنند. این ویژگی در حال حاضر در کلاینت Java در دسترس است و در آینده به سایر کلاینت‌ها اضافه خواهد شد.

برای استفاده از این ویژگی در Python، می‌توان از مدل‌های سنتی مانند گروه‌های کانسیومر استفاده کرد و با مدیریت دستی آفست‌ها و منطق retry، رفتار مشابهی را شبیه‌سازی کرد.


نمونه کد (در حال حاضر در Python پشتیبانی نمی‌شود)

# کد شبه‌کد (در حال حاضر در Python پشتیبانی نمی‌شود)

from kafka import KafkaShareConsumer

# پیکربندی
consumer = KafkaShareConsumer(
    bootstrap_servers="localhost:9092",
    group_id="my-share-group",
    acknowledgment_mode="explicit"
)

consumer.subscribe(["my-topic"])

while True:
    records = consumer.poll(timeout_ms=100)
    for record in records:
        try:
            process(record.value)
            consumer.acknowledge(record, "ACCEPT")   # ✅ موفقیت
        except TemporaryError:
            consumer.acknowledge(record, "RELEASE")  # 🔁 تلاش مجدد
        except Exception:
            consumer.acknowledge(record, "REJECT")   # 🚫 شکست دائمی

نتیجه‌گیری

ویژگی Share Groups در Kafka 4.1 این امکان را فراهم می‌کند که Kafka را به‌عنوان یک صف پیام توزیع‌شده با قابلیت‌های مقیاس‌پذیری بالا و مدیریت دقیق پیام‌ها استفاده کنید. این ویژگی به‌ویژه برای سیستم‌هایی که نیاز به پردازش موازی و مدیریت خطاهای دقیق دارند، مناسب است. با توجه به اینکه این ویژگی در حال حاضر در کلاینت Java در دسترس است، انتظار می‌رود در نسخه‌های آینده به سایر کلاینت‌ها نیز اضافه شود.

فروشگاه
جستجو
دوره ها

لطفا کلمات کلیدی را وارد کنید