آنچه در این مقاله میخوانید
آشنایی با کافکا (راهنمایی جامع)
۳ مهر ۱۴۰۴
آپاچی کافکا بهعنوان یک پلتفرم متنباز برای پردازش رویدادها و جریانهای دادهای در لحظه، جایگاه به خصوصی را پیدا کرده است. این ابزار قدرتمند، که توسط بنیاد آپاچی توسعه یافته، به دلیل مقیاسپذیری بالا، توان عملیاتی چشمگیر و قابلیت اطمینان بینظیر، انتخاب اول سازمانهای بزرگ برای مدیریت حجم عظیمی از دادهها بهصورت توزیعشده است. اگر به دنبال راهاندازی یک سیستم جریان دادهای قوی هستید که بتواند نیازهای پروژههای پیچیده شما را برآورده کند، این آموزش برای شما خواهد بود.
در این راهنما از لیارا، شما را با فرآیند دانلود، نصب و پیکربندی آپاچی کافکا آشنا خواهیم کرد. همچنین نحوهی ایجاد و حذف تاپیکها، ارسال و دریافت رویدادها با استفاده از اسکریپتهای کافکا و مقایسه آن با سایر ابزارهای مشابه را بررسی خواهیم کرد.
با پلتفرم PHP لیارا، سایت خود را با سرعت بالا و عملکرد بهینه راهاندازی کنید!
✅ نصب و پیکربندی سریع✅ مقیاسپذیری خودکار✅ امنیت پیشرفته✅ مدیریت آسان و بدون پیچیدگی
راه اندازی سریع و خرید هاست PHP لیارا
آنچه در ادامه خواهید خواند:
- پیشنیازها
- گام اول: دانلود و پیکربندی آپاچی کافکا
- گام دوم: ایجاد سرویس systemd برای کافکا
- گام سوم: مدیریت تاپیکها و ارسال/دریافت پیامها
- مقایسه کافکا با سایر سیستمها
- جمع بندی

