
تو نسخه جدید Kafka 4.0 که اخیرا منتشر شده، مجموعه ای از ویژگی ها و بهبودهای جدید معرفی شدن که به نظرم مهم ترینش، عملکرد پیش فرض در حالت KRaft هست. خب این تغییر، وابستگی Kafka به Apache ZooKeeper رو به طور کامل حذف میکنه.
تا قبل از این نسخه، استفاده از ZooKeeper تو کافکا حالت پیش فرض و رایج بود، درسته که KRaft قبلا معرفی شده ولی اختیاری بود و خیلی از سیستم ها همچنان با ZooKeeper پیاده سازی میشدن. تجربه شخصی من هم مثل بیشتر دوستان تو مدیریت ZooKeeper همیشه با چالش و دردسر همراه بود. ZooKeeper رو سال ها به عنوان یکی از مولفه های کلیدی معماری Kafka برای مدیریت متادیتا، هماهنگی بین بروکرها و... استفاده می کردیم. ولی خب هم زمان یه لایه از پیچیدگی و نگهداری اضافه رو همراه خودش داشت. حذف این وابستگی باعث شده دیپلوی راحت تر انجام بشه و مقیاس پذیری هم به شکل خوبی بهبود پیدا کنه(به ويژه تو سناریوهایی که تعداد پارتیشن ها خیلی زیاد میشن (مثلا بالای ۱۰۰ هزار).
آقای Lalit Moharana که یکی از اعضای AWS Community Builder، تو لینکدین نوشته بود:
با انتشار نسخه 4.0، ZooKeeper کنار میره و یک همکاری 14 ساله به پایان میرسه. این تغییر با حذف یک سیستم مجزا (ZooKeeper)، معماری Kafka رو ساده تر میکنه، مقیاس پذیری رو بهبود میده و راه رو برای یک آینده ای خودکفا هموار میکنه. همه این ها به لطف جادوی پروتکل Raft در KRaft هستش.
اما چرا اصلا این تغییر اتفاق افتاده؟ چون سربار و محدودیت های ZooKeeper (مثلا در مقیاس بیش از ۱۰۰ هزار پارتیشن) دیگه نمی تونستن با رشد Kafka هماهنگ بمونن. در عوض KRaft یک سیستم یکپارچه هستش که میلیون ها پارتیشن رو پشتیبانی میکنه و بازیابی سریع تری هم داره.
یکی دیگه از تغییراتی خوبی که انجام شده، معرفی پروتکل جدید Consumer Group توی KIP-848 هستش. این پروتکل عملکرد rebalance رو به شکل خیلی خوبی بهبود داده و اون توقف های طولانی (stop-the-world) آزار دهنده رو تا حد زیادی برطرف کرده. البته این قابلیت فقط سمت سرور به صورت پیش فرض فعال و برای کلاینت ها لازمه که group.protocol=consumer تنظیم بشه.
یکی دیگه از قابلیت های خوب این نسخه که به صورت early access معرفی شده، KIP-932 (Queues for Kafka) هست که امکان تعریف shared groups ها روی topic های Kafka فراهم میکنه. در مورد این قابلیت قبلا به شکل کامل نوشتم:
https:// lnkd .in/dgjXC7Md
در نهایت، یه نکته جالب دیگه هم تغییر نسخه مورد نیاز Java برای Kafka هست:
کKafka Clients و Streams حالا حداقل به Java 11 نیاز دارن
کKafka Brokers و Connect هم باید با Java 17 اجرا بشن
KIP-848: https:// lnkd .in/dGgUfiUe
KRaft Simplifies Architecture: https:// lnkd .in/dKcbnbXQ