Lewati ke konten utama

Penjelasan Kafka Docker: Penyiapan, Praktik Terbaik, dan Tips

Pelajari cara menyiapkan Apache Kafka dengan Docker menggunakan Compose. Temukan praktik terbaik, jebakan umum, dan tips untuk lingkungan pengembangan dan pengujian
Diperbarui 28 Sep 2026  · 9 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Di dunia pipeline data modern dan microservices, Apache Kafka menjadi solusi andalan untuk menangani aliran event real-time dan mengintegrasikan sistem terdistribusi. Seiring semakin banyak tim engineering beralih ke arsitektur yang skalabel dan berorientasi event, Kafka menjadi pusat pergerakan data yang andal. 

Sejalan dengan tren ini, Docker muncul sebagai cara utama bagi developer untuk mengelola, berbagi, dan melakukan deploy layanan kompleks tanpa khawatir tentang ketidakkonsistenan lingkungan atau masalah lokal. 

Dengan menggunakan Docker untuk menjalankan Kafka, tim dapat dengan cepat menyiapkan cluster yang mirip produksi untuk pengujian, demo proof-of-concept, atau bahkan beban kerja produksi. 

Artikel ini ditujukan untuk developer backend tingkat menengah, engineer DevOps, dan siapa pun yang terlibat dalam pengelolaan platform data yang ingin membuat pekerjaan dengan Kafka menjadi sederhana dan dapat direproduksi.

Jika Anda baru mengenal Kafka atau Docker, pastikan merujuk ke kursus Introduction to Apache Kafka atau Docker for Beginners: A Practical Guide to Containers kami.

Apa itu Kafka, dan Mengapa Menggunakan Docker?

Apache Kafka adalah platform streaming terdistribusi yang dirancang untuk messaging ber-throughput tinggi, toleran terhadap kegagalan, dan skalabel. 

Kafka bertindak sebagai pipeline yang andal dan berkecepatan tinggi antara produser dan konsumer data. Kapan pun Anda perlu menghubungkan microservices, mengorkestrasi alur data, atau memproses analitik real-time, Kafka sering menjadi pilihan utama.

Anda dapat mempelajari cara membangun aplikasi pemrosesan data real-time dengan Kafka Streams melalui Kafka Streams Tutorial kami. Tutorial ini membahas konsep inti, implementasi Java & Python, serta contoh langkah demi langkah untuk membangun aplikasi streaming yang skalabel.

Menjalankan Kafka bisa kompleks. Bahkan engineer berpengalaman pun sering merasa kewalahan dengan kompleksitas broker, topic, partisi, dan komponen yang diperlukan seperti Zookeeper atau KRaft. 

Docker menyederhanakan proses dengan mengemas binary, dependensi, dan konfigurasi ke dalam container. 

Dengan Docker, para Engineer dapat memulai cluster Kafka di mesin mana pun, berbagi setup yang identik dengan rekan kerja, dan menghindari sakit kepala umum "berfungsi di mesin saya". Kafka yang terdockerisasi sangat populer untuk:

  • Pengembangan dan pengujian lokal, di mana startup dan teardown cepat sangat berharga
  • Lingkungan integrasi terisolasi dalam pipeline CI/CD
  • Meniru cluster multi-broker pada satu host
  • Penyiapan pelatihan dan demonstrasi

Jelajahi Apache Kafka dengan panduan Apache Kafka for Beginners kami. Pelajari dasar-dasarnya, mulai dengan cepat, dan temukan fitur lanjutan serta aplikasi dunia nyata dari platform event-streaming yang andal ini.

Dasar-Dasar Kafka di Docker

Sebelum masuk ke orkestrasi, ada baiknya menguraikan komponen teknis Kafka dan bagaimana Docker membantu mereplikasi sifat terdistribusinya pada laptop atau server. 

Seperti yang akan Anda pelajari dalam tutorial Learn Docker from Scratch kami, Docker adalah alat populer untuk menyederhanakan deployment, scaling, dan manajemen aplikasi seperti Kafka menggunakan containerization.

Dasar-dasar arsitektur Kafka

Tulang punggung Kafka adalah brokernya: proses server yang menyimpan, menerima, dan menyajikan pesan. Setiap cluster dapat terdiri dari beberapa broker, yang mendistribusikan data dan beban. 

