Episode ini membahas network configuration Kafka: advertised listeners, protokol PLAINTEXT, SSL, SASL, komunikasi inter-broker, multiple listeners untuk internal dan eksternal, hingga pola multi-datacenter active-active dan active-passive beserta pertimbangan latensi dan disaster recovery.

Kesalahan paling umum dalam setup Kafka bukan di sisi aplikasi, melainkan di jaringan: klien yang tidak bisa terhubung, latensi antar broker yang tinggi, atau komunikasi yang gagal lintas lingkungan. Sebagian besar berasal dari pemahaman yang kurang tentang listener dan advertised listeners.
Di episode 15 ini kalian akan memahami cara Kafka mengonfigurasi titik koneksi, membedakan protokol PLAINTEXT, SSL, dan SASL, mengatur listener internal dan eksternal yang terpisah, serta mengeksplorasi pola deployment multi-datacenter — active-active dan active-passive — beserta pertimbangan latensi dan recovery-nya.
Setiap broker membuka satu atau lebih listener: kombinasi host, port, dan protokol tempat broker menerima koneksi. Ketika broker merespons klien, ia tidak menyebut dirinya dengan address yang dipakai klien untuk terhubung, melainkan dengan advertised listener — alamat yang ia umumkan agar klien menghubunginya kembali.
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://kafka-1.internal:9092Jika advertised.listeners salah, klien berhasil mengirim request metadata pertama tetapi gagal menghubungi broker karena alamat yang diumumkan tidak terjangkau — gejala klasik "koneksi timeout di client, padahal broker sehat".
Protokol menentukan bagaimana koneksi diamankan:
Komunikasi antar broker diatur dengan inter.broker.listener.name:
listeners=INTERNAL://:9093,EXTERNAL://:9094
advertised.listeners=INTERNAL://10.0.1.5:9093,EXTERNAL://kafka.example.com:9094
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:SASL_SSL
inter.broker.listener.name=INTERNALinter.broker.listener.name=INTERNAL membuat replikasi antar broker berjalan lewat jaringan internal tanpa melewati internet, sementara klien eksternal memakai listener EXTERNAL yang diamankan SASL_SSL. Nilai listener.security.protocol.map memetakan nama listener ke protokol sebenarnya.
Memisahkan listener internal dan eksternal adalah praktik keamanan dasar: klien di dalam VPC memakai alamat privat, klien publik memakai alamat publik yang diamankan, dan keduanya berbagi broker yang sama. Ini menghindari memaparkan seluruh cluster ke internet sekaligus menjaga throughput replikasi tetap di jaringan internal.
Dalam Docker, broker sering gagal diakses karena advertised listener memakai nama host yang hanya dikenali di dalam container. Gunakan nama service Compose untuk sesama container dan nama host berbeda untuk klien host:
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXTPLAINTEXT://kafka:29092 dipakai sesama container, sementara PLAINTEXT_HOST://localhost:9092 untuk klien dari host. Konfigurasi lengkap akan dibahas di episode 29.
Di AWS, broker berada di VPC dengan security group yang hanya mengizinkan port broker dari CIDR tertentu. Untuk klien di luar VPC, gunakan load balancer atau AWS PrivateLink di depan listener. Selalu batasi source IP security group pada jaringan internal dan prinsipal terpercaya.
Advertised listener menggunakan nama host, jadi DNS harus konsisten dari sudut pandang klien dan antar broker. Prinsip penting: nama yang diumumkan broker harus resolve ke alamat yang benar dari tempat klien berada. Jangan memakai alamat IP langsung jika broker bisa dipindah atau diskala, karena IP bisa berubah — pakai nama DNS yang stabil dan biarkan resolver menunjuk ke alamat yang benar.
kafka-1.internal.example.com -> 10.0.1.5
kafka-2.internal.example.com -> 10.0.1.6
kafka.example.com -> load balancer publikkafka.example.com mengarah ke load balancer untuk klien eksternal, sementara nama kafka-N.internal.example.com dipakai sesama broker dan klien internal. Pastikan juga reverse lookup bekerja jika mutual TLS dan mapping prinsipal berdasarkan hostname dipakai.
Kafka tidak mereplikasi data lintas datacenter secara native — replikasi hanya antar broker dalam satu cluster. Untuk multi-datacenter, kalian memakai pola replikasi lintas cluster, terutama MirrorMaker 2.0 yang akan dibahas mendalam di episode 25.
Sebelum memilih pola, tetapkan target bisnis: berapa banyak data yang boleh hilang dan seberapa cepat pemulihan dibutuhkan. Target ini (RPO dan RTO) menentukan seberapa sinkron replikasi harus berjalan dan seberapa otomatis failover-nya.
Jarak fisik menentukan latensi: replikasi lintas benua bisa menambah ratusan milidetik per round-trip, menurunkan throughput produksi dan memperlambat failover. Untuk RTO (Recovery Time Objective) yang ketat, tempatkan datacenter berjarak rendah, dan rancang failover otomatis dengan checkpoint rutin.
Warning
Jangan memperlakukan dua cluster yang direplikasi sebagai satu cluster. Kafka menjamin consistency di dalam satu cluster; lintas cluster hanya ada perjanjian replikasi (eventually consistent). Tulis aktif di dua tempat bisa menciptakan data divergen yang sulit didamaikan.
Di episode 15 ini kalian sudah memahami perbedaan listener dan advertised listener, empat protokol koneksi, pemisahan listener internal dan eksternal, pertimbangan Docker dan cloud networking, serta pola multi-datacenter active-active dan active-passive.
Inti yang harus dibawa pulang:
Di episode 16 selanjutnya kita akan mengamankan akses dengan authentication SASL — PLAIN, SCRAM, GSSAPI, dan OAUTHBEARER. Kalian akan belajar konfigurasi broker dan klien, pembuatan user SCRAM dengan kafka-configs, serta integrasi OAuth 2.0.