Apache Kafka چیست؟
Apache Kafka یک پیامرسان توزیعشده و محبوب است که برای مدیریت حجم بالایی از دادههای بلادرنگ طراحی شده است. یک کلاستر Kafka بسیار مقیاسپذیر و مقاوم در برابر خطا بوده و همچنین نسبت به سایر پیامرسانها مانند ActiveMQ و RabbitMQ، نرخ انتقال (Throughput) بسـیار بالاتری دارد. هرچند معمولاً به عنوان یک سیستم پیامرسانی publish/subscribe استفاده میشود، بسیاری از سازمانها نیز از آن برای تجمیع لاگها بهره میبرند، زیرا ذخیرهسازی پایدار برای پیامهای منتشر شده فراهم میکند.
سیستم پیامرسانی publish/subscribe به یک یا چند تولیدکننده این امکان را میدهد تا بدون نگرانی از تعداد مصرفکنندهها یا نحوه پردازش پیامها، پیام ارسال کنند. مشتریان مشترک به طور خودکار از بهروزرسانیها و ایجاد پیامهای جدید مطلع میشوند. این سیستم نسبت به سیستمهایی که در آنها مشتریان باید بهصورت دورهای وضعیت پیامهای جدید را بررسی کنند (polling)، کارآمدتر و مقیاسپذیرتر است.
نصب و پیکربندی Apache Kafka روی Ubuntu 20.04
برای همراهی با این آموزش نیاز دارید:
ساخت کاربر اختصاصی برای Kafka
از آنجایی که Kafka میتواند درخواستها را روی شبکه مدیریت کند، گام اول این است که یک کاربر اختصاصی برای سرویس ایجاد کنید تا در صورتی که سرور Kafka در معرض خطر قرار گیرد، آسیب به سیستم عامل اوبونتو 최소 وسعت باشد. برای این کار یک کاربر با نام kafka بسازید:
sudo adduser kafka
مطابق دستورات، یک رمز عبور اختصاص دهید و کاربر kafka را بسازید.
سپس کاربر kafka را به گروه sudo اضافه کنید:
sudo adduser kafka sudo
اکنون کاربر kafka آماده است. برای ورود به این حساب از دستور زیر استفاده کنید:
su - kafka
دانلود و استخراج فایلهای باینری Kafka
ابتدا یک دایرکتوری Downloads در مسیر /home/kafka ایجاد کنید:
mkdir -p ~/Downloads
سپس برای دانلود فایلهای باینری Kafka از دستور curl استفاده کنید (در صورت نیاز نسخه را به دلخواه تغییر دهید. برای پیدا کردن نسخههای جدید به https://downloads.apache.org/kafka/ مراجعه کنید):
curl "https://downloads.apache.org/kafka/3.2.0/kafka_2.13-3.2.0.tgz" -o ~/Downloads/kafka.tgz
یک دایرکتوری جدید با نام kafka بسازید و وارد آن شوید:
mkdir -p ~/kafka cd ~/kafka
سپس فایل دانلود شده را استخراج کنید:
tar -xvzf ~/Downloads/kafka.tgz --strip 1
توجه: اگر با خطای gzip: stdin: not in gzip format مواجه شدید، اطمینان حاصل کنید که فایل دانلود شده واقعاً یک فایل فشرده با فرمت gzip است و لینک را طبق جدیدترین نسخه در سایت رسمی انتخاب کرده باشید.
پیکربندی سرور Kafka
تنظیمات Kafka در فایل server.properties مشخص میشود. این فایل را با ویرایشگر دلخواه خود باز کنید:
nano config/server.properties
برای فعال کردن قابلیت حذف تاپیکها، خط زیر را به انتهای فایل اضافه کنید:
delete.topic.enable = true
سپس مسیر ذخیره لاگها را در ویژگی log.dirs به مسیر مورد نظر تغییر دهید:
log.dirs=/home/kafka/kafka-logs
فایل را ذخیره و ببندید.
ساخت فایل واحد (unit file) systemd برای Kafka و Zookeeper
Kafka از Zookeeper جهت مدیریت وضعیت کلاستر و پیکربندیها استفاده میکند. ابتدا فایل unit برای Zookeeper ساخته میشود:
sudo nano /etc/systemd/system/zookeeper.service
محتوای زیر را در آن قرار دهید:
[Unit] Description=Apache Zookeeper server Requires=network.target remote-fs.target After=network.target remote-fs.target [Service] Type=simple User=kafka ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh Restart=on-abnormal [Install] WantedBy=multi-user.target
فایل را ذخیره و ببندید. سپس فایل خدمت systemd برای Kafka را بسازید:
sudo nano /etc/systemd/system/kafka.service
محتوای زیر را قرار دهید:
[Unit] Requires=zookeeper.service After=zookeeper.service [Service] Type=simple User=kafka ExecStart=/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh Restart=on-abnormal [Install] WantedBy=multi-user.target
راهاندازی و فعالسازی سرویسها
sudo systemctl start zookeeper sudo systemctl start kafka
برای بررسی وضعیت اجرا شدن سرورها:
sudo journalctl -u kafka
برای فعال شدن سرویسها پس از هر بار راهاندازی مجدد سرور:
sudo systemctl enable zookeeper sudo systemctl enable kafka
آزمایش نصب Kafka
یک تاپیک با نام TutorialTopic بسازید:
./bin/kafka-topics.sh --create --topic TutorialTopic --bootstrap-server localhost:9092
حالا یک پیام “Hello, World” به این تاپیک منتشر کنید:
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic
سپس یک مصرفکننده ایجاد کنید تا پیام را دریافت کند:
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning
اگر پیکربندی مشکلی نداشته باشد، “Hello, World” را دریافت میکنید.
برای ارسال پیام جدید در ترمینال دیگر وارد شوید و مجدداً producer را اجرا نمایید.
تأمین امنیت و حذف دسترسی ادمین از کاربر kafka
پس از پایان نصب، برای افزایش امنیت کاربر kafka را از گروه sudo حذف کنید:
sudo deluser kafka sudo
همچنین برای جلوگیری از ورود مستقیم افراد به این حساب کاربری، رمز عبور kafka را قفل کنید:
sudo passwd -l kafka
در آینده برای باز کردن قفل رمز عبور:
sudo passwd -u kafka
نصب KafkaT برای مدیریت بهتر Kafka
KafkaT ابزاری برای مشاهده جزئیات کلاستر Kafka و انجام برخی وظایف مدیریتی از خط فرمان است. چون یک gem روبی است، ابتدا لازم است پکیج ruby و build-essential را نصب کنید:
sudo apt update sudo apt install ruby build-essential
سپس KafkaT را نصب کنید:
sudo gem install kafkat -- --with-cflags="-Wno-error=format-overflow"
فایل پیکربندی .kafkatcfg را ایجاد کنید و تنظیمات زیر را وارد نمایید:
{
"kafka_path": "/home/kafka/kafka",
"log_path": "/home/kafka/kafka-logs",
"zk_path": "localhost:2181"
}
برای مشاهده جزئیات پارتیشنهای Kafka این دستور را اجرا کنید:
kafkat partitions
برای اطلاعات بیشتر به مخزن Github KafkaT مراجعه کنید.
جمعبندی
اکنون Apache Kafka را به صورت ایمن روی سرور اوبونتو خود راهاندازی کردهاید و میتوانید آن را در هر زبان برنامهنویسی دلخواه با کلاینتهای Kafka یکپارچه نمایید. به مستندات رسمی برای اطلاعات بیشتر مراجعه کنید.
از همراهی شما با پارمین کلود متشکریم.
نظرات کاربران