Penyiapan lokal

Mengunduh Kafka, menjalankan broker tunggal mode KRaft, membuat topic pertama, dan mencoba producer serta consumer CLI.

Daftar isi

Topik ini menuntun penyiapan broker Kafka tunggal di komputer lokal, mulai dari mengunduh distribusi resmi, membentuk penyimpanan mode KRaft, menjalankan broker, sampai menguji topic pertama beserta producer dan consumer melalui antarmuka command line (CLI). Seluruh langkah hanya membutuhkan distribusi Apache Kafka dan Java, tanpa alat tambahan. Setelah selesai, broker tunggal di localhost:9092 siap melayani topic dan klien pertama.

Mengunduh dan mengekstrak Kafka#

Distribusi resmi tersedia sebagai arsip tar berukuran sekitar 135 MB pada laman unduhan Apache Kafka. Broker dan alat CLI Kafka 4.x berjalan di atas Java, sehingga Java 17 atau versi lebih baru wajib terpasang terlebih dahulu. Nama berkasnya memuat angka 2.13, yaitu versi Scala yang digunakan untuk membangun distribusi tersebut, dan angka itu bukan versi Java serta tidak mengubah cara penggunaannya.

Perintah berikut mengunduh Kafka 4.4.0 dan mengekstraknya di folder kerja. Blok ini tidak dijalankan di lingkungan penulisan karena ukuran unduhannya di luar kuota lingkungan tersebut, sehingga distribusi Kafka sudah disiapkan sebelumnya.

bash
# tidak-dijalankan
# unduh distribusi resmi Kafka 4.4.0 (sekitar 135 MB)
curl -O https://downloads.apache.org/kafka/4.4.0/kafka_2.13-4.4.0.tgz

# ekstrak arsip, lalu masuk ke folder distribusi
tar -xzf kafka_2.13-4.4.0.tgz
cd kafka_2.13-4.4.0

Seluruh perintah pada topik ini menggunakan jalur relatif seperti bin/... dan config/..., sehingga perintah-perintah itu dijalankan dari dalam folder distribusi. Isi distribusi terorganisir dalam beberapa folder utama, yaitu bin/ untuk skrip CLI, config/ untuk berkas properti broker dan klien, serta libs/ untuk pustaka Java yang dibutuhkan skrip-skrip di bin/. Pembacaan berkas properti di config/ sangat membantu karena seluruh langkah pada topik ini merujuk ke berkas-berkas di situ. Alat pertama yang berguna untuk pemeriksaan adalah bin/kafka-topics.sh, yang kelak digunakan untuk membuat dan memeriksa topic.

Membentuk penyimpanan broker#

Mode KRaft menjadikan Kafka berjalan tanpa ZooKeeper, dan broker menyimpan metadata di penyimpanan log yang sama dengan data pesan. Penyimpanan itu wajib dibentuk satu kali sebelum broker pertama dijalankan, dan pembentukan menuliskan identitas cluster yang acak ke dalam folder yang ditetapkan pada log.dirs. Perintah pembentuknya adalah bin/kafka-storage.sh format.

Broker di lingkungan penulisan menyimpan datanya di folder khusus yang tidak boleh diformat ulang saat sedang berjalan, sehingga demo berikut menggunakan salinan berkas properti dengan log.dirs baru di /tmp/demo-kraft. Perintah sed mengganti baris log.dirs pada salinan tersebut, lalu opsi --standalone membentuk cluster satu broker. Langkah rm -rf mengosongkan folder demo terlebih dahulu agar pembentukan selalu dimulai dari keadaan yang sama.

bash
rm -rf /tmp/demo-kraft
(
  cd /home/kal/my-project/kafka-runtime/kafka
  sed 's|log.dirs=.*|log.dirs=/tmp/demo-kraft|' config/server.properties > /tmp/demo-server.properties
  bin/kafka-storage.sh format -t $(bin/kafka-storage.sh random-uuid) -c /tmp/demo-server.properties --standalone
)
text Keluaran
Bootstrap metadata: BootstrapMetadata(records=[ApiMessageAndVersion(FeatureLevelRecord(name='metadata.version', featureLevel=33) at version 0), ApiMessageAndVersion(FeatureLevelRecord(name='eligible.leader.replicas.version', featureLevel=1) at version 0), ApiMessageAndVersion(FeatureLevelRecord(name='group.version', featureLevel=1) at version 0), ApiMessageAndVersion(FeatureLevelRecord(name='share.version', featureLevel=2) at version 0), ApiMessageAndVersion(FeatureLevelRecord(name='streams.version', featureLevel=1) at version 0), ApiMessageAndVersion(FeatureLevelRecord(name='transaction.version', featureLevel=2) at version 0)], metadataVersionLevel=33, source=format command)
Formatting dynamic metadata voter directory /tmp/demo-kraft with metadata.version 4.4-IV2.

Baris panjang pertama mencatat daftar fitur metadata yang diaktifkan pada cluster baru, sedangkan baris terakhir menegaskan bahwa direktori demo telah dibentuk dengan versi metadata 4.4-IV2. Folder /tmp/demo-kraft kini memuat berkas meta.properties berisi identitas cluster dan siap menerima broker. Identitas cluster berbeda pada setiap eksekusi karena dibangkitkan secara acak, tetapi keluaran perintahnya tetap sama.

Menjalankan broker#

Broker dijalankan dengan skrip server dan berkas properti yang digunakan saat membentuk penyimpanan. Blok berikut memperlihatkan perintahnya, dan proses ini tidak dijalankan di lingkungan penulisan karena broker di sana sudah berjalan. Opsi -daemon juga tersedia untuk menjalankan broker di latar belakang, tetapi mode latar depan lebih mudah dihentikan dengan rapi saat belajar.

bash
# tidak-dijalankan
# jalankan broker di latar depan, berhenti dengan Ctrl+C
bin/kafka-server-start.sh config/server.properties

Proses broker berjalan di latar depan dan terus menulis log ke terminal, sehingga satu jendela terminal diperuntukkan bagi broker. Kesiapan broker ditandai log yang menyebut server telah dimulai, atau lebih praktisnya dengan perintah bin/kafka-topics.sh --bootstrap-server localhost:9092 --list yang berjalan tanpa error. Port 9092 pada berkas properti standar adalah port broker, sedangkan port 9093 digunakan untuk komunikasi antara controller pada mode KRaft.

Topic pertama dan uji CLI#

Langkah pertama setelah broker berjalan adalah membuat topic pertama dengan bin/kafka-topics.sh --create. Topic demo bernama m0-demo-pertama dibuat dengan satu partisi, lalu deskripsinya diperiksa dengan opsi --describe. Topic dengan nama yang sama dihapus terlebih dahulu agar demo dapat diulang dengan hasil yang sama.

bash
(
  cd /home/kal/my-project/kafka-runtime/kafka
  bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --if-exists --topic m0-demo-pertama 2>/dev/null
  sleep 2
  bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic m0-demo-pertama
  bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic m0-demo-pertama | grep "Partition:" | expand
)
text Keluaran
Created topic m0-demo-pertama.
        Topic: m0-demo-pertama  Partition: 0    Leader: 1       Replicas: 1     Isr: 1  Elr:    LastKnownElr: 

Satu baris partisi menunjukkan topic siap digunakan. Producer dan consumer console dari CLI menguji aliran datanya, dan producer console membaca setiap baris dari masukan standar (standard input) sebagai satu pesan, sehingga printf cukup mengirim tiga baris dalam satu langkah. Consumer membaca dari awal log dengan --from-beginning dan berhenti sendiri setelah tiga pesan karena opsi --max-messages 3.

bash
(
  cd /home/kal/my-project/kafka-runtime/kafka
  T="m0-demo-cli-$(date +%s)"
  bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic "$T" --partitions 1 >/dev/null
  sleep 2
  printf "sensor-suhu-30\nsensor-suhu-31\nsensor-suhu-32\n" | bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic "$T" 2>/dev/null
  bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic "$T" --from-beginning --max-messages 3 2>/dev/null
)
text Keluaran
sensor-suhu-30
sensor-suhu-31
sensor-suhu-32

Tiga pesan yang dikirim producer tiba di consumer dengan urutan yang persis sama, sesuai jaminan urutan di dalam satu partisi. Keluaran consumer tidak memuat baris ringkasan karena opsi --max-messages mengakhiri proses dengan bersih begitu kuota pesannya terpenuhi. Topic demo CLI menggunakan nama yang diakhiri penanda waktu agar setiap eksekusi memperoleh topic baru, sehingga isi lognya selalu kosong sebelum pengujian.

Kesalahan umum#

Dua kesalahan berikut muncul saat penyiapan pertama. Keduanya cepat terdeteksi dari keluaran perintahnya.

  1. Broker berhenti segera setelah dimulai, dengan pesan bahwa direktori log belum terformat. Pembentukan penyimpanan dilakukan satu kali sebelum broker pertama dijalankan, dan broker yang dijalankan tanpa pembentukan itu memang tidak dapat berjalan. Jalankan bin/kafka-storage.sh format seperti pada bagian pembentukan penyimpanan, lalu jalankan broker lagi.
  2. Consumer console tidak pernah berhenti. Tanpa --max-messages atau --timeout-ms, consumer console menunggu pesan baru tanpa batas waktu dan tampak menggantung. Hentikan dengan Ctrl+C, lalu tambahkan batas pesan atau batas waktu saat menjalankan ulang perintahnya.

Ringkasan#

  • Distribusi resmi berupa arsip tar yang dibongkar, lalu Kafka dijalankan dari folder distribusinya dengan Java 17 atau lebih baru.
  • Penyimpanan KRaft dibentuk satu kali dengan bin/kafka-storage.sh format sebelum broker pertama dijalankan.
  • Topic pertama dibuat dan diperiksa dengan bin/kafka-topics.sh, dan aliran datanya diuji producer serta consumer console CLI dengan batas pesan.

Referensi#