آیا نیاز دارید آپاچی کافکا به صورت محلی روی اوبونتو اجرا شود؟ این راهنما شما را در نصب آخرین نسخه و تنظیم آن با حالت KRaft (Kafka Raft Metadata) که جایگزین نیاز به Zookeeper میشود، راهنمایی میکند. ما کافکا را برای اجرا به عنوان یک سرویس سیستمی تنظیم خواهیم کرد، سپس محیط را برای توسعه محلی آماده خواهیم کرد.
پیش نیازها #
قبل از ادامه، مطمئن شوید که موارد زیر را دارید:
- یک سرور مجازی با سیستم عامل اوبونتو
- یک یوزر با قابلیت sudo و دسترسی SSH به سرور.
- حداقل ۲ گیگابایت رم سرور.
کافکا برای اجرا به یک محیط مناسب نیاز دارد. این بخش با نصب جاوا، ایجاد یک کاربر سیستم اختصاصی و پیکربندی صحیح کافکا، محیط را راهاندازی میکند. نصب جاوا آپاچی کافکا برای اجرا به جاوا نیاز دارد. اوبونتو به راحتی چندین نسخه از OpenJDK را در مخازن پیشفرض خود ارائه میدهد، که در حال حاضر OpenJDK 21 نسخه پیشفرض است. این بدان معناست که میتوانید آن را مستقیماً نصب کنید.
با بهروزرسانی لیست بستههای خود شروع کنید. این کار تضمین میکند که با آخرین نسخههای موجود کار میکنید:
sudo apt update
سپس، OpenJDK 21 را با اجرای دستور زیر نصب کنید:
sudo apt install openjdk-21-jdk -y
پس از نصب، بررسی کنید که جاوا به درستی نصب شده است:
java -version
شما باید خروجیای مشابه این را ببینید که نشان میدهد جاوا ۲۱ نصب شده است:
خروجیopenjdk version "21.0.6" 2025-01-21
OpenJDK Runtime Environment (build 21.0.6+7-Ubuntu-124.04.1)
OpenJDK 64-Bit Server VM (build 21.0.6+7-Ubuntu-124.04.1, mixed mode, sharing)
اکنون، جاوا نصب شده و آماده استفاده است.
ایجاد کاربر و دایرکتوریهای کافکا #
ما یک کاربر اختصاصی برای اجرای کافکا ایجاد خواهیم کرد تا سیستم ما سازماندهی شده و امنیت بهبود یابد. همچنین ساختار دایرکتوری را که کافکا در آن نصب خواهد شد و دادههای آن را ذخیره میکند، تنظیم خواهیم کرد.
ابتدا، یک کاربر سیستم جدید kafkaبدون دسترسی ورود به سیستم ایجاد کنید:
sudo useradd -r -m -U -d /opt/kafka -s /bin/false kafka
این kafkaدستور کاربر را ایجاد کرده و دایرکتوری خانگی آن را روی قرار میدهد /opt/kafka. همچنین به دلایل امنیتی از ورود مستقیم این کاربر به سیستم جلوگیری میکند.
در مرحله بعد، دایرکتوری اصلی کافکا را ایجاد کنید که در آن فایلهای کافکا را نصب خواهیم کرد:
sudo mkdir -p /opt/kafka
پس از این، باید kafkaمالکیت کاربر را اعطا کنیم:
sudo chown -R kafka:kafka /opt/kafka
این به kafkaکاربر کنترل روی /opt/kafkaدایرکتوری را میدهد. به این ترتیب، کافکا در زمان اجرا به دسترسی لازم برای خواندن، نوشتن و مدیریت همه چیز در این پوشه دسترسی خواهد داشت.
در نهایت، برای تأیید اینکه مالکیت و مجوزها به درستی تنظیم شدهاند، دستور زیر را اجرا کنید:
ls -ld /opt/kafka
شما باید خروجی مشابهی با این ببینید:
خروجیdrwxr-x--- 2 kafka kafka 4096 Apr 27 14:35 /opt/kafka
با این کار، ما یک کاربر و دایرکتوری اختصاصی برای کافکا راهاندازی کردهایم.
کافکا را دانلود و استخراج کنید #
با رفتن به یک دایرکتوری موقت که در آن آرشیو کافکا را دانلود و با آن کار خواهید کرد، شروع کنید. یک انتخاب خوب، /tmpدایرکتوری زیر است:
cd /tmp
اکنون، نسخه باینری کافکا ۴.۰.۰ را با استفاده از wgetدستور زیر دانلود کنید:
wget https://downloads.apache.org/kafka/4.0.0/kafka_2.13-4.0.0.tgz
پس از دانلود آرشیو، آن را در مسیر زیر استخراج کنید /opt/kafka:
sudo tar -xzf kafka_2.13-4.0.0.tgz -C /opt/kafka --strip-components=1
این --strip-components=1پرچم از پوشه بالایی صرف نظر میکند و فایلها را مستقیماً در قرار میدهد /opt/kafka.
در مرحله بعد، مالکیت فایل را بهروزرسانی کنید تا kafkaکاربر به همه چیز دسترسی کامل داشته باشد:
sudo chown -R kafka:kafka /opt/kafka
این تضمین میکند که کافکا میتواند فایلهای خود را بدون هیچ مشکلی در زمینه مجوز مدیریت کند.
برای تأیید اینکه همه چیز به درستی استخراج شده است، محتویات دایرکتوری را فهرست کنید /opt/kafka:
sudo ls -l /opt/kafka
شما باید خروجی مشابه زیر را ببینید:
خروجیtotal 64
drwxr-xr-x 3 kafka kafka 4096 Mar 14 08:20 bin
drwxr-xr-x 2 kafka kafka 4096 Mar 14 08:20 config
drwxr-xr-x 2 kafka kafka 4096 Apr 28 09:34 libs
-rw-r--r-- 1 kafka kafka 14699 Mar 14 08:19 LICENSE
drwxr-xr-x 2 kafka kafka 4096 Mar 14 08:20 licenses
-rw-r--r-- 1 kafka kafka 27064 Mar 14 08:19 NOTICE
drwxr-xr-x 2 kafka kafka 4096 Mar 14 08:20 site-docs
با نگاه به این خروجی، اولین پوشهای که متوجه خواهید شد، پوشهی . است bin. این پوشه شامل اسکریپتهای اجرایی برای کافکا است. در اینجا اسکریپتهایی را خواهید یافت که به شما امکان میدهند سرور کافکا را راهاندازی کنید، تاپیک ایجاد کنید، پیامها را تولید و مصرف کنید و وظایف مدیریتی را انجام دهید. بیشتر تعاملات عملی شما با کافکا از طریق این اسکریپتها انجام میشود.
پوشه بعدی است config. فایلهای پیکربندی کافکا در اینجا ذخیره میشوند. اگر نیاز به تنظیم نحوه اجرای کافکا دارید، مثلاً تنظیم شناسه کارگزار، بهروزرسانی پورتهای شنونده یا تغییر گزینههای گزارش، این تغییرات را در اینجا انجام خواهید داد.
همچنین پوشه را مشاهده خواهید کرد libs. این پوشه تمام کتابخانههای جاوا و وابستگیهایی را که کافکا برای عملکرد خود به آنها نیاز دارد، در خود جای داده است. این کتابخانهها وظایف مهمی مانند شبکهسازی، ذخیرهسازی و ارتباطات داخلی بین اجزای کافکا را بر عهده دارند.
در زیر پوشهها، چند فایل نیز وجود دارد. این LICENSEفایل شرایط و ضوابط توزیع کافکا را شرح میدهد.
درست بعد از آن licensesدایرکتوری قرار دارد. برخلاف LICENSEفایل، این دایرکتوری شامل مجوزهایی برای کتابخانههای شخص ثالث است که همراه با کافکا ارائه میشوند. این دایرکتوری شفافیت لازم را در مورد تمام اجزای خارجی مورد استفاده کافکا فراهم میکند.
همچنین فایلی را مشاهده خواهید کرد NOTICEکه شامل اطلاعیههای قانونی اضافی و اسناد مربوط به نرمافزارهای شخص ثالث موجود در کافکا است. این فایل، اطلاعات موجود در LICENSEفایل را تکمیل میکند.
در نهایت، این site-docsپوشه مستندات آفلاین برای کافکا را ارائه میدهد. اگرچه بیشتر مستندات کافکا به صورت آنلاین در دسترس هستند، اما این پوشه به شما امکان دسترسی به راهنماها و منابع مهم را بدون نیاز به اتصال به اینترنت میدهد.
پیکربندی کافکا #
از نسخه ۴.۰.۰ به بعد، کافکا به طور پیشفرض در حالت KRaft اجرا میشود. این بدان معناست که متادیتای خود را به صورت داخلی و بدون Zookeeper مدیریت میکند.
در این بخش، کافکا را طوری پیکربندی میکنیم که به عنوان یک سرور مستقل با استفاده از حالت KRaft اجرا شود. فایل پیکربندی را بهروزرسانی میکنیم، یک Cluster ID ایجاد میکنیم و فضای ذخیرهسازی کافکا را فرمت میکنیم.
مرحله ۱: بهروزرسانی پیکربندی کافکا #
با بررسی اینکه کافکا به درستی برای اجرا در حالت KRaft تنظیم شده است، شروع کنید.
فایل را باز کنید server.properties:
sudo nano /opt/kafka/config/server.properties
حالا، بررسی کنید که خطوط زیر به درستی تنظیم شده باشند:
process.roles=broker,controller
node.id=1
controller.quorum.bootstrap.servers=localhost:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
این تنظیمات به کافکا میگویند که هم به عنوان واسطه و هم به عنوان کنترلکننده در یک دستگاه عمل کند. آنها همچنین پورتهایی را که کافکا برای صحبت با کلاینتها و مدیریت ارتباطات داخلی خود استفاده خواهد کرد، تعریف میکنند.
سپس، اگر تنظیمات زیر Server Basicsاز قبل وجود ندارد، آن را در زیر بخش اضافه کنید:
controller.quorum.voters=1@localhost:9093

