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
acks
pada Produser KafkaSebelum 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
?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
atauacks=1
, topik tetap tersedia untuk penulisan selama pemimpin aktif, meskipun replika lain tidak sinkron.Jika
acks=all
, ketersediaan tergantung padamin.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, danmin.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
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
dankafka-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
.
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
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
.Atur
min.insync.replicas
: Ubah nilaimin.insync.replicas
menjadi 2 untuk topikconfigured-topic
:kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type topics --entity-name configured-topic --add-config min.insync.replicas=2
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.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
Buka file konfigurasi broker, biasanya terletak di
config/server.properties
.Tambahkan baris berikut di akhir file:
min.insync.replicas=2
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
:
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.
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}
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
: Nilaimin.insync.replicas
tidak boleh melebihi faktor replikasi topik. Misalnya, dengan faktor replikasi 3, pengaturanmin.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, aturmin.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
danmin.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 padamin.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