Kafka Topic Advanced: Konfigurasi Topik Kafka: Minimum In-Sync Replicas

Konfigurasi Topik Kafka: Minimum In-Sync Replicas

Dalam Apache Kafka, pengaturan min.insync.replicas adalah parameter konfigurasi penting yang digunakan bersama dengan pengaturan produser acks untuk meningkatkan keamanan dan ketahanan pesan. Artikel ini akan menjelaskan apa itu min.insync.replicas, bagaimana cara kerjanya, dan bagaimana mengonfigurasinya untuk memastikan keandalan data dalam klaster Kafka.

Pengenalan acks pada Produser Kafka

Sebelum membahas min.insync.replicas, penting untuk memahami pengaturan acks pada produser Kafka. Parameter acks menentukan jumlah broker yang harus mengakui penerimaan pesan sebelum pesan tersebut dianggap berhasil ditulis (successful write). Ada tiga opsi untuk acks:

  • acks=0:

    • Produser menganggap pesan berhasil ditulis segera setelah dikirim, tanpa menunggu konfirmasi dari broker.

    • Kelebihan: Throughput tertinggi karena overhead jaringan minimal.

    • Kekurangan: Tidak ada jaminan bahwa pesan diterima oleh broker. Jika broker offline atau terjadi kesalahan, data dapat hilang. Cocok untuk data yang tidak kritis, seperti pengumpulan metrik.

  • acks=1:

    • Produser menganggap pesan berhasil ditulis setelah pemimpin (leader) partisi mengakui penerimaan pesan.

    • Kelebihan: Keseimbangan antara throughput dan keandalan.

    • Kekurangan: Replikasi dilakukan di latar belakang, sehingga jika pemimpin gagal sebelum replika menyalin data, data dapat hilang.

  • acks=all:

    • Produser menganggap pesan berhasil ditulis hanya setelah semua replika dalam In-Sync Replicas (ISR) mengakui penerimaan pesan.

    • Kelebihan: Menjamin bahwa pesan disalin ke semua replika ISR, sehingga meningkatkan ketahanan data.

    • Kekurangan: Latensi lebih tinggi karena harus menunggu konfirmasi dari semua replika ISR.

Perubahan Default di Kafka 3.0: Sejak Kafka versi 3.0, nilai default acks berubah menjadi all (sebelumnya acks=1 pada versi < 3.0). Ini berarti perilaku default sekarang lebih aman, tetapi mungkin menambah latensi dibandingkan pengaturan sebelumnya.

Apa itu min.insync.replicas?

min.insync.replicas adalah parameter konfigurasi yang menentukan jumlah minimum replika dalam ISR (termasuk pemimpin) yang harus mengakui penerimaan pesan agar pesan dianggap committed. Parameter ini dapat dikonfigurasi pada dua level:

  • Level Topik: Berlaku khusus untuk topik tertentu.

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

Ketika acks=all, pemimpin partisi akan memeriksa apakah jumlah replika ISR yang tersedia memenuhi nilai min.insync.replicas sebelum menganggap pesan berhasil ditulis. Jika jumlah replika ISR yang aktif lebih rendah dari min.insync.replicas, produser akan menerima pengecualian NotEnoughReplicasException, dan operasi penulisan akan gagal.

Contoh

Misalkan sebuah topik memiliki faktor replikasi (replication factor) 3, yang berarti ada satu pemimpin dan dua replika. Jika min.insync.replicas=2, maka setidaknya dua broker (pemimpin dan satu replika ISR) harus mengakui pesan agar dianggap berhasil ditulis. Jika hanya satu broker (pemimpin) yang tersedia karena replika lain tidak sinkron, operasi penulisan akan gagal.

Ketahanan dan Ketersediaan Data

Konfigurasi min.insync.replicas dan acks sangat memengaruhi ketahanan (durability) dan ketersediaan (availability) data dalam Kafka. Berikut adalah penjelasannya:

Ketahanan Data (Durability)

  • Ketahanan data mengacu pada kemampuan Kafka untuk mencegah kehilangan data meskipun beberapa broker gagal. Untuk topik dengan faktor replikasi N, Anda dapat kehilangan hingga N-1 broker tanpa kehilangan data, selama setidaknya satu replika ISR tetap aktif.

  • Contoh: Dengan faktor replikasi 3, Kafka dapat menahan kegagalan hingga 2 broker, selama pemimpin atau replika ISR lainnya masih tersedia.

Ketersediaan Data (Availability)

  • Ketersediaan data mengacu pada kemampuan topik untuk tetap dapat dibaca dan ditulis meskipun beberapa broker gagal.

  • Untuk Pembacaan (Reads): Selama setidaknya satu replika ISR aktif, topik tetap tersedia untuk pembacaan.

  • Untuk Penulisan (Writes):

    • Jika acks=0 atau acks=1, topik tetap tersedia untuk penulisan selama pemimpin aktif, meskipun replika lain tidak sinkron.

    • Jika acks=all, ketersediaan tergantung pada min.insync.replicas:

      • min.insync.replicas=1: Topik tetap tersedia selama setidaknya satu replika ISR (pemimpin) aktif. Dengan faktor replikasi 3, Anda dapat menahan kegagalan hingga 2 broker.

      • min.insync.replicas=2: Topik memerlukan setidaknya dua replika ISR aktif. Dengan faktor replikasi 3, Anda hanya dapat menahan kegagalan satu broker.

      • min.insync.replicas=3: Dengan faktor replikasi 3, semua replika harus aktif, sehingga tidak dapat menahan kegagalan broker sama sekali.

      • Secara umum, dengan acks=all, faktor replikasi N, dan min.insync.replicas=M, Anda dapat menahan kegagalan hingga N-M broker untuk ketersediaan penulisan.

Konfigurasi Populer

Kombinasi acks=all dan min.insync.replicas=2 adalah opsi paling populer untuk menyeimbangkan ketahanan dan ketersediaan data. Dengan faktor replikasi 3, konfigurasi ini memungkinkan Anda menahan kegagalan satu broker sambil memastikan bahwa data ditulis ke setidaknya dua broker, sehingga mengurangi risiko kehilangan data.

Mengonfigurasi min.insync.replicas

Parameter min.insync.replicas dapat dikonfigurasi pada level topik atau broker. Berikut adalah langkah-langkah untuk mengonfigurasinya menggunakan alat CLI Kafka.

Prasyarat

  • Pastikan klaster Kafka berjalan dengan benar (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.

Konfigurasi pada Level Topik

Berikut adalah langkah-langkah untuk mengatur min.insync.replicas pada topik tertentu menggunakan kafka-configs.sh.

  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:

    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 pengaturan override untuk min.insync.replicas.

  3. Atur min.insync.replicas: Ubah 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.

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

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

Konfigurasi pada Level Broker

Parameter min.insync.replicas juga dapat diatur pada level broker sebagai default untuk semua topik yang tidak memiliki override spesifik.

Melalui File Konfigurasi

  1. Buka file konfigurasi broker, biasanya terletak di config/server.properties.

  2. Tambahkan baris berikut di akhir file:

    min.insync.replicas=2
  3. Simpan file dan restart broker Kafka agar perubahan diterapkan:

    kafka-server-stop.sh
    kafka-server-start.sh config/server.properties

    Catatan: Perubahan melalui file konfigurasi memerlukan restart broker, yang dapat mengganggu operasi klaster.

Melalui CLI (Konfigurasi Dinamis)

Anda juga dapat mengubah min.insync.replicas secara dinamis tanpa memerlukan restart broker menggunakan kafka-configs.sh:

  1. Atur nilai default untuk semua broker:

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

    Keluaran:

    Completed updating default config for brokers in the cluster.
  2. Verifikasi konfigurasi:

    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}
  3. Hapus konfigurasi dinamis (opsional):

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

Catatan Penting

  • Konflik Konfigurasi: Jika min.insync.replicas dikonfigurasi pada level topik, nilai ini akan menimpa pengaturan default pada level broker.

  • Faktor Replikasi vs. min.insync.replicas: Nilai min.insync.replicas tidak boleh melebihi faktor replikasi topik. Misalnya, dengan faktor replikasi 3, pengaturan min.insync.replicas=3 berarti tidak ada toleransi terhadap kegagalan broker, sehingga kurang praktis.

  • Praktik Terbaik: Gunakan min.insync.replicas=replication.factor-1 untuk menyeimbangkan ketahanan dan ketersediaan. Misalnya, untuk faktor replikasi 3, atur min.insync.replicas=2.

Penjelasan Tambahan

Hubungan dengan ISR

In-Sync Replicas (ISR) adalah kumpulan replika yang sinkron dengan pemimpin partisi. Parameter min.insync.replicas menentukan jumlah minimum replika ISR yang harus aktif untuk operasi penulisan dengan acks=all. Jika jumlah replika ISR yang aktif lebih rendah dari min.insync.replicas, Kafka akan menolak operasi penulisan untuk memastikan keamanan data.

Dampak pada Produser

Dengan acks=all, produser akan menunggu hingga semua replika ISR (sesuai min.insync.replicas) mengonfirmasi penulisan. Ini meningkatkan latensi dibandingkan acks=0 atau acks=1, tetapi menjamin bahwa data disalin ke beberapa broker, mengurangi risiko kehilangan data.

Pemantauan

Untuk memastikan klaster Kafka beroperasi dengan baik setelah mengatur min.insync.replicas, pantau metrik berikut:

  • UnderReplicatedPartitions: Menunjukkan jumlah partisi yang memiliki replika ISR lebih sedikit dari yang diharapkan.

  • OfflinePartitions: Menunjukkan partisi yang tidak memiliki pemimpin aktif, yang dapat memengaruhi ketersediaan.

  • Gunakan alat seperti Kafka Manager atau metrik JMX untuk memantau kesehatan klaster.

Pengaruh Mode KRaft

Dalam mode KRaft (Kafka tanpa Zookeeper, mulai versi 3.3), pengelolaan ISR dan min.insync.replicas ditangani oleh controller Kafka, bukan Zookeeper. Logika dan perilaku min.insync.replicas tetap sama, tetapi prosesnya lebih terintegrasi karena metadata dikelola langsung oleh broker Kafka.

Praktik Terbaik

  • Gunakan acks=all dan min.insync.replicas=2: Ini adalah konfigurasi yang umum digunakan untuk menyeimbangkan ketahanan dan ketersediaan, terutama untuk topik dengan faktor replikasi 3.

  • Uji Konfigurasi: Selalu uji perubahan konfigurasi di lingkungan non-produksi untuk memahami dampaknya pada latensi dan ketersediaan.

  • Konfigurasi Dinamis: Gunakan kafka-configs.sh untuk perubahan dinamis pada min.insync.replicas agar menghindari restart broker.

  • Pilih Faktor Replikasi yang Tepat: Pastikan faktor replikasi cukup tinggi (misalnya, 3 atau lebih) untuk mendukung ketahanan data.

  • Pantau Kesehatan Klaster: Gunakan alat pemantauan untuk mendeteksi masalah seperti replika yang tidak sinkron atau kegagalan broker.

Kesimpulan

Parameter min.insync.replicas adalah alat penting untuk meningkatkan keamanan dan ketahanan data dalam Apache Kafka, terutama ketika digunakan bersama acks=all. Dengan mengatur jumlah minimum replika ISR yang harus mengakui pesan, Anda dapat mengontrol tingkat ketahanan dan ketersediaan topik. Konfigurasi ini dapat dilakukan pada level topik atau broker, baik melalui file konfigurasi maupun secara dinamis menggunakan CLI. Dengan memahami dan mengonfigurasi min.insync.replicas dengan benar, Anda dapat memastikan bahwa data dalam klaster Kafka tetap aman dan tersedia, bahkan dalam situasi kegagalan broker.

Last updated