پیشنیازها
برای شروع این آموزش، به موارد زیر نیاز دارید:
- ماشین یا سرور با حداقل ۴ گیگابایت رم و ۲ هسته پردازشی. اگر از سرور اوبونتو استفاده میکنید، راهنمای تنظیم اولیه سرور را دنبال کنید.
- جاوا نسخه ۸ یا بالاتر روی ماشین محلی یا سرور شما نصب شده باشد. برای نصب جاوا در اوبونتو، به آموزش نصب جاوا با استفاده از Apt در اوبونتو مراجعه کنید.
گام اول: دانلود و پیکربندی آپاچی کافکا
در این بخش، شما کافکا را دانلود و استخراج میکنید و آن را تحت یک حساب کاربری مجزا برای افزایش امنیت پیکربندی خواهید کرد. همچنین، کافکا را با استفاده از KRaft (مکانیزم هماهنگی داخلی کافکا) راهاندازی میکنیم.
ایجاد حساب کاربری برای کافکا
برای امنیت بیشتر، بهتر است کافکا تحت یک حساب کاربری غیرروت اجرا شود. ابتدا یک کاربر با نام kafka ایجاد کنید:
sudo adduser kafka
در این مرحله، از شما یک رمز عبور قوی خواسته میشود. رمز عبور را وارد کنید و برای سایر فیلدها (مانند اطلاعات تماس) کافی است کلید Enter را فشار دهید.
سپس، به حساب کاربری kafka سوئیچ کنید:
su kafka
دانلود کافکا
آخرین نسخه کافکا (در زمان نگارش این آموزش، نسخه 3.7.0 با پشتیبانی از اسکالا 2.13) را از وبسایت رسمی آپاچی دانلود میکنیم. برای این کار، از دستور زیر استفاده کنید:
curl -o /tmp/kafka.tgz https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
استخراج و سازماندهی فایلها
فایل دانلودشده را در دایرکتوری خانگی کاربر kafka استخراج میکنیم. ابتدا دایرکتوری مقصد را ایجاد کنید:
mkdir ~/kafka
سپس فایل فشرده را با دستور زیر استخراج کنید:
tar -xzf /tmp/kafka.tgz -C ~/kafka --strip-components=1
گزینه –strip-components=1 باعث میشود که دایرکتوری ریشه فایل فشرده نادیده گرفته شود و محتویات مستقیماً در ~/kafka قرار گیرند.
انتخاب بین ZooKeeper و KRaft
کافکا از دو سیستم برای مدیریت متادیتا پشتیبانی میکند: آپاچی ZooKeeper و KRaft. زوکیپر یک پروژه متنباز دیگر از بنیاد آپاچی است که هماهنگی دادهها در سیستمهای توزیعشده را فراهم میکند. اما از نسخه 3.3 کافکا، پشتیبانی از KRaft معرفی شد که بهطور خاص برای هماهنگی نمونههای کافکا طراحی شده و فرآیند نصب را سادهتر کرده و مقیاسپذیری را افزایش میدهد. برخلاف زوکیپر که متادیتا را بهصورت خارجی ذخیره میکند، KRaft دادهها را درون خود کافکا مدیریت میکند.
از آنجایی که پشتیبانی از زوکیپر از نسخه 4 کافکا به بعد حذف خواهد شد، در این آموزش از KRaft استفاده میکنیم.
پیکربندی اولیه
به دایرکتوری کافکا بروید:
cd ~/kafka
فایل پیکربندی KRaft در مسیر config/kraft/server.properties قرار دارد. این فایل را با ویرایشگر متن باز کنید:
nano config/kraft/server.properties
در این فایل، تنظیمات مربوط به ذخیرهسازی لاگها را پیدا کنید:
properties
############################# Log Basics #############################
# A comma separated list of directories under which to store log files
log.dirs=/tmp/kafka-logs
مسیر پیشفرض /tmp/kafka-logs به دلیل موقتی بودن مناسب نیست. آن را به مسیر زیر تغییر دهید:
properties
log.dirs=/home/kafka/kafka-logs
این مسیر در دایرکتوری خانگی کاربر kafka قرار دارد و اگر وجود نداشته باشد، کافکا آن را ایجاد خواهد کرد. پس از اعمال تغییرات، فایل را ذخیره کرده و ببندید.
آمادهسازی و راهاندازی کافکا
برای راهاندازی کافکا، ابتدا باید یک شناسه یکتا (Cluster ID) برای خوشه کافکا ایجاد کنید. دستور زیر یک شناسه تصادفی تولید میکند:
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
سپس، فضای ذخیرهسازی لاگها را با استفاده از شناسه تولیدشده فرمت کنید:
bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
خروجی مشابه زیر خواهد بود:
Formatting /home/kafka/kafka-logs with metadata.version 3.7-IV4.
حالا میتوانید سرور کافکا را برای اولین بار اجرا کنید:
bin/kafka-server-start.sh config/kraft/server.properties
خروجی نشان میدهد که کافکا با موفقیت راهاندازی شده و روی آدرس 0.0.0.0:9092 آماده دریافت اتصال است. برای توقف سرور، کلیدهای Ctrl+C را فشار دهید.
گام دوم: ایجاد سرویس systemd برای کافکا
اجرای کافکا در یک جلسه ترمینال باز مناسب نیست، زیرا با بستن ترمینال، فرآیند متوقف میشود. در این بخش، یک سرویس systemd ایجاد میکنیم تا کافکا بهصورت خودکار و در پسزمینه اجرا شود.
فایل سرویس را در مسیر /etc/systemd/system/kafka.service ایجاد کنید:
sudo nano /etc/systemd/system/kafka.service
محتویات زیر را در فایل قرار دهید:
ini
[Unit]
Description=سرویس سرور آپاچی کافکا
[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/kraft/server.properties > /home/kafka/kafka/kafka.log 2>&1'
ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
- Description: توضیحی مختصر درباره سرویس.
- Type=simple: نشان میدهد که دستور بهصورت ساده اجرا میشود.
- User=kafka: سرویس تحت کاربر kafka اجرا میشود.
- ExecStart: دستوری که کافکا را راهاندازی میکند و لاگها را به فایل مشخصی هدایت میکند.
- ExecStop: دستوری برای توقف کافکا.
- Restart=on-abnormal: در صورت خرابی غیرعادی، سرویس بهصورت خودکار بازراهاندازی میشود.

فایل را ذخیره کرده و ببندید. سپس سرویس را فعال کنید:
sudo systemctl start kafka
برای بررسی وضعیت سرویس، دستور زیر را اجرا کنید:
sudo systemctl status kafka
خروجی مشابه زیر خواهد بود:
kafka.service – سرویس سرور آپاچی کاف
Loaded: loaded (/etc/systemd/system/kafka.service; disabled; preset: enabled)
Active: active (running) since Mon 2024-02-26 11:17:30 UTC; 2min 40s ago
Main PID: 1061 (sh)
Tasks: 94 (limit: 4646)
Memory: 409.2M
CPU: 10.491s
برای اطمینان از اجرای خودکار سرویس پس از ریاستارت سرور، آن را فعال کنید:
sudo systemctl enable kafka
گام سوم: مدیریت تاپیکها و ارسال/دریافت پیامها
اکنون که سرور کافکا آماده است، با نحوهی ایجاد، حذف و مدیریت تاپیکها و همچنین ارسال و دریافت پیامها آشنا میشوید.
ایجاد تاپیک
تاپیکها در کافکا مانند دستهبندیهایی هستند که پیامها به آنها ارسال میشوند. برای ایجاد یک تاپیک با نام first-topic، دستور زیر را اجرا کنید:
bin/kafka-topics.sh --create --topic first-topic --bootstrap-server localhost:9092
خروجی:
Created topic first-topic.
برای مشاهده لیست تاپیکها:
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
خروجی:
first-topic
برای اطلاعات بیشتر درباره تاپیک:
bin/kafka-topics.sh --describe --topic first-topic --bootstrap-server localhost:9092
خروجی شامل جزئیاتی مانند نام تاپیک، تعداد پارتیشنها (۱ در اینجا) و فاکتور تکثیر (۱، زیرا فقط روی یک سرور است) خواهد بود.
ارسال پیامها
برای ارسال پیام به تاپیک، از اسکریپت kafka-console-producer.sh استفاده کنید:
bin/kafka-console-producer.sh --topic first-topic --bootstrap-server localhost:9092
در پرامپت ظاهرشده، یک پیام مانند test وارد کنید و Enter را فشار دهید. برای خروج، Ctrl+C را بزنید.
دریافت پیامها
برای خواندن پیامها، از اسکریپت kafka-console-consumer.sh استفاده کنید. اگر بخواهید پیامهای قبلی را بخوانید، از گزینه –from-beginning استفاده کنید:
bin/kafka-console-consumer.sh --topic first-topic --from-beginning --bootstrap-server localhost:9092
خروجی پیامهای ارسالی مانند test را نمایش میدهد.
برای تست جریان داده در لحظه، در یک ترمینال جدید مصرفکننده را اجرا کنید:
bin/kafka-console-consumer.sh --topic first-topic --bootstrap-server localhost:9092
در ترمینال اصلی، تولیدکننده را دوباره اجرا کنید و پیامهایی مانند second test و third test وارد کنید. این پیامها بهصورت بلادرنگ در ترمینال مصرفکننده نمایش داده میشوند.
حذف تاپیک
برای حذف تاپیک first-topic:
bin/kafka-topics.sh --delete --topic first-topic --bootstrap-server localhost:9092
سپس، با دستور لیست تاپیکها، مطمئن شوید که تاپیک حذف شده است.
مقایسه کافکا با سایر سیستمها
آپاچی کافکا بهعنوان یک راهحل پیشرو در جریانسازی رویدادها شناخته میشود، اما ابزارهای دیگری مانند آپاچی پالسار و RabbitMQ نیز در این حوزه استفاده میشوند.
- RabbitMQ: یک سیستم پیامرسانی سنتی است که بر ارسال سریع پیامها به مصرفکنندگان بدون توجه به ترتیب آنها تمرکز دارد. این سیستم برای سناریوهایی که نیاز به فیلتر کردن و مسیریابی پیامها دارند مناسب است.
- آپاچی پالسار: ابتدا بهعنوان یک سیستم پیامرسانی طراحی شد، اما بعداً قابلیتهای جریانسازی رویدادها را اضافه کرد. پالسار برای پروژههایی که به ترکیبی از پیامرسانی و جریانسازی نیاز دارند، مناسب است.
- کافکا: با تمرکز بر پایداری و حفظ ترتیب رویدادها، برای سناریوهایی که نیاز به آرشیو کردن دادهها و پردازش یکباره دارند، ایدهآل است.
جمع بندی
در این آموزش، شما با موفقیت آپاچی کافکا را نصب و پیکربندی کردید، یک سرویس systemd برای اجرای آن در پسزمینه ایجاد کردید و با مدیریت تاپیکها و ارسال/دریافت پیامها آشنا شدید. کافکا به دلیل انعطافپذیری و پشتیبانی از کلاینتهای متنوع، انتخابی قدرتمند برای یکپارچهسازی در پروژههای شماست.