بخش اول: مفاهیم پایه، معماری و Kafka Core
بخش دوم : سایر بازیگران اکوسیستم کافکا
بخش سوم ابزارهای جانبی کافکا : کانکت و رجیستری
بخش چهارم : پردازش جریان در عمل
بخش پنجم :‌ مباحث مدیریتی و تکمیلی

نگاهی عمیق‌تر به موضوع Listener در تنظیمات اصلی کافکا

در جلسه‌ی قبل، هنگام تنظیم فایل Docker Compose دیدیم که چند پارامتر با نام‌های
KAFKA_LISTENERS و KAFKA_ADVERTISED_LISTENERS وجود داشتند.
در ظاهر شبیه هم‌اند، اما در عمل نقش‌های متفاوتی دارند.
در این بخش می‌خواهیم دقیق‌تر ببینیم Listener در کافکا چیست، چرا چند نوع Listener داریم، و این برچسب‌هایی مثل EXTERNAL یا INTERNAL چه مفهومی دارند.


🧩 سه مؤلفه اصلی هر Listener در Kafka

هر Listener در Kafka از سه بخش اصلی تشکیل شده است:

مؤلفهمثالنقش
۱️⃣ برچسب (Listener Name / Tag)BROKER, INTERNAL, EXTERNAL, CONTROLLERبرای شناسایی و تمایز نوع listener (مثلاً برای ارتباط داخلی، بیرونی، یا کنترلر)
۲️⃣ آدرس (Host/IP)kafka, localhost, broker-3, ۰.۰.۰.۰مشخص می‌کند Kafka روی چه آدرسی در شبکه گوش بدهد یا خودش را به دیگران معرفی کند
۳️⃣ پورت (Port)۹۰۹۲, ۱۹۰۹۲, ۴۹۰۹۲پورتی که ارتباط‌ها روی آن برقرار می‌شود

Kafka تمام تنظیمات Listener را بر اساس این سه مؤلفه می‌سازد.
مثلاً در مقدار زیر:

KAFKA_CFG_ADVERTISED_LISTENERS: 'INTERNAL://broker-3:19092,EXTERNAL://localhost:49092'

هر قسمت از این رشته شامل همین سه مؤلفه است:

برچسبآدرس (host)پورتتوضیح
INTERNALbroker-3۱۹۰۹۲برای ارتباط داخلی بین بروکرها در شبکه Docker
EXTERNALlocalhost۴۹۰۹۲برای ارتباط از بیرون (مثلاً برنامه‌ای که روی سیستم شما اجرا می‌شود)

🔹 ۱. برچسب (Listener Name)

برچسب‌ها کلید اصلی درک Listenerها هستند.
Kafka از این نام‌ها برای ارجاع به listenerهای خاص در تنظیمات مختلف استفاده می‌کند.

مثلاً:

KAFKA_CFG_INTER_BROKER_LISTENER_NAME: INTERNAL

یعنی Kafka برای ارتباط بین بروکرها باید از listener با برچسب INTERNAL استفاده کند.

یا:

KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER

یعنی در نقش کنترلر، ارتباطات KRaft از لیستنری با برچسب CONTROLLER برقرار شود.

بنابراین برچسب‌ها فقط برای خوانایی نیستند؛ بلکه Kafka با آن‌ها می‌فهمد کدام Listener برای کدام هدف استفاده شود.


🔹 ۲. آدرس (Host/IP)

این همان بخشی است که گاهی باعث گیج شدن در Docker یا محیط‌های چند‌نودی می‌شود.

نوع آدرسمثالتوضیح
نام هاست داخلیkafka, broker-3معمولاً برای ارتباطات درون شبکه Docker یا کلاستر استفاده می‌شود.
آدرس عمومی یا لوکال‌هاستlocalhostبرای ارتباط از سیستم توسعه‌دهنده به Kafka داخل Docker.
آدرس عمومی شبکه۱۹۲.۱۶۸.x.x یا DNS واقعیوقتی Kafka در یک سرور واقعی یا Kubernetes اجرا می‌شود و باید برای دنیای بیرون قابل دسترس باشد.

