کافکا (Kafka) یک پلتفرم متنباز (Open-source) برای پردازش جریان دادهها (stream processing) هست که در ابتدا توسط شرکت LinkedIn توسعه داده شد و بعدها به Apache Software Foundation واگذار شد.
کافکا مثل یه صف پیام (message queue) خیلی سریع و مقیاسپذیره. توش سیستمهای مختلف میتونن دادههایی که تولید میکنن رو بذارن، و سیستمهای دیگه بیان این دادهها رو بخونن.
-
جمعآوری داده به صورت بلادرنگ (Real-time)
مثلاً لاگهای سرورها، کلیکهای کاربران، یا تراکنشهای بانکی. -
پردازش دادهها در لحظه
مثلاً اگه یه کاربر خریدی انجام بده، سیستم سریع اینو پردازش کنه و به چند بخش دیگه خبر بده. -
اتصال بین سرویسها (Integration)
مثل یک پل ارتباطی بین میکروسرویسها که بهشون اجازه میده با هم بدون وابستگی مستقیم کار کنن. -
جایگزین سیستمهای قدیمی مثل RabbitMQ یا ActiveMQ
مخصوصاً وقتی حجم دادهها خیلی زیاده.
Producer شخص یا سیستمی است که پیامها رو میفرسته به Kafka. این پیامها میتونن هر نوع دادهای باشن: از لاگها گرفته تا دادههای تراکنش یا اطلاعات کاربران.
-
چطور کار میکنه؟
پروسهای که دادهها رو میفرسته، باید تعیین کنه که پیام به کدوم Topic باید بره. هر Producer میتونه به چندین Topic پیام بفرسته. -
مثال:
وقتی کاربر یک خرید آنلاین انجام میده، سیستم سفارش (Order Service) پیامهایی ارسال میکنه که اطلاعات خرید (مثل محصول، مبلغ، و زمان) رو شامل میشه.
Consumer سیستم یا برنامهای است که پیامها رو از Kafka میخونه. این سیستمها معمولاً بعد از دریافت پیام، عملیات خاصی رو انجام میدن.
-
چطور کار میکنه؟
Consumer به یک Topic خاص متصل میشه و هر بار که پیامی وارد اون Topic بشه، اون رو دریافت و پردازش میکنه. -
مثال:
سرویسهای Payment Service، Inventory Service و Shipping Service، پیامهای خرید رو میخونن و برای هر کدوم عملیات خاص خودشون رو انجام میدن، مثلاً بررسی پرداخت، کاهش موجودی، و ارسال کالا.
Broker سروری است که پیامها رو ذخیره میکنه و آنها رو مدیریت میکنه. هر Kafka Broker میتونه چندین Topic رو مدیریت کنه و پیامها رو به Consumers تحویل بده.
-
چطور کار میکنه؟
پیامها در Broker ذخیره میشن. هر Broker میتونه به تنهایی یا به صورت خوشهای از چندین Broker با هم کار کنه تا بار کاری تقسیم بشه و مقیاسپذیری بهتری داشته باشه. -
مثال:
اگر تعداد زیادی پیام به Kafka فرستاده بشه، این پیامها بین Brokers توزیع میشن تا کارایی و سرعت بالا بره. هر Broker یک بخش از دادهها رو ذخیره میکنه.
Topic در واقع یک کانال یا دستهبندی برای پیامهاست. وقتی پیامها به Kafka فرستاده میشن، باید در یک Topic خاص قرار بگیرن.
-
چطور کار میکنه؟
هر پیام باید به یک Topic مربوطه ارسال بشه. این کمک میکنه تا پیامها از نظر نوع داده مرتب و دستهبندی بشن. برای مثال، میشه یک Topic برای "خریدهای آنلاین" و یکی دیگه برای "فعالیتهای کاربری" داشت. -
مثال:
مثلاً یک Topic برای خریدهای آنلاین داریم به اسمorders
، و وقتی کاربر خریدی انجام میده، پیام به این Topic ارسال میشه. Consumerهای مختلف میتونن به این Topic گوش بدن و اطلاعات لازم رو دریافت کنن.
Partition به معنای تقسیمبندی دادهها در داخل هر Topic است. وقتی یک Topic خیلی بزرگ میشه یا تعداد پیامها زیاد میشه، دادهها به Partitions مختلف تقسیم میشن تا هم سرعت پردازش بالا بره و هم کارایی بیشتر بشه.
-
چطور کار میکنه؟
هر Partition به صورت مستقل پیامها رو ذخیره میکنه و میتونه روی سرورهای مختلف (Brokers) توزیع بشه. این کار باعث میشه که Kafka بتونه به راحتی مقیاسپذیر بشه و بار زیادی رو مدیریت کنه. -
مثال:
فرض کن یک Topic داریم به نامorders
. این Topic ممکنه به چندین Partition تقسیم بشه، مثلاً یک Partition برای محصولات الکترونیکی، یک Partition برای پوشاک، و یک Partition برای لوازم خانگی. این تقسیمبندی به Kafka کمک میکنه که پیامها رو سریعتر و به طور موازی پردازش کنه.
Zookeeper یک سیستم برای مدیریت و هماهنگی وضعیتهای مختلف Kafka است. در نسخههای قدیمیتر Kafka از Zookeeper برای مدیریت وضعیتهای Brokerها و Topicها استفاده میشد.
-
چطور کار میکنه؟
Zookeeper اطلاعاتی از وضعیتها، مثل اطلاعات مربوط به کدام Brokerها فعال هستند، کدام Partitionها باید به کدام Broker اختصاص پیدا کنن و ... رو نگه میداره. همچنین زمانی که یک Broker از دست میره، Zookeeper کمک میکنه تا سیستم به سرعت دوباره پایدار بشه. -
مثال:
فرض کن یک Broker از کار میافته. Zookeeper این رو تشخیص میده و به Kafka اطلاع میده که دادهها باید بین Brokers دیگه توزیع بشن تا خدمات قطع نشه.
در نسخههای جدید Kafka، امکان استفاده از KRaft (Kafka Raft) به جای Zookeeper معرفی شده. KRaft یه مدل جدید هست که برای مدیریت وضعیت بدون نیاز به Zookeeper طراحی شده.
- Producer پیامها رو ارسال میکنه.
- Consumer پیامها رو میخونه.
- Broker پیامها رو ذخیره و مدیریت میکنه.
- Topic کانالی برای دستهبندی پیامهاست.
- Partition برای تقسیمبندی دادهها در داخل Topic هست.
- Zookeeper (یا KRaft در نسخههای جدید) برای مدیریت وضعیتها و هماهنگی اجزای Kafka استفاده میشه.
- رصد آنی فعالیت کاربران روی وبسایت (مثلاً رفتار کاربر تو دیجیکالا)
- جمعآوری و ذخیرهی لاگها از سرورها
- سیستمهای توصیهگر (مثلاً: چون اینو دیدی، اونم شاید بخوای)
- پردازش لحظهای تراکنشهای بانکی برای کشف تقلب
- ایجاد داشبوردهای بلادرنگ (real-time dashboard)
- سرعت بالا (میلیونها پیام در ثانیه)
- مقاوم در برابر خطا
- مقیاسپذیر
- ذخیرهسازی پایدار پیامها (میتونی پیامو بعداً هم بخونی)
- پردازش بلادرنگ دادهها با Kafka Streams یا Apache Flink
فرض کن یه کاربر اومده تو سایت و خرید انجام داده. پشت صحنه، چند تا سرویس با هم باید هماهنگ بشن:
- سرویس سفارش (Order Service): ثبت میکنه که کاربر چی خرید.
- سرویس پرداخت (Payment Service): چک میکنه پرداخت موفق بوده یا نه.
- سرویس انبار (Inventory Service): از موجودی کم میکنه.
- سرویس ارسال (Shipping Service): آماده میشه برای ارسال بسته.
- سرویس تحلیل رفتار (Analytics): رفتار خرید کاربر رو ذخیره میکنه برای تحلیل.
بهجای اینکه هر سرویس مستقیماً به بقیه پیام بده (که پیچیدگی و وابستگی زیاد میاره)، همه با Kafka ارتباط دارن:
- Order Service پیام خرید رو میفرسته به Kafka
- بقیه سرویسها (مثل Payment، Inventory و ...) به Kafka گوش میدن (Consumer) و وقتی پیام جدید اومد، عمل خودشون رو انجام میدن.
[Order Service]
|
| → Kafka Topic: "orders"
|
↓
+---------------------------+
| Kafka Broker |
+---------------------------+
↓ ↓ ↓ ↓
[Payment] [Inventory] [Shipping] [Analytics]
Service Service Service Service
(Consumer) (Consumer) (Consumer) (Consumer)
- هر سرویس مستقله و فقط به Kafka وصله
- میتونیم پیامها رو ذخیره کنیم و بعداً دوباره بخونیم
- اگه یه سرویس بیاد پایین، بقیه آسیب نمیبینن
- عملکرد کلی خیلی مقیاسپذیر و سریع میشه