Kafka Topic Advanced: Cara Mengubah Konfigurasi Topik Kafka Menggunakan CLI

Cara Mengubah Konfigurasi Topik Kafka Menggunakan CLI

Apache Kafka adalah platform streaming data yang kuat, dan konfigurasi topik memainkan peran penting dalam menentukan performa, ketahanan, dan perilaku topik dalam klaster. Dalam artikel ini, kita akan membahas konfigurasi default topik Kafka, cara mengubahnya menggunakan alat CLI kafka-configs, serta parameter konfigurasi penting yang sering disesuaikan untuk memenuhi kebutuhan aplikasi. Artikel ini juga mencakup langkah-langkah praktis untuk mengelola konfigurasi topik dan praktik terbaik.

Konfigurasi Default Topik Kafka

Konfigurasi topik di Kafka menentukan bagaimana data disimpan, direplikasi, dan dikelola dalam klaster. Konfigurasi ini dapat diatur pada dua level:

  • Level Broker: Berlaku sebagai default untuk semua topik kecuali ditimpa oleh konfigurasi level topik.

  • Level Topik: Memungkinkan override konfigurasi khusus untuk topik tertentu.

Beberapa parameter konfigurasi topik yang umum dan sering disesuaikan meliputi:

  • Faktor Replikasi (replication.factor): Menentukan jumlah salinan data topik di seluruh broker. Default biasanya 1, tetapi nilai 3 sering digunakan untuk ketahanan data.

  • Jumlah Partisi (num.partitions): Menentukan jumlah partisi dalam topik, yang memengaruhi paralelisme. Default biasanya 1.

  • Ukuran Pesan Maksimum (max.message.bytes): Membatasi ukuran maksimum pesan dalam topik. Default adalah 1 MB (1000000 bytes).

  • Tingkat Kompresi (compression.type): Menentukan algoritma kompresi untuk data (misalnya, none, gzip, snappy, atau lz4). Default biasanya none.

  • Kebijakan Pembersihan Log (cleanup.policy): Menentukan apakah log akan dihapus (delete) atau dipadatkan (compact) berdasarkan waktu retensi atau ukuran. Default adalah delete.

  • Minimum In-Sync Replicas (min.insync.replicas): Menentukan jumlah minimum replika dalam In-Sync Replicas (ISR) yang harus mengakui pesan untuk dianggap berhasil ditulis. Default adalah 1.

Daftar lengkap konfigurasi topik dapat ditemukan di dokumentasi resmi Kafka: https://kafka.apache.org/documentation/#topicconfigs.

Konfigurasi default pada level broker biasanya cukup untuk banyak kasus penggunaan, tetapi beberapa topik mungkin memerlukan pengaturan khusus untuk mengoptimalkan performa, ketahanan, atau ketersediaan. Misalnya, topik yang menangani data kritis mungkin memerlukan min.insync.replicas yang lebih tinggi atau faktor replikasi yang lebih besar.

Mengapa Mengubah Konfigurasi Topik?

Mengubah konfigurasi topik diperlukan untuk:

  • Meningkatkan Ketahanan Data: Misalnya, meningkatkan min.insync.replicas untuk memastikan data ditulis ke lebih dari satu replika.

  • Mengoptimalkan Performa: Menyesuaikan jumlah partisi untuk meningkatkan paralelisme atau mengatur kompresi untuk mengurangi penggunaan penyimpanan.

  • Menyesuaikan Kebutuhan Aplikasi: Misalnya, mengatur kebijakan pembersihan log untuk mendukung pemadatan log (compaction) pada topik yang memerlukan penyimpanan berdasarkan kunci.

  • Mengatasi Batasan Perangkat Keras: Menyesuaikan ukuran pesan maksimum untuk mendukung data yang lebih besar atau mengurangi beban jaringan.

Mengubah Konfigurasi Topik Menggunakan CLI

Kafka menyediakan alat CLI kafka-configs untuk mengubah konfigurasi topik secara dinamis tanpa memerlukan restart broker. Berikut adalah langkah-langkah untuk mengubah konfigurasi topik, menggunakan contoh pengaturan min.insync.replicas.

Prasyarat

  • Pastikan klaster Kafka berjalan (baik dalam mode Zookeeper atau KRaft).

  • Gunakan ekstensi CLI yang sesuai dengan platform Anda: .sh untuk Linux/Mac, .bat untuk Windows.

  • Pastikan Anda memiliki akses ke perintah kafka-topics.sh dan kafka-configs.sh di direktori instalasi Kafka.

  • Pastikan broker Kafka aktif di alamat yang ditentukan (misalnya, localhost:9092).

Langkah-langkah Mengubah Konfigurasi Topik

Berikut adalah contoh untuk mengubah parameter min.insync.replicas pada topik bernama configured-topic. Nilai default min.insync.replicas pada level broker adalah 1, tetapi nilai umum yang direkomendasikan adalah faktor replikasi minus 1 (misalnya, 2 untuk faktor replikasi 3).

  1. Buat Topik: Buat topik bernama configured-topic dengan 3 partisi dan faktor replikasi 1 (untuk contoh sederhana, meskipun dalam praktiknya faktor replikasi biasanya lebih besar):

    kafka-topics.sh --bootstrap-server localhost:9092 --create --topic configured-topic --partitions 3 --replication-factor 1
  2. Periksa Konfigurasi Topik: Gunakan perintah berikut untuk memeriksa konfigurasi topik saat ini:

    kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic configured-topic

    Contoh keluaran:

    Topic: configured-topic TopicId: CDU7SBxBQ1mzJGnuH68-cQ PartitionCount: 3 ReplicationFactor: 1 Configs:
    Topic: configured-topic Partition: 0 Leader: 2 Replicas: 2 Isr: 2
    Topic: configured-topic Partition: 1 Leader: 3 Replicas: 3 Isr: 3
    Topic: configured-topic Partition: 2 Leader: 1 Replicas: 1 Isr: 1

    Keluaran ini menunjukkan bahwa belum ada konfigurasi override untuk topik ini.

  3. Ubah min.insync.replicas: Atur nilai min.insync.replicas menjadi 2 untuk topik configured-topic:

    kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type topics --entity-name configured-topic --add-config min.insync.replicas=2
  4. Verifikasi Perubahan: Periksa kembali konfigurasi topik untuk memastikan perubahan diterapkan:

    kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic configured-topic

    Contoh keluaran:

    Topic: configured-topic TopicId: CDU7SBxBQ1mzJGnuH68-cQ PartitionCount: 3 ReplicationFactor: 1 Configs: min.insync.replicas=2
    Topic: configured-topic Partition: 0 Leader: 2 Replicas: 2 Isr: 2
    Topic: configured-topic Partition: 1 Leader: 3 Replicas: 3 Isr: 3
    Topic: configured-topic Partition: 2 Leader: 1 Replicas: 1 Isr: 1

    Sekarang, Anda dapat melihat bahwa min.insync.replicas=2 telah ditambahkan sebagai konfigurasi override topik di bagian Configs.

  5. Hapus Konfigurasi Override (Opsional): Jika Anda ingin menghapus konfigurasi override min.insync.replicas, gunakan perintah berikut:

    kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type topics --entity-name configured-topic --delete-config min.insync.replicas

    Verifikasi kembali dengan perintah kafka-topics.sh --describe untuk memastikan konfigurasi telah dihapus.

Mengubah Konfigurasi Lain

Selain min.insync.replicas, Anda dapat mengubah parameter lain menggunakan perintah kafka-configs.sh. Contoh:

  • Mengubah Ukuran Pesan Maksimum:

    kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type topics --entity-name configured-topic --add-config max.message.bytes=2000000
  • Mengubah Kebijakan Pembersihan Log:

    kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type topics --entity-name configured-topic --add-config cleanup.policy=compact
  • Mengubah Tingkat Kompresi:

    kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type topics --entity-name configured-topic --add-config compression.type=snappy

Untuk beberapa parameter seperti num.partitions atau replication.factor, Anda perlu menggunakan perintah kafka-topics.sh --alter karena parameter ini tidak dapat diubah melalui kafka-configs.sh. Contoh:

  • Menambah Partisi:

    kafka-topics.sh --bootstrap-server localhost:9092 --alter --topic configured-topic --partitions 5

    Catatan: Anda hanya dapat menambah jumlah partisi, tidak menguranginya. Juga, menambah partisi dapat mengganggu pengurutan berbasis kunci (key-based ordering), seperti dijelaskan dalam pertanyaan sebelumnya.

Konfigurasi pada Level Broker

Selain konfigurasi topik, Anda juga dapat mengatur konfigurasi default untuk semua topik pada level broker. Ini dilakukan dengan dua cara:

  1. Melalui File Konfigurasi:

    • Buka file config/server.properties pada broker.

    • Tambahkan parameter, misalnya:

      min.insync.replicas=2
      num.partitions=3
    • Simpan file dan restart broker:

      kafka-server-stop.sh
      kafka-server-start.sh config/server.properties
    • Catatan: Perubahan ini memerlukan restart broker, yang dapat mengganggu operasi klaster.

  2. Melalui CLI (Konfigurasi Dinamis):

    • Ubah konfigurasi default untuk semua broker secara dinamis:

      kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type brokers --entity-default --add-config min.insync.replicas=2
    • Verifikasi perubahan:

      kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-type brokers --entity-default

      Contoh keluaran:

      Default configs for brokers in the cluster are: min.insync.replicas=2 sensitive=false synonyms={DYNAMIC_DEFAULT_BROKER_CONFIG:min.insync.replicas=2}
    • Hapus konfigurasi dinamis (opsional):

      kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type brokers --entity-default --delete-config min.insync.replicas

Konfigurasi level topik akan selalu menimpa konfigurasi default level broker.

Parameter Konfigurasi Topik yang Penting

Berikut adalah beberapa parameter topik penting yang sering disesuaikan:

  1. Faktor Replikasi (replication.factor):

    • Menentukan jumlah salinan data topik di seluruh broker.

    • Contoh: Dengan replication.factor=3, data disalin ke tiga broker, memungkinkan ketahanan terhadap kegagalan hingga dua broker.

    • Dikonfigurasi saat pembuatan topik menggunakan kafka-topics.sh --create.

  2. Jumlah Partisi (num.partitions):

    • Menentukan jumlah partisi, yang memengaruhi paralelisme konsumer.

    • Dapat diubah menggunakan kafka-topics.sh --alter, tetapi hanya bisa ditambah, bukan dikurangi.

    • Peringatan: Menambah partisi dapat mengganggu pengurutan berbasis kunci, seperti dijelaskan sebelumnya.

  3. Ukuran Pesan Maksimum (max.message.bytes):

    • Membatasi ukuran pesan dalam topik. Default adalah 1 MB.

    • Contoh: Untuk mendukung pesan besar, atur ke max.message.bytes=10000000 (10 MB).

  4. Tingkat Kompresi (compression.type):

    • Mengurangi ukuran data di disk dan jaringan. Pilihan termasuk gzip, snappy, lz4, atau zstd.

    • Contoh: compression.type=snappy untuk keseimbangan antara kompresi dan performa.

  5. Kebijakan Pembersihan Log (cleanup.policy):

    • delete: Menghapus log berdasarkan waktu retensi (retention.ms) atau ukuran (retention.bytes).

    • compact: Memadatkan log berdasarkan kunci untuk menyimpan hanya versi terbaru dari setiap kunci.

    • Contoh: cleanup.policy=compact untuk topik yang memerlukan pemadatan log.

  6. Minimum In-Sync Replicas (min.insync.replicas):

    • Menentukan jumlah minimum replika ISR yang harus mengakui pesan untuk dianggap berhasil ditulis.

    • Contoh: Dengan replication.factor=3, atur min.insync.replicas=2 untuk ketahanan dan ketersediaan.

Praktik Terbaik

  • Gunakan Konfigurasi Dinamis: Lebih suka menggunakan kafka-configs.sh untuk perubahan dinamis pada konfigurasi topik atau broker agar menghindari restart.

  • Uji di Lingkungan Non-Produksi: Selalu uji perubahan konfigurasi di lingkungan pengujian untuk memahami dampaknya pada performa dan ketersediaan.

  • Pilih Nilai yang Sesuai: Sesuaikan konfigurasi seperti min.insync.replicas dan replication.factor berdasarkan kebutuhan ketahanan dan ketersediaan. Nilai umum adalah min.insync.replicas=replication.factor-1.

  • Pantau Kesehatan Klaster: Gunakan alat seperti Kafka Manager atau metrik JMX untuk memantau metrik seperti UnderReplicatedPartitions atau OfflinePartitions.

  • Hindari Perubahan Partisi yang Tidak Perlu: Menambah partisi dapat mengganggu pengurutan berbasis kunci, jadi pertimbangkan untuk membuat topik baru jika pengurutan kunci penting.

  • Dokumentasikan Perubahan: Catat semua perubahan konfigurasi untuk memudahkan pemeliharaan dan pemecahan masalah di masa depan.

Penjelasan Tambahan

Pengaruh pada Performa

Konfigurasi seperti num.partitions, compression.type, dan max.message.bytes memengaruhi performa klaster:

  • Jumlah Partisi: Lebih banyak partisi meningkatkan paralelisme, tetapi juga meningkatkan overhead manajemen metadata.

  • Kompresi: Mengaktifkan kompresi seperti snappy atau lz4 mengurangi penggunaan disk dan jaringan, tetapi menambah overhead CPU.

  • Ukuran Pesan: Ukuran pesan yang besar dapat meningkatkan latensi, jadi sesuaikan max.message.bytes dengan hati-hati.

Mode KRaft

Dalam mode KRaft (Kafka tanpa Zookeeper, mulai versi 3.3), konfigurasi topik dikelola oleh controller Kafka, bukan Zookeeper. Proses pengubahan konfigurasi menggunakan kafka-configs.sh tetap sama, tetapi manajemen metadata lebih efisien karena terintegrasi langsung di broker.

Pemantauan dan Pemecahan Masalah

Jika perubahan konfigurasi menyebabkan masalah, seperti topik menjadi tidak tersedia karena min.insync.replicas yang terlalu tinggi, periksa status replika menggunakan:

kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic configured-topic

Perhatikan bagian Isr untuk memastikan jumlah replika yang sinkron memenuhi min.insync.replicas. Jika tidak, periksa kesehatan broker atau masalah jaringan.

Kesimpulan

Mengubah konfigurasi topik Kafka menggunakan CLI seperti kafka-configs.sh adalah cara yang fleksibel dan dinamis untuk menyesuaikan perilaku topik sesuai kebutuhan aplikasi. Parameter seperti min.insync.replicas, num.partitions, dan compression.type memungkinkan Anda mengoptimalkan ketahanan, ketersediaan, dan performa. Dengan memahami konfigurasi default dan cara mengubahnya, Anda dapat memastikan bahwa topik Kafka berjalan dengan efisien dan andal dalam lingkungan produksi.

Last updated