🔸 نکته:
در Docker، معمولاً Kafka خودش را با نام سرویس Docker Compose (مثلاً kafka) تبلیغ می‌کند، چون دیگر سرویس‌ها (مثل Kafka UI یا Schema Registry) با همان نام در شبکه Docker آن را پیدا می‌کنند.


🔹 ۳. پورت (Port)

هر listener معمولاً پورت جداگانه‌ای دارد تا ارتباطات از هم تفکیک شوند:

برچسبپورت پیشنهادینقش
CONTROLLER۹۰۹۳ارتباط KRaft Controller
BROKER / INTERNAL۹۰۹۲ یا ۱۹۰۹۲ارتباط بین بروکرها یا ابزارهای داخلی
EXTERNAL۹۰۹۴ یا ۴۹۰۹۲دسترسی از خارج (IDE، اپلیکیشن، یا کلاینت)

Kafka از این پورت‌ها برای تنظیم دقیق مسیر ارتباطات استفاده می‌کند.
مثلاً اگر UI و producer هر دو داخل Docker باشند، بهتر است از INTERNAL://broker-3:19092 استفاده کنند تا از مسیر داخلی شبکه Docker عبور کنند — نه از پورت خارجی که برای اتصال از لپ‌تاپ باز شده است.


🧠 حالا ترکیب این سه بخش در عمل

بیایید همین تنظیم زیر را خط‌به‌خط تجزیه کنیم:

KAFKA_LISTENERS: 'INTERNAL://:19092,EXTERNAL://:9092'
KAFKA_ADVERTISED_LISTENERS: 'INTERNAL://broker-3:19092,EXTERNAL://localhost:49092'
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
🔸 تحلیل خط به خط:

۱. KAFKA_LISTENERS

Kafka روی چه پورت‌هایی گوش می‌دهد:

  • INTERNAL://:19092 → داخل container روی پورت ۱۹۰۹۲
  • EXTERNAL://:9092 → داخل container روی پورت ۹۰۹۲

۲. KAFKA_ADVERTISED_LISTENERS

Kafka به کلاینت‌ها اعلام می‌کند از چه آدرسی به او وصل شوند:

  • INTERNAL://broker-3:19092 → برای ارتباطات داخلی درون شبکه Docker
  • EXTERNAL://localhost:49092 → برای برنامه‌های خارج از Docker (روی سیستم توسعه‌دهنده)

۳. KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL

Kafka برای ارتباط بین بروکرها از Listener با برچسب INTERNAL استفاده کند.

۴. KAFKA_LISTENER_SECURITY_PROTOCOL_MAP

هر listener با چه پروتکلی کار می‌کند:

INTERNAL:PLAINTEXT, EXTERNAL:PLAINTEXT, CONTROLLER:PLAINTEXT

(می‌توان در محیط واقعی بعضی از آن‌ها را با SSL یا SASL امن کرد)

۵. KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER

یعنی listener با برچسب CONTROLLER برای ارتباطات مدیریتی KRaft استفاده شود.

🔍 چرا چند نوع Listener داریم؟

Kafka فقط با Producer و Consumer حرف نمی‌زند.
در واقع چند نوع ارتباط هم‌زمان درون سیستم اتفاق می‌افتد:

نوع ارتباطتوضیح
Client ↔ Brokerوقتی برنامه‌ها پیام می‌فرستند یا می‌خوانند.
Broker ↔ Brokerبرای هماهنگی بین نودها و Replication داده‌ها.
Controller ↔ Brokerبرای هماهنگی متادیتا در حالت KRaft.
Host ↔ Brokerزمانی که برنامه‌ها روی سیستم شما هستند و Kafka در Docker است.

📊 جمع‌بندی نهایی

مفهومتوضیح
Listenerپورتی که Kafka واقعاً روی آن گوش می‌دهد و به درخواست‌ها پاسخ می دهد.
Advertised Listenerآدرسی که Kafka به کلاینت‌ها اعلام می‌کند تا به آن وصل شوند.
Label (برچسب)نامی برای شناسایی نوع ارتباط (داخلی، بیرونی، کنترلر و غیره).
HostIP یا نام میزبان که در شبکه استفاده می‌شود (مثلاً localhost یا broker-1).
Portشماره پورتی که هر listener روی آن در دسترس است.
فروشگاه
جستجو
دوره ها

لطفا کلمات کلیدی را وارد کنید