این به کافکا میگوید که کدام گره به عنوان کنترلکننده عمل میکند و چگونه میتوان به آن دسترسی پیدا کرد. اگرچه ما فقط با یک سرور کار میکنیم، کافکا همچنان انتظار دارد که فرمت کامل برای node-id@host:portمدیریت صحیح عملیات خوشه داخلی استفاده شود.
نکته :
controller.quorum.voters=1@localhost:9093یعنی:
۱شناسه گره منحصر به فرد سرور ما است.localhost:9093آدرس و پورتی است که کنترلر در آن گوش میدهد.
بدون این، کافکا قادر نخواهد بود فضای ذخیرهسازی خود را به درستی مقداردهی اولیه کند.
در نهایت، log.dirsتنظیمات زیر این Log Basicsبخش را پیدا کنید و آن را از حالت پیشفرض /tmp/kraft-combined-logsبه یک دایرکتوری پایدارتر بهروزرسانی کنید:
log.dirs=/opt/kafka/data
این کار دادههای کافکا را به طور ایمن در زیر ذخیره میکند /opt/kafka، نه در زیر /tmp، که ممکن است به طور خودکار پاک شود.
CTRL + 0با فشار دادن ، سپس Enterو CTRL + Xبرای خروج، فایل را ذخیره کرده و ببندید .
مرحله ۲: ایجاد شناسه خوشه #
در مرحله بعد، باید یک شناسه خوشه منحصر به فرد ایجاد کنیم. این شناسه، ابردادههای کافکا را به سرور ما مرتبط میکند.
دستور زیر را اجرا کنید:
sudo /opt/kafka/bin/kafka-storage.sh random-uuid
خروجی یک رشته تصادفی طولانی خواهد بود که شبیه به این است:
خروجیHnRVGDW9SB-bI_yUGGEK_A
این شناسه خوشه را با دقت کپی و ذخیره کنید. ما از آن برای مقداردهی اولیه فضای ذخیرهسازی کافکا استفاده خواهیم کرد.
مرحله ۳: قالببندی دایرکتوری ذخیرهسازی کافکا #
از دستور زیر برای قالببندی دایرکتوری ذخیرهسازی کافکا استفاده کنید. آن را <your-cluster-id>با شناسه واقعی که ایجاد کردهاید جایگزین کنید:
sudo /opt/kafka/bin/kafka-storage.sh format -t <your-cluster-id> -c /opt/kafka/config/server.properties
اگر دستور با موفقیت اجرا شود، پیام تأیید مشابهی را مشاهده خواهید کرد:
خروجیFormatting metadata directory /opt/kafka/data with metadata.version 4.0-IV3.
اکنون کافکا برای اجرا در حالت KRaft مستقل تنظیم شده است و فضای ذخیرهسازی آن آماده است. در مرحله بعد، آن را طوری پیکربندی میکنید که به عنوان یک سرویس اجرا شود و سرور را برای تکمیل تنظیمات راهاندازی کنید.
ایجاد یک سرویس systemd برای کافکا #
برای مدیریت کافکا مانند یک سرویس مناسب در اوبونتو، آن را در زیر تنظیم خواهیم کرد systemd. این به ما امکان میدهد کافکا را مانند هر سرویس استاندارد لینوکس، در هنگام بوت سیستم، شروع، متوقف و به طور خودکار اجرا کنیم.
ما یک فایل سرویس برای کافکا ایجاد خواهیم کرد و آن را به درستی پیکربندی خواهیم کرد.
مرحله ۱: ایجاد فایل سرویس کافکا #
با ایجاد یک فایل سرویس جدید با نام زیر شروع کنید kafka.service:
sudo nano /etc/systemd/system/kafka.service
در مرحله بعد، کد زیر را اضافه کنید:
[Unit]
Description=Apache Kafka Server
After=network.target
[Service]
Type=simple
User=kafka
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
هر بخش از فایل سرویس، systemdنحوه مدیریت کافکا را بیان میکند.
این [Unit]بخش توضیح میدهد که کافکا چه زمانی باید شروع به کار کند. ما میخواهیم کافکا تا زمان آماده شدن شبکه منتظر بماند، زیرا برای عملکرد صحیح به ارتباط شبکه نیاز دارد. این تنظیم After=network.targetتضمین میکند که در هنگام بوت شدن، خیلی زود شروع به کار نکند.
بخش بعدی [Service]، بخشی است که نحوه اجرای کافکا به عنوان یک فرآیند را تعریف میکند. ما تنظیم Type=simpleمیکنیم systemdکه کافکا بدون نیاز به handshakeهای اضافی، در پیشزمینه اجرا شود. همچنین مشخص میکنیم User=kafkaکه کافکا تحت کاربر غیر روتی که قبلاً ایجاد کردهایم اجرا شود و یک لایه امنیتی اضافه کنیم. این ExecStartخط به اسکریپت شروع کافکا و فایل پیکربندی اشاره میکند، در حالی که نحوه توقف کافکا به طور مناسب در صورت نیاز ExecStopرا بیان میکند . این تنظیم به کافکا کمک میکند تا در صورت خرابی به هر دلیل غیرمنتظرهای، به طور خودکار مجدداً راهاندازی شود و آن را مقاومتر نگه دارد.systemdRestart=on-abnormal
در آخر، [Install]بخش. این بخش میگوید systemdکه کافکا چه زمانی باید شروع شود. ما آن را به لینک میکنیم multi-user.target، که وضعیت استاندارد سیستم برای سرورها و ماشینهای چند کاربره است. به این ترتیب، کافکا هر زمان که سیستم به طور عادی بوت شود، به طور خودکار شروع به کار میکند.
پس از اضافه کردن محتوا، فایل را ذخیره کرده و خارج شوید.
مرحله ۲: آمادهسازی دایرکتوری دادههای کافکا #
قبل از شروع کافکا، باید مطمئن شویم که دایرکتوری دادهای که در آن پیکربندی کردهایم server.propertiesوجود دارد.
دایرکتوری را ایجاد کنید و مالکیت صحیح را تنظیم کنید:
sudo mkdir -p /opt/kafka/data
sudo chown -R kafka:kafka /opt/kafka/data
این به کافکا مکان مناسبی برای ذخیره لاگهای داخلی و دادههای تاپیک میدهد. اگر این دایرکتوری وجود نداشته باشد، کافکا شروع به کار نخواهد کرد.
مرحله ۳: فعالسازی و شروع سرویس کافکا #
اکنون که محیط آماده است، میتوانیم systemdسرویس جدید را تشخیص دهیم:
sudo systemctl daemon-reload
سپس، کافکا را فعال کنید تا به طور خودکار در هنگام بوت شروع شود:
sudo systemctl enable kafka
سپس، سرویس کافکا را مجدداً راهاندازی کنید:
sudo systemctl restart kafka
در نهایت، وضعیت سرویس کافکا را بررسی کنید تا از فعال بودن آن اطمینان حاصل کنید:
sudo systemctl status kafka
باید ببینید که کافکا فعال است و همانطور که باید اجرا میشود.
خروجی• kafka.service - Apache Kafka Server
Loaded: loaded (/etc/systemd/system/kafka service; enabled; preset: enabled)
Active: active (running) since Mon 2025-04-28 15:57:38 UTC; 8s ago
Main PID: 12463 (java)
Tasks: 102 (limit: 4542)
Memory: 367.OM (peak: 369.5M)
CPU: 5.6085
CGroup: /system slice/kafka.service
۱۲۴۶۳ java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMіllіs=20 -XX:InitіatingHeap0ccupancyPeгcent=З5_ -XX:+Expl¿c¡‡
…
تست کافکا #
با اجرای کافکا به عنوان یک سرویس، مرحله بعدی تأیید این است که آیا میتواند پیامها را از ابتدا تا انتها مدیریت کند یا خیر. شما یک تاپیک ایجاد میکنید، چند پیام منتشر میکنید و بررسی میکنید که آیا یک مصرفکننده میتواند آنها را دریافت کند یا خیر.
مرحله ۱: ایجاد یک تاپیک کافکا #
برای ایجاد تاپیک این دستور را اجرا کنید:
sudo /opt/kafka/bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
این یک تاپیک جدید با نام ایجاد میکند test-topicو از طریق پورت به کارگزار کافکا که روی دستگاه محلی شما در حال اجرا است متصل میشود ۹۰۹۲. این تاپیک با یک پارتیشن تنظیم شده است که برای اهداف آزمایشی کافی است. از آنجایی که در این تنظیمات فقط یک کارگزار وجود دارد، ضریب تکثیر نیز روی یک تنظیم میشود، به این معنی که کافکا هر پیام را فقط در آن کارگزار ذخیره میکند.
اگر همه چیز طبق انتظار پیش برود، خروجی مشابهی با این خواهید دید:
خروجیCreated topic test-topic.
مرحله ۲: یک تولیدکننده راهاندازی کنید #
با ایجاد تاپیک، میتوانید یک تولیدکننده (producer) را شروع کنید. تولیدکننده یک برنامه ساده است که پیامهایی را به یک تاپیک کافکا ارسال میکند.
دستور زیر را اجرا کنید:
sudo /opt/kafka/bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
اکنون، ترمینال شما میتواند ورودی را بپذیرد. اکنون میتوانید هر پیامی را تایپ کنید، را فشار دهید Enterو کافکا آن را به test-topicتاپیک ارسال خواهد کرد.
برای مثال، این پیام را تایپ کنید:
خروجیHello Kafka!
Testing...
هر خطی که تایپ میکنید به عنوان یک پیام جدید ارسال شده به کافکا در نظر گرفته میشود.
مرحله ۳: یک مشتری ایجاد کنید #
برای اینکه ببینید آیا کافکا پیامها را به درستی ارسال میکند یا خیر، یک پنجره یا تب ترمینال دیگر باز کنید.
در این ترمینال جدید، یک مصرفکننده کافکا راهاندازی کنید:
sudo /opt/kafka/bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092
این دستور به همان test-topicتاپیک متصل میشود و از ابتدا شروع به خواندن پیامها میکند.
همانطور که شما پیامهایی را از تولیدکننده ارسال میکنید، آنها مستقیماً به مصرفکننده ارسال میشوند. برای مثال، تایپ کردن Hello, Kafka! در تولیدکننده، بلافاصله همان خط را در مصرفکننده نمایش میدهد:
خروجیHello Kafka!
Testing…
این نشان میدهد که کافکا طبق انتظار عمل میکند.
نتیجه گیری #
اکنون کافکا با استفاده از حالت KRaft روی دستگاه شما نصب و اجرا شده است. شما آن را به عنوان یک سرویس سیستمی مناسب پیکربندی کرده و تأیید کردهاید که میتواند پیامها را ارسال و دریافت کند.
با این، میتوانید سرویسهای سادهای بسازید. اگر تصمیم دارید بعداً ویژگیهای پیشرفتهتر کافکا را بررسی کنید، این تنظیمات پایه محکمی به شما میدهد.
