https://github.com/notesparvvaresh/kafka
توضیحات کافکا به زبان ساده
https://github.com/notesparvvaresh/kafka
explainability kafka
Last synced: 5 months ago
JSON representation
توضیحات کافکا به زبان ساده
- Host: GitHub
- URL: https://github.com/notesparvvaresh/kafka
- Owner: notesparvvaresh
- License: mit
- Created: 2025-04-19T09:32:24.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-04-19T11:08:01.000Z (about 1 year ago)
- Last Synced: 2025-04-19T16:39:02.680Z (about 1 year ago)
- Topics: explainability, kafka
- Homepage:
- Size: 4.88 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
کافکا (Kafka) یک **پلتفرم متنباز (Open-source)** برای **پردازش جریان دادهها (stream processing)** هست که در ابتدا توسط شرکت **LinkedIn** توسعه داده شد و بعدها به **Apache Software Foundation** واگذار شد.
---
### ✅ تعریف ساده Kafka:
کافکا مثل یه **صف پیام (message queue)** خیلی سریع و مقیاسپذیره. توش سیستمهای مختلف میتونن دادههایی که تولید میکنن رو بذارن، و سیستمهای دیگه بیان این دادهها رو بخونن.
---
### 🔧 Kafka برای چی استفاده میشه؟
1. **جمعآوری داده به صورت بلادرنگ (Real-time)**
مثلاً لاگهای سرورها، کلیکهای کاربران، یا تراکنشهای بانکی.
2. **پردازش دادهها در لحظه**
مثلاً اگه یه کاربر خریدی انجام بده، سیستم سریع اینو پردازش کنه و به چند بخش دیگه خبر بده.
3. **اتصال بین سرویسها (Integration)**
مثل یک پل ارتباطی بین میکروسرویسها که بهشون اجازه میده با هم بدون وابستگی مستقیم کار کنن.
4. **جایگزین سیستمهای قدیمی مثل RabbitMQ یا ActiveMQ**
مخصوصاً وقتی حجم دادهها خیلی زیاده.
---
### 📦 کافکا چه اجزایی داره؟
### 1. **Producer (فرستنده پیام)**
**Producer** شخص یا سیستمی است که **پیامها** رو میفرسته به Kafka. این پیامها میتونن هر نوع دادهای باشن: از لاگها گرفته تا دادههای تراکنش یا اطلاعات کاربران.
- **چطور کار میکنه؟**
پروسهای که دادهها رو میفرسته، باید تعیین کنه که پیام به کدوم **Topic** باید بره. هر **Producer** میتونه به چندین **Topic** پیام بفرسته.
- **مثال:**
وقتی کاربر یک خرید آنلاین انجام میده، سیستم سفارش (Order Service) پیامهایی ارسال میکنه که اطلاعات خرید (مثل محصول، مبلغ، و زمان) رو شامل میشه.
---
### 2. **Consumer (گیرنده پیام)**
**Consumer** سیستم یا برنامهای است که **پیامها** رو از Kafka میخونه. این سیستمها معمولاً بعد از دریافت پیام، عملیات خاصی رو انجام میدن.
- **چطور کار میکنه؟**
Consumer به یک **Topic** خاص متصل میشه و هر بار که پیامی وارد اون **Topic** بشه، اون رو دریافت و پردازش میکنه.
- **مثال:**
سرویسهای **Payment Service**، **Inventory Service** و **Shipping Service**، پیامهای خرید رو میخونن و برای هر کدوم عملیات خاص خودشون رو انجام میدن، مثلاً بررسی پرداخت، کاهش موجودی، و ارسال کالا.
---
### 3. **Broker (سرور پیام)**
**Broker** سروری است که پیامها رو **ذخیره** میکنه و آنها رو **مدیریت** میکنه. هر **Kafka Broker** میتونه چندین **Topic** رو مدیریت کنه و پیامها رو به **Consumers** تحویل بده.
- **چطور کار میکنه؟**
پیامها در **Broker** ذخیره میشن. هر Broker میتونه به تنهایی یا به صورت خوشهای از چندین Broker با هم کار کنه تا بار کاری تقسیم بشه و مقیاسپذیری بهتری داشته باشه.
- **مثال:**
اگر تعداد زیادی پیام به Kafka فرستاده بشه، این پیامها بین **Brokers** توزیع میشن تا کارایی و سرعت بالا بره. هر Broker یک بخش از دادهها رو ذخیره میکنه.
---
### 4. **Topic (موضوع یا کانال پیام)**
**Topic** در واقع یک **کانال** یا **دستهبندی** برای پیامهاست. وقتی پیامها به Kafka فرستاده میشن، باید در یک **Topic** خاص قرار بگیرن.
- **چطور کار میکنه؟**
هر پیام باید به یک **Topic** مربوطه ارسال بشه. این کمک میکنه تا پیامها از نظر نوع داده مرتب و دستهبندی بشن. برای مثال، میشه یک Topic برای "خریدهای آنلاین" و یکی دیگه برای "فعالیتهای کاربری" داشت.
- **مثال:**
مثلاً یک **Topic** برای خریدهای آنلاین داریم به اسم `orders`، و وقتی کاربر خریدی انجام میده، پیام به این Topic ارسال میشه. Consumerهای مختلف میتونن به این Topic گوش بدن و اطلاعات لازم رو دریافت کنن.
---
### 5. **Partition (بخشبندی پیامها در داخل یک Topic)**
**Partition** به معنای تقسیمبندی دادهها در داخل هر **Topic** است. وقتی یک **Topic** خیلی بزرگ میشه یا تعداد پیامها زیاد میشه، دادهها به **Partitions** مختلف تقسیم میشن تا هم سرعت پردازش بالا بره و هم کارایی بیشتر بشه.
- **چطور کار میکنه؟**
هر **Partition** به صورت مستقل پیامها رو ذخیره میکنه و میتونه روی سرورهای مختلف (Brokers) توزیع بشه. این کار باعث میشه که Kafka بتونه به راحتی مقیاسپذیر بشه و بار زیادی رو مدیریت کنه.
- **مثال:**
فرض کن یک Topic داریم به نام `orders`. این Topic ممکنه به چندین **Partition** تقسیم بشه، مثلاً یک Partition برای محصولات الکترونیکی، یک Partition برای پوشاک، و یک Partition برای لوازم خانگی. این تقسیمبندی به Kafka کمک میکنه که پیامها رو سریعتر و به طور موازی پردازش کنه.
---
### 6. **Zookeeper (مدیریت وضعیت Kafka)**
**Zookeeper** یک سیستم برای **مدیریت و هماهنگی** وضعیتهای مختلف Kafka است. در نسخههای قدیمیتر Kafka از Zookeeper برای مدیریت وضعیتهای **Broker**ها و **Topic**ها استفاده میشد.
- **چطور کار میکنه؟**
Zookeeper اطلاعاتی از وضعیتها، مثل اطلاعات مربوط به کدام Brokerها فعال هستند، کدام Partitionها باید به کدام Broker اختصاص پیدا کنن و ... رو نگه میداره. همچنین زمانی که یک Broker از دست میره، Zookeeper کمک میکنه تا سیستم به سرعت دوباره پایدار بشه.
- **مثال:**
فرض کن یک Broker از کار میافته. Zookeeper این رو تشخیص میده و به Kafka اطلاع میده که دادهها باید بین Brokers دیگه توزیع بشن تا خدمات قطع نشه.
---
### ⚡️ تغییر به **KRaft** (به جای Zookeeper)
در نسخههای جدید Kafka، امکان استفاده از **KRaft** (Kafka Raft) به جای Zookeeper معرفی شده. KRaft یه مدل جدید هست که برای **مدیریت وضعیت** بدون نیاز به Zookeeper طراحی شده.
---
### جمعبندی:
- **Producer** پیامها رو ارسال میکنه.
- **Consumer** پیامها رو میخونه.
- **Broker** پیامها رو ذخیره و مدیریت میکنه.
- **Topic** کانالی برای دستهبندی پیامهاست.
- **Partition** برای تقسیمبندی دادهها در داخل Topic هست.
- **Zookeeper** (یا KRaft در نسخههای جدید) برای مدیریت وضعیتها و هماهنگی اجزای Kafka استفاده میشه.
---
### 👨💻 با Kafka چیکار میشه کرد؟ چند مثال:
- رصد آنی فعالیت کاربران روی وبسایت (مثلاً رفتار کاربر تو دیجیکالا)
- جمعآوری و ذخیرهی لاگها از سرورها
- سیستمهای توصیهگر (مثلاً: چون اینو دیدی، اونم شاید بخوای)
- پردازش لحظهای تراکنشهای بانکی برای کشف تقلب
- ایجاد داشبوردهای بلادرنگ (real-time dashboard)
---
### ✅ مزایای Kafka:
- سرعت بالا (میلیونها پیام در ثانیه)
- مقاوم در برابر خطا
- مقیاسپذیر
- ذخیرهسازی پایدار پیامها (میتونی پیامو بعداً هم بخونی)
- پردازش بلادرنگ دادهها با Kafka Streams یا Apache Flink
---
### 🛒 سناریو واقعی: خرید آنلاین تو یه فروشگاه مثل دیجیکالا
فرض کن یه کاربر اومده تو سایت و خرید انجام داده. پشت صحنه، چند تا سرویس با هم باید هماهنگ بشن:
1. **سرویس سفارش (Order Service)**: ثبت میکنه که کاربر چی خرید.
2. **سرویس پرداخت (Payment Service)**: چک میکنه پرداخت موفق بوده یا نه.
3. **سرویس انبار (Inventory Service)**: از موجودی کم میکنه.
4. **سرویس ارسال (Shipping Service)**: آماده میشه برای ارسال بسته.
5. **سرویس تحلیل رفتار (Analytics)**: رفتار خرید کاربر رو ذخیره میکنه برای تحلیل.
---
### 🎯 چرا Kafka؟
بهجای اینکه هر سرویس مستقیماً به بقیه پیام بده (که پیچیدگی و وابستگی زیاد میاره)، همه با Kafka ارتباط دارن:
- **Order Service** پیام خرید رو میفرسته به Kafka
- بقیه سرویسها (مثل Payment، Inventory و ...) به Kafka گوش میدن (Consumer) و وقتی پیام جدید اومد، عمل خودشون رو انجام میدن.
---
### 🖼️ دیاگرام ساده Kafka در این سناریو:
```
[Order Service]
|
| → Kafka Topic: "orders"
|
↓
+---------------------------+
| Kafka Broker |
+---------------------------+
↓ ↓ ↓ ↓
[Payment] [Inventory] [Shipping] [Analytics]
Service Service Service Service
(Consumer) (Consumer) (Consumer) (Consumer)
```
---
### 🧠 نتیجهاش چیه؟
- هر سرویس مستقله و فقط به Kafka وصله
- میتونیم پیامها رو ذخیره کنیم و بعداً دوباره بخونیم
- اگه یه سرویس بیاد پایین، بقیه آسیب نمیبینن
- عملکرد کلی خیلی مقیاسپذیر و سریع میشه
---