در نسخه ۴.۱ Apache Kafka، ویژگی جدیدی به نام Share Groups معرفی شده است که رفتار Kafka را به سمت یک صف پیام توزیعشده شبیه به RabbitMQ یا SQS میبرد، در حالی که همچنان از مزایای مقیاسپذیری و قابلیت اطمینان Kafka بهرهمند میشود. این ویژگی بهویژه برای پردازشهای پسزمینه، صفهای کاری و سیستمهای مبتنی بر رویداد که نیاز به انعطافپذیری بیشتری نسبت به مدلهای سنتی دارند، مناسب است.
در مدل سنتی Kafka:
با معرفی Share Groups:
در این مدل، یک مکانیزم مدیریتی جدید در بروکرهای Kafka به نام Share Group Coordinator معرفی شده است که وظایف زیر را بر عهده دارد:
این لایه به کانسیومرها این امکان را میدهد که بدون نگرانی از تعداد پارتیشنها، پیامها را پردازش کنند و در صورت نیاز، پیامها را مجدداً دریافت کنند.
تا نسخه ۴.۱، کلاینتهای Python مانند confluent-kafka و kafka-python از ویژگی Share Groups پشتیبانی نمیکنند. این ویژگی در حال حاضر در کلاینت Java در دسترس است و در آینده به سایر کلاینتها اضافه خواهد شد.
برای استفاده از این ویژگی در Python، میتوان از مدلهای سنتی مانند گروههای کانسیومر استفاده کرد و با مدیریت دستی آفستها و منطق retry، رفتار مشابهی را شبیهسازی کرد.
# کد شبهکد (در حال حاضر در 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 در دسترس است، انتظار میرود در نسخههای آینده به سایر کلاینتها نیز اضافه شود.