Di dalam setiap broker terdapat topic (kanal bernama untuk mengorganisasi pesan) dan partisi (sub-kanal yang menyebarkan event ke banyak server untuk paralelisme dan daya tahan). Produser menulis data ke topic, sementara konsumer berlangganan dan memproses pesan tersebut.

Koordinasi adalah kunci. Secara tradisional, Kafka mengandalkan Zookeeper untuk menangani metadata broker, kepemimpinan partisi, dan kesehatan cluster secara keseluruhan. Deployment yang lebih baru dapat menggunakan mode KRaft, yang menginternalisasi koordinasi ini ke dalam Kafka itu sendiri, menghilangkan ketergantungan pada Zookeeper. ZooKeeper sudah tidak digunakan lagi (deprecated) pada 3.5, dan dijadwalkan dihapus pada 4.0.

Pelajari cara meng-container-kan aplikasi machine learning dengan Docker dan Kubernetes melalui tutorial How to Containerize an Application Using Docker kami. 

Mode KRaft: Menyederhanakan arsitektur Kafka

Mulai versi 2.8, Kafka memperkenalkan mode KRaft, yang memungkinkan pengelolaan metadata secara internal tanpa bergantung pada Zookeeper, dan dinyatakan siap produksi pada versi 3.3. Perubahan ini menyederhanakan deployment dan mengurangi jumlah komponen yang perlu dikelola.

Untuk menyiapkan Kafka dalam mode KRaft menggunakan Docker Compose:

version: '3.8'
services:
  kafka:
    image: apache/kafka:latest
    container_name: kafka
    ports:
      - "9092:9092"
      - "9093:9093"
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@localhost:9093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LOG_DIRS: /var/lib/kafka/data
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_LOG_RETENTION_HOURS: 168
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      CLUSTER_ID: "Mk3OEYBSD34fcwNTJENDM2Qk"
    volumes:
      - ./data:/var/lib/kafka/data

Konfigurasi ini menyiapkan cluster Kafka single-node dalam mode KRaft, menghilangkan kebutuhan akan Zookeeper.

Hal-hal penting Docker

Untuk menjalankan Kafka dengan Docker, Anda hanya membutuhkan beberapa hal dasar: Docker Engine (runtime) dan sering kali Docker Compose untuk manajemen multi-container. 

File Compose memungkinkan Anda menentukan beberapa layanan (Kafka, Zookeeper, Kafka UI, dll.), jaringan mereka, variabel lingkungan, dan mount penyimpanan. Jaringan Docker memungkinkan emulasi cluster multi-broker, bahkan pada satu mesin, dengan memberi setiap broker containernya sendiri, hostname, dan port.

Salah satu cara terbaik untuk mengenal Docker adalah melalui proyek. Latih keterampilan Anda dengan 10 Ide Proyek Docker ini. 

Menyiapkan Kafka dengan Docker Compose

Docker Compose sering menjadi cara pilihan untuk menjalankan aplikasi yang memerlukan banyak container yang saling berinteraksi. Alih-alih berjibaku dengan shell script atau perintah manual, Compose memungkinkan Anda mendefinisikan semua layanan dan keterkaitannya dalam satu file YAML. 

Pendekatan ini mengurangi drift konfigurasi, mempercepat onboarding, dan menjamin semua orang dapat menggunakan stack yang sama untuk pengembangan.

Penyiapan Compose minimal

Berikut docker-compose.yml dasar yang menjalankan Kafka dan Zookeeper untuk pengembangan lokal:

version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
    ports:
      - "2181:2181"
  kafka:
    image: confluentinc/cp-kafka:latest
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    ports:
      - "9092:9092"
    volumes:
      - kafka_data:/var/lib/kafka/data
volumes:
  kafka_data:

Penyiapan minimal ini memetakan port yang relevan, menghubungkan Kafka ke Zookeeper, dan me-mount volume Docker agar pesan tidak hilang jika container restart. Pastikan menggunakan variabel lingkungan untuk mengonfigurasi identitas broker, alamat listener, dan endpoint koneksi antarlayanan.

Pemahaman menyeluruh tentang Kafka sangat penting untuk sukses dalam wawancara rekayasa data. Siapkan diri Anda untuk wawancara berikutnya dengan daftar pertanyaan dan jawaban Kafka menggunakan 20 Pertanyaan Wawancara Kafka untuk Data Engineer ini. 

Konfigurasi lanjutan

Penyiapan profesional sering menambahkan alat seperti Kafka UI, Schema Registry, atau REST Proxy untuk memudahkan pengelolaan dan inspeksi pesan. Alat-alat ini dapat ditambahkan ke blok services dalam file compose Anda. Misalnya:

kafka-ui:
  image: provectuslabs/kafka-ui:latest
  ports:
    - "8080:8080"
  environment:
    KAFKA_CLUSTERS_0_NAME: "Local"
    KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: "kafka:9092"

Mempertahankan topic dan log Kafka lintas restart sangat penting untuk menguji skenario pemulihan atau job jangka panjang. Selalu mount volume Docker ke /var/lib/kafka/data untuk setiap broker dan /var/lib/zookeeper untuk Zookeeper, jika digunakan.

Memilih image yang tepat sangat penting. Berikut ringkasan cepat:

Image Docker Kafka

Pemelihara

Fitur

Kasus Penggunaan Terbaik

Confluent

Confluent

Paket lengkap, banyak add-on

Penyiapan mirip produksi, pengujian lanjutan

Bitnami

Bitnami

Bersih, minimal

Pengembangan lokal, lingkungan dengan sumber daya terbatas

Apache Kafka (KRaft)

Apache

Tanpa Zookeeper, penyiapan sederhana

Deployment modern, arsitektur yang disederhanakan

Tutorial How to Learn Apache Kafka in 2025 membahas lebih rinci tentang Kafka, termasuk 

  • Apa yang membuat Apache Kafka populer?
  • Fitur utama Apache Kafka
  • Berbagai aplikasi Apache Kafka

Berinteraksi dengan Kafka di Docker

Setelah Kafka berjalan melalui Docker Compose, Anda dapat langsung membuat topic dan mengirim data, seperti pada deployment standar.

Akses CLI dan perintah Kafka

Gunakan docker-compose exec atau docker exec untuk menjalankan alat CLI Kafka. Misalnya, untuk membuat topic, Anda dapat mengeksekusi:

docker-compose exec kafka kafka-topics.sh --create --topic demo --bootstrap-server localhost:9092

Anda juga dapat menggunakan kafka-console-producer.sh dan kafka-console-consumer.sh dengan cara yang sama. Ini memberikan loop umpan balik cepat untuk pengujian integrasi atau eksperimen tanpa mengotori lingkungan lokal Anda.

Akses terprogram dari aplikasi

Aplikasi dan skrip dapat terhubung ke Kafka dalam container menggunakan advertised bootstrap server host. Untuk aplikasi lokal, setel bootstrap.servers=localhost:9092 atau yang setara. 

Klien umum mencakup library Kafka resmi untuk Python, Java, NodeJS, dan Go. Pastikan stack jaringan aplikasi Anda dapat menjangkau port dan alamat yang benar.

Jaringan Docker dan Konektivitas Kafka

Konfigurasi jaringan Kafka sering menghadirkan tantangan. Memahami listener internal dan eksternal serta cara mengekspos layanan sangat penting.

Listener internal vs eksternal

Broker Kafka menggunakan listener untuk mengontrol koneksi klien. Dua penyiapan umum adalah:

  • PLAINTEXT://:9092 untuk trafik lokal yang tidak diamankan, terutama untuk pengembangan
  • SSL atau SASL_SSL listener untuk koneksi terenkripsi atau terautentikasi

Di docker-compose, ekspos port yang tepat dan pastikan KAFKA_ADVERTISED_LISTENERS cocok dengan host dan port aktual yang digunakan aplikasi Anda. Jika berjalan di VM atau cloud, setel konfigurasi ini ke IP publik dan port yang dipetakan.

Aspek

Listener Internal

Listener Eksternal

Protokol Umum

PLAINTEXT://:9092

SSL://, SASL_SSL://, atau PLAINTEXT:// yang dipetakan

Keamanan

Tidak terenkripsi, tidak terautentikasi

Terenkripsi dan/atau terautentikasi

Penggunaan Tipikal

Pengembangan lokal, trafik antar-container

Klien jarak jauh, VM cloud, akses produksi

Penyiapan Docker Compose

Ekspos port 9092 di dalam jaringan

Peta 9092 ke host, setel KAFKA_ADVERTISED_LISTENERS ke IP publik

Fokus Konfigurasi

Kesederhanaan dan kecepatan

Keandalan, keamanan, akses publik

Cakupan Jaringan

Localhost atau jaringan internal Docker

IP publik atau domain yang menghadap keluar

Mengonfigurasi banyak listener untuk akses klien yang beragam

Di lingkungan Docker, umum untuk menyiapkan banyak listener guna menangani berbagai skenario akses klien:

environment:
  KAFKA_LISTENERS: INTERNAL://0.0.0.0:29092,EXTERNAL://0.0.0.0:9092
  KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://localhost:9092
  KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
  KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL

Penyiapan ini memungkinkan klien Docker internal terhubung melalui listener INTERNAL dan klien eksternal terhubung melalui listener EXTERNAL.

Pemecahan masalah konektivitas

Kesalahan umum mencakup ‘broker not available’, ‘connection refused’, atau timeout klien. Verifikasi:

  • Port diekspos dan dipetakan dengan benar
  • Advertised listener broker cocok dengan alamat target klien Anda
  • Semua container sehat menggunakan docker-compose ps
  • Resolusi DNS berfungsi antar-container (gunakan nama layanan, mis. kafka:9092)
  • Coba docker network inspect untuk debug tautan antar-container

Kafka Docker di Lingkungan Mirip Produksi

Di luar pengujian lokal, lingkungan Kafka yang terdockerisasi juga membantu untuk staging dan CI/CD.

Strategi orkestrasi container

Orkestrator seperti Docker Swarm dan Kubernetes dapat mengelola penyiapan Kafka multi-broker, rolling update, dan service discovery. Setiap broker mendapatkan containernya, dengan penyimpanan persisten terlampir. 

Di Kubernetes, StatefulSets menangani deployment berurutan dan membuat nama DNS yang stabil untuk setiap broker.

Logging dan monitoring

Arahkan log Kafka ke driver log Docker atau penyimpanan eksternal untuk analisis. Banyak tim mengalirkan log ke Elasticsearch, Loki, atau Splunk untuk troubleshooting. Padukan Kafka terdockerisasi dengan Prometheus dan Grafana untuk pemantauan cluster.

Tips Optimalisasi untuk Kafka di Docker

Performa Kafka bergantung pada pengelolaan sumber daya dan penyimpanan yang cermat.

Alokasi sumber daya

Beri setiap container broker CPU, RAM, dan disk yang cukup untuk meniru produksi sedekat mungkin. Atur batas sumber daya Docker dan oper opsi JVM dengan KAFKA_JVM_PERFORMANCE_OPTS untuk pengaturan heap dan garbage collector.

Penyimpanan persisten

Selalu gunakan volume Docker atau bind mount untuk /var/lib/kafka/data dan /var/lib/zookeeper; menyimpan data di dalam container berarti Anda akan kehilangannya saat restart, yang menggagalkan pengujian daya tahan. Throughput disk yang tinggi sangat penting untuk performa berkelanjutan, terutama dalam pengujian beban CI/CD.

Praktik Terbaik dan Jebakan Umum

Stabilitas, kemampuan pemeliharaan, dan produktivitas tim semuanya diuntungkan dari beberapa praktik terbaik.

Manajemen konfigurasi

Kelola secret dan konfigurasi secara eksternal dengan file .env atau direktori config yang di-mount. Jangan pernah hardcode data sensitif dalam YAML compose Anda. Untuk penyiapan yang digunakan kembali, pertimbangkan alat templating atau kerangka kerja manajemen konfigurasi.

Kesalahan umum

Menghindari kesalahan umum

  • Jangan menyimpan data di dalam container; selalu mount volume
  • Periksa konflik port pada host Anda
  • Hindari penggunaan sandi admin default; amankan port yang diekspos, bahkan untuk pengembangan lokal
  • Jaga image Docker tetap mutakhir; patch untuk CVE dan dependensi usang

Memperkuat Keamanan Kafka

Untuk mengamankan deployment Kafka Anda:

  • Aktifkan Enkripsi TLS: Lindungi data in transit dengan mengonfigurasi SSL/TLS untuk semua koneksi.
  • Terapkan Autentikasi: Gunakan mekanisme SASL (mis., SCRAM, GSSAPI) untuk mengautentikasi klien.
  • Siapkan Otorisasi: Definisikan Access Control List (ACL) untuk mengontrol izin klien.
  • Rotasi Kredensial Secara Berkala: Ubah sandi dan kunci secara berkala untuk meminimalkan risiko.
  • Pantau dan Audit: Aktifkan audit log untuk melacak akses dan perubahan dalam cluster

Kesimpulan

Docker membuat penyiapan, penyesuaian, dan eksperimen dengan cluster Apache Kafka menjadi sangat mudah untuk integrasi, pembelajaran, atau bahkan pengujian mirip produksi. Container mengisolasi Anda dari masalah OS host dan ketidaksesuaian dependensi, sehingga Anda yakin lingkungan dev dan test sesuai harapan. Saat Anda berkembang dari cluster lokal sederhana ke platform Kafka yang diorkestrasi, berinvestasi pada penyiapan Docker yang andal dan praktik terbaik akan menghemat waktu dan mengurangi frustrasi tim Anda. 

Jelajahi informasi lebih lanjut tentang Kafka dan Docker dari salah satu kursus komprehensif kami: 

FAQ Docker Kafka

Apakah saya memerlukan Zookeeper untuk menjalankan Kafka di Docker?

Tidak selalu. Meskipun penyiapan Kafka tradisional bergantung pada Zookeeper, versi yang lebih baru mendukung mode KRaft, yang menghilangkan kebutuhan Zookeeper dengan menginternalisasi koordinasi cluster. Namun, banyak contoh Docker Compose masih menggunakan Zookeeper secara default demi kompatibilitas dan stabilitas. ZooKeeper sudah tidak digunakan lagi (deprecated) pada versi 3.5 dan dijadwalkan dihapus pada 4.0.

Bisakah saya menggunakan Kafka di Docker untuk beban kerja produksi?

Meskipun memungkinkan untuk melakukan deploy aplikasi tanpa alat orkestrasi seperti Kubernetes atau Docker Swarm, itu tidak selalu direkomendasikan. Untuk produksi, pertimbangkan persistensi, monitoring, keamanan, skalabilitas, dan dukungan failover. Docker ideal untuk pengembangan dan pengujian, tetapi membutuhkan perencanaan cermat untuk produksi.

Mengapa klien Kafka saya mendapat error koneksi saat menggunakan Docker?

Sebagian besar masalah koneksi klien berasal dari pengaturan KAFKA_ADVERTISED_LISTENERS yang salah. Pastikan nilai listener mencerminkan alamat yang digunakan klien untuk terhubung (mis., localhost:9092 untuk pengembangan lokal) dan port Docker diekspos dengan benar.

Image Docker Kafka mana yang harus saya gunakan, Confluent, Bitnami, atau Apache?

Gunakan image Confluent untuk penyiapan berfitur lengkap dan pengujian lanjutan, Bitnami untuk pengembangan lokal yang sederhana, dan Apache untuk build minimal yang dapat disesuaikan. Pilih berdasarkan kasus penggunaan, kebutuhan sumber daya, dan persyaratan keamanan Anda.

Bagaimana cara mempertahankan data saat container Kafka restart?

Selalu gunakan volume Docker atau bind mount yang dipetakan ke /var/lib/kafka/data dan /var/lib/zookeeper (jika digunakan). Filesystem container bersifat sementara; tanpa penyimpanan eksternal, semua pesan dan topic akan hilang saat restart.


Derrick Mwiti's photo
Author
Derrick Mwiti
Topik
Docker
Kafka
Rekayasa Data

Kursus Teratas DataCamp

{count, plural, one {Program} other {Program}}

Kontainerisasi dan Virtualisasi dengan Docker dan Kubernetes

{hours} jam
Pelajari kekuatan Docker dan Kubernetes, jalur interaktif ini akan memungkinkan Anda untuk membangun dan mengimplementasikan aplikasi di lingkungan modern.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

{count, plural, one {blog} other {blogs}}

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

{count, plural, one {blog} other {blogs}}

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

{count, plural, one {blog} other {blogs}}

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

{count, plural, one {blog} other {blogs}}

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya