بخش اول : مفاهیم پایه و پیش‌نیازها
بخش دوم : جعبه ابزار یک مهندس داده
1 از 2

آشنایی با مفاهیم پایه و نصب و راه‌اندازی با KRaft

در دهه گذشته، ماهیت نرم‌افزارها به شکل بنیادین تغییر کرده است. اپلیکیشن‌ها دیگر سیستم‌های کوچک با تعداد محدود رویداد نیستند؛ بلکه به سیستم‌هایی عظیم و توزیع‌شده تبدیل شده‌اند که هر جزء آن‌ها به صورت لحظه‌ای داده تولید می‌کند:

  • رفتار کاربران در اپلیکیشن
  • رویدادهای سیستم و لاگ‌ها
  • تراکنش‌ها و سفارش‌ها
  • رخدادهای IoT، سنسورها، ماشین‌ها
  • داده‌های تحلیلی و مانیتورینگ
  • استریم‌های دیتای تراکنشی (CDC)

در چنین فضایی، دیتا پیوسته جاری است — نه در قالب رکوردهای جداگانه، بلکه در قالب Stream.
سازمان‌هایی که بتوانند این داده را در لحظه دریافت، ذخیره، پردازش و منتقل کنند، می‌توانند:

  • سریع‌تر تصمیم بگیرند
  • رفتار کاربران را آنی تحلیل کنند
  • سیستم‌های منعطف و مقیاس‌پذیر بسازند
  • جریان‌های داده را بین سرویس‌ها decouple کنند

این مدل، architecture event-driven یا Real-Time Data Platform نام دارد.
و همین‌جا Kafka مرکزیت پیدا می‌کند.


📌 Kafka چیست؟

Apache Kafka یک پلتفرم استریمینگ توزیع‌شده است که مانند یک «ستون فقرات داده» در سازمان‌ها عمل می‌کند.
Kafka نه فقط یک Message Queue، بلکه یک Commit Log توزیع‌شده با سرعت بسیار بالا و امکان ذخیره بلندمدت رویدادهاست.

ویژگی‌های اصلی Kafka:

  • ذخیره و نگهداری رویدادها
  • پردازش استریمی
  • انتقال داده بین سیستم‌ها
  • Replay پیام‌ها مثل یک دیتابیس
  • مقیاس‌پذیری افقی ساده
  • توانایی مدیریت میلیون‌ها پیام در ثانیه

به همین دلیل، بسیاری از شرکت‌ها Kafka را به‌عنوان پایه اصلی معماری داده خود انتخاب می‌کنند.


🔥 چرا تیم‌ها به سمت کافکا می‌روند؟

دلایل محبوبیت بی‌نظیر Kafka در میان تیم‌های مهندسی داده و معماری سیستم‌ها:

✔ سرعت بسیار بالا

کافکا رکوردشکن است؛ روی یک کلایستر کوچک هم می‌توانید چند صد هزار تا چند میلیون پیام در ثانیه را مدیریت کنید.

✔ تحمل خطای بالا

کافکا با Replication و ISR موتور بسیار مقاومی دارد. حتی اگر نودها از دسترس خارج شوند، سیستم ادامه می‌دهد.

✔ مقیاس‌پذیری افقی و ساده

فقط نود اضافه کنید؛ همه‌چیز بدون تغییر در برنامه‌نویسی مقیاس می‌گیرد.

✔ جداسازی سیستم‌ها (Decoupling)

سرویس‌ها بدون وابستگی مستقیم با هم صحبت می‌کنند. تولیدکننده پیام نیازی ندارد بداند مصرف‌کننده کیست و کجاست.

✔ اکوسیستم بزرگ

Kafka Streams، Connect، MirrorMaker، Schema Registry، Flink، Spark و ده‌ها ابزار دیگر.

✔ جایگزین عالی برای Queueها

به‌ویژه زمانی که حجم پیام‌ها زیاد، سرعت بالا و Replay پیام‌ها ضروری باشد.

🔥 چرا Kafka در مقایسه با صف‌های سنتی مثل RabbitMQ رشد کرد؟

اگرچه RabbitMQ سال‌ها به‌عنوان یک Message Broker محبوب استفاده می‌شد، اما Kafka به دلیل نیازهای جدید دنیای داده به‌سرعت جای آن را گرفت. مهم‌ترین دلایل:

۱) نگهداری پیام‌ها (Retention)
  • RabbitMQ پیام را بعد از مصرف حذف می‌کند.
  • Kafka پیام‌ها را براساس زمان نگه می‌دارد و می‌توان آن‌ها را بازپخش (Replay) کرد.
    این ویژگی Kafka را از یک صف معمولی به یک «Event Log» تبدیل کرده است.
۲) مقیاس‌پذیری واقعی
  • RabbitMQ هنگام افزایش بار، سریعاً Bottleneck می‌شود.
  • Kafka به‌صورت طبیعی با partition و brokerها افقی و خطی scale می‌شود و میلیون‌ها پیام را مدیریت می‌کند.
۳) Throughput بسیار بالا

Kafka به دلیل استفاده از I/O sequential و zero-copy، عملکردی دارد که چندین برابر RabbitMQ است.

۴) معماری مصرف محور یا Pull Based
  • در RabbitMQ پیام‌ها Push می‌شوند و ممکن است مصرف‌کننده overloaded شود.
  • در Kafka مصرف‌کننده خودش با Pull سرعت را کنترل می‌کند؛ نتیجه: پایداری بالاتر.
۵) پلتفرم کامل داده، نه فقط Message Queue

Kafka علاوه بر پیام‌رسانی:

  • پیام‌ها را ذخیره می‌کند
  • امکان پردازش استریمی (Kafka Streams) دارد
  • اتصال به صدها سیستم (Kafka Connect)
    بنابراین نقش آن بسیار فراتر از یک صف است.

📜 یک تاریخچه مختصر از Kafka تا نسخه ۴

Kafka در سال ۲۰۱۱ داخل LinkedIn ساخته شد. هدف اولیه: جمع‌آوری حجم عظیم رویدادهای کاربران و ارسال آن به سیستم‌های مختلف.

مهم‌ترین نقاط عطف:

🔹 Kafka 0.x : شروع مسیر
  • استفاده از ZooKeeper برای مدیریت متادیتا
  • تولد مفاهیمی مثل Topic، Partition، Consumer Group
🔹 Kafka 1.x & 2.X : بلوغ
  • بهبودهای بزرگ در Throughput
  • معرفی Kafka Streams
  • اضافه شدن Exactly-once Semantics
🔹 Kafka 3.x : شروع حذف ZooKeeper
  • معرفی KRaft (KIP-500)
  • یک معماری ساده‌تر، سریع‌تر و بدون نیاز به ZooKeeper
🔹 Kafka 4.x : مهاجرت کامل به KRaft

نسخه ۴ از ZooKeeper کاملاً جدا شده است.
KRaft اکنون متادیتا، کنترل‌پلین و کل مدیریت کلاستر را برعهده دارد.

مزیت‌ها:

  • نصب ساده‌تر
  • کلاستر سریع‌تر
  • معماری یکپارچه‌تر
  • مدیریت آسان‌تر

نسخه ۴ امروز استاندارد جدید Kafka محسوب می‌شود.


🚀 نصب و راه‌اندازی Kafka 4.0 با KRaft

در این بخش، Kafka را بدون ZooKeeper نصب می‌کنیم.


🔽 ۱. دانلود Kafka 4.0

نسخه رسمی (Scala 2.13):

https://dlcdn.apache.org/kafka/4.0.0/kafka_2.13-4.0.0.tgz

🐧 ۲. نصب Kafka در Linux / Ubuntu / WSL

✔ بررسی نسخه جاوا (حداقل Java 8)
java -version
✔ استخراج فایل
tar xfvz kafka_2.13-4.0.0.tgz
cd kafka_2.13-4.0.0
✔ اجرای Kafka در KRaft (بدون ZooKeeper)
مرحله ۱. فرمت کردن متادیتا (فقط یک‌بار):
bin/kafka-storage.sh format -t <UUID> -c config/server.properties --standalone
  • مقدار <UUID> را با دستور زیر می‌سازید:
uuidgen
مرحله ۲. راه‌اندازی Kafka broker:
bin/kafka-server-start.sh config/server.properties

🪟 ۳. نصب Kafka روی Windows

۱) نصب Java و تنظیم متغیر محیطی JAVA_HOME
۲) استخراج فایل:

tar -xvzf kafka_2.13-4.0.0.tgz
cd kafka_2.13-4.0.0

۳) فرمت کردن متادیتا:

bin\windows\kafka-storage.bat format -t <UUID> -c config\server.properties  --standalone

۴) اجرای Kafka:

bin\windows\kafka-server-start.bat config\server.properties

📌 کار با تاپیک‌ها

✔ ایجاد Topic جدید

مثال: ساخت تاپیک users با ۴ پارتیشن:

./bin/kafka-topics.sh --create --topic users --partitions 4 --replication-factor 1 --bootstrap-server localhost:9092
✔ لیست تاپیک‌ها
./bin/kafka-topics.sh --list --bootstrap-server localhost:9092
✔ مشاهده جزییات یک تاپیک
./bin/kafka-topics.sh --describe --topic users --bootstrap-server localhost:9092

📨 تولید پیام (Producer)
./bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic users --property key.separator=, --property parse.key=true

ورودی نمونه:

۱, ali
۲, ahmad
۳, sara
۱, ali2

📥 مصرف پیام (Consumer)
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic users --from-beginning

برای مشاهده کلید و Timestamp:

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic users --from-beginning --property print.key=true --property print.value=true --property print.timestamp=true

❌ حذف یک تاپیک
kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic users

🔖 نکات مهم Kafka 4.0 و KRaft

  • کاملاً بدون ZooKeeper
  • ✔ سرعت و پایداری بیشتر
  • ✔ مدیریت ساده‌تر متادیتا
  • ✔ تمام دستورات قبلی همچنان کار می‌کنند
  • ✔ فقط باید از --bootstrap-server استفاده کنید
  • ✔ فرمت کردن storage تنها یک‌بار لازم است
فروشگاه
جستجو
دوره ها

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