آموزش نصب Apache Kafka روی Ubuntu 20.04

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 یکپارچه نمایید. به مستندات رسمی برای اطلاعات بیشتر مراجعه کنید.

از همراهی شما با پارمین کلود متشکریم.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *