learn

نصب Kafka روی Debian؛ جایگزین راهنمای Debian 10 و ZooKeeper

راه‌اندازی آزمایشی Kafka با KRaft روی Debian تحت پشتیبانی، نصب Java، ساخت topic و تست پیام؛ تفاوت نصب تازه با ارتقای کلاستر قدیمی.

برای نصب تازه Kafka از Debian تحت پشتیبانی و راهنمای همان شاخه Kafka استفاده کنید. پشتیبانی LTS رسمی Debian 10 در ژوئن ۲۰۲۴ پایان یافته و آموزش قدیمی Kafka 2.1.1 و ZooKeeper، الگوی مناسب نصب جدید نیست. این مقاله یک محیط تک‌گره آزمایشی با KRaft را توضیح می‌دهد، نه کلاستر آماده تولید.

تفاوت اصلی با آموزش قبلی

در Kafka 4.x، ZooKeeper حذف شده و مدیریت metadata با KRaft انجام می‌شود. نصب Java و فایل‌های پیکربندی باید با نسخه انتخابی هماهنگ باشند. فرمان format فقط برای فضای داده جدید است و نباید روی داده کلاستر موجود به‌عنوان ابزار تعمیر اجرا شود.

۱. سیستم و Java

برای نمونه جدید، Debian 13 را با نسخه Java مورد قبول Kafka انتخاب کنید. مستندات Quick Start شاخه 4.3 حداقل Java 17 را ذکر می‌کند؛ قبل از نصب جدول سازگاری Java همان شاخه را ببینید.

cat /etc/os-release
sudo apt update
sudo apt install default-jre-headless curl ca-certificates
java -version

نصب default-jre نسخه پیش‌فرض توزیع را می‌آورد؛ باید خروجی را با نیاز Kafka تطبیق دهید. مقدار ثابت حافظه برای همه بارهای کاری وجود ندارد؛ محیط نمونه را از بار واقعی تولید جدا کنید.

۲. دریافت بسته و جداسازی کاربر

بسته binary Kafka را از Apache دریافت و checksum یا امضای ارائه‌شده را بررسی کنید. فایل را در پوشه کاری مستقل و با حساب غیر root استخراج کنید. این حساب فقط برای آزمایش یا اجرای سرویس است و نباید صرفاً به خاطر Kafka عضو sudo شود.

از داخل پوشه استخراج‌شده، ابتدا فایل config/server.properties را مرور کنید. نمونه Quick Start ممکن است روی رابط‌های شبکه گوش دهد؛ listener آزمایش را روی loopback محدود کنید و آدرس advertised را با آن هماهنگ نگه دارید. برای ارتباط broker/controller نام listenerهای فایل نمونه را حفظ کنید و فقط نشانی‌ها را مطابق همان نسخه تنظیم کنید.

برای آزمایش تک‌گره روی همان دستگاه، مقادیر نمونه زیر باید جایگزین کلیدهای متناظر فایل همان نسخه شوند، نه اینکه چند بار به فایل افزوده شوند. نام listenerهای بخش امنیتی فایل نمونه را تغییر ندهید:

listeners=PLAINTEXT://127.0.0.1:9092,CONTROLLER://127.0.0.1:9093
advertised.listeners=PLAINTEXT://127.0.0.1:9092

این نمونه برای اتصال راه دور طراحی نشده است. آدرس advertised نباید برای کلاینت خارج از میزبان loopback باشد؛ محیط تولید به طرح شبکه و TLS/احراز هویت جدا نیاز دارد.

۳. مقداردهی اولیه KRaft در محیط خالی

KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
bin/kafka-storage.sh format --standalone -t "$KAFKA_CLUSTER_ID" -c config/server.properties
bin/kafka-server-start.sh config/server.properties

این فرمان‌ها بر اساس ساختار Quick Start جدید نوشته شده‌اند. پیش از اجرا، log.dirs و مسیرهای metadata باید مخصوص همین آزمایش و فاقد داده قبلی باشند. خطای شناسه کلاستر را با حذف فایل‌های داده یا اجرای دوباره format روی کلاستر قدیمی رفع نکنید.

۴. ساخت topic و ارسال پیام

در ترمینال دوم، از همان پوشه نصب بنویسید:

bin/kafka-topics.sh --create --topic hostnegar-demo --bootstrap-server localhost:9092
bin/kafka-console-producer.sh --topic hostnegar-demo --bootstrap-server localhost:9092

یک خط متن وارد کنید. در ترمینال سوم مصرف‌کننده را اجرا کنید:

bin/kafka-console-consumer.sh --topic hostnegar-demo --from-beginning --bootstrap-server localhost:9092

دریافت همان متن، ارتباط پایه producer، broker و consumer را تأیید می‌کند. این آزمون دوام کلاستر چندگره‌ای، تحمل خرابی یا امنیت سرویس اینترنتی را ثابت نمی‌کند.

پیش‌نیازهای محیط تولید

  • listenerهای شبکه خصوصی و advertised.listeners قابل دسترسی برای کلاینت‌ها
  • احراز هویت، TLS و مجوزهای دسترسی مناسب
  • طراحی replication و controller quorum متناسب با دسترس‌پذیری
  • دیسک پایدار، retention مشخص و پایش ظرفیت
  • حساب سرویس محدود، مدیریت فرایند و ثبت لاگ
  • آزمون خرابی و بازیابی و سیاست نگهداری داده

اگر کلاستر قدیمی ZooKeeper داریم چه کنیم؟

نصب تازه این مقاله را روی پوشه کلاستر قدیمی اجرا نکنید. نسخه broker و client، metadata و وضعیت داده را ثبت و مسیر نسخه‌های میانی و مهاجرت KRaft را از راهنمای رسمی استخراج کنید. ارتقا مستقیم از Kafka 2.1.1 به 4.x مسیر این آموزش نیست. پس از تغییر metadata، بازگشت نسخه نیز ممکن است محدود شود.

رفع خطا

  • Connection refused: سرویس و listener را بررسی کنید.
  • اتصال اولیه برقرار، سپس timeout: advertised.listeners ممکن است نشانی نامعتبر به کلاینت بدهد.
  • خطای Java: نسخه اجرایی و JAVA_HOME سرویس را مقایسه کنید.
  • خطای cluster ID: تنظیم و فضای metadata را بدون پاک‌کردن داده بررسی کنید.

منابع رسمی

بازبینی منابع: ۱۸ اکتبر ۲۰۲۶.

راهنماهای مرتبط

مطالب مرتبط

ارسال نظر

فهرست مطالب