Kafka Topic Advanced: Unclean Leader Election
Konfigurasi Topik Kafka: Unclean Leader Election
Dalam Apache Kafka, pemilihan pemimpin (leader election) adalah proses kritis yang memastikan partisi topik tetap tersedia untuk operasi penulisan dan pembacaan. Namun, ketika pemimpin partisi tidak tersedia dan tidak ada replika dalam In-Sync Replicas (ISR) yang dapat mengambil alih, Kafka menghadapi dilema antara ketersediaan (availability) dan keamanan data (data consistency). Parameter konfigurasi unclean.leader.election.enable
mengatur perilaku Kafka dalam situasi ini. Artikel ini akan menjelaskan apa itu unclean leader election, implikasinya terhadap kehilangan data dan ketersediaan, serta cara mengonfigurasinya menggunakan alat CLI. Kami juga akan membahas kapan sebaiknya menggunakan pengaturan ini dan praktik terbaik untuk mengelolanya.
Apa itu Unclean Leader Election?
Dalam operasi normal Kafka, ketika pemimpin (leader) sebuah partisi tidak tersedia (misalnya, karena kegagalan broker), Kafka memilih salah satu replika dari In-Sync Replicas (ISR) sebagai pemimpin baru. Pemilihan ini disebut clean leader election karena menjamin tidak ada kehilangan data yang sudah committed—data yang sudah ada di semua replika ISR.
Namun, jika tidak ada replika ISR yang tersedia (misalnya, semua replika tertinggal atau tidak sinkron dengan pemimpin sebelumnya), Kafka harus memilih antara dua opsi:
Menunggu Replika ISR Kembali Online (Default):
Kafka menunda pemilihan pemimpin hingga replika ISR kembali aktif.
Keuntungan: Menjamin tidak ada kehilangan data yang sudah committed.
Kekurangan: Partisi menjadi tidak tersedia untuk penulisan dan pembacaan hingga replika ISR pulih, yang dapat menyebabkan penurunan ketersediaan (availability).
Mengizinkan Unclean Leader Election (
unclean.leader.election.enable=true
):Kafka memilih replika yang tidak termasuk dalam ISR (replika yang tertinggal) sebagai pemimpin baru.
Keuntungan: Meningkatkan ketersediaan partisi karena pemimpin baru dapat dipilih lebih cepat.
Kekurangan: Berpotensi menyebabkan kehilangan data dan inkonsistensi data, karena replika yang tidak sinkron mungkin tidak memiliki semua pesan yang sudah committed.
Implikasi Unclean Leader Election
Mengaktifkan unclean.leader.election.enable=true
melibatkan trade-off penting antara ketersediaan dan konsistensi data. Berikut adalah implikasi utamanya:
Kehilangan Data
Ketika replika yang tidak sinkron (bukan ISR) dipilih sebagai pemimpin, semua pesan yang ditulis ke pemimpin sebelumnya tetapi belum direplikasi ke replika tersebut akan hilang.
Contoh: Jika pemimpin memiliki pesan dengan offset 1000–1100 yang belum direplikasi ke replika lain, dan replika dengan offset hingga 999 menjadi pemimpin baru, pesan 1000–1100 akan hilang.
Inkonsistensi Data
Konsumer mungkin melihat data yang tidak konsisten, seperti pesan yang hilang atau urutan pesan yang tidak sesuai, karena replika yang tidak sinkron memiliki versi data yang lebih lama.
Ini dapat memengaruhi aplikasi yang bergantung pada urutan pesan atau integritas data.
Ketersediaan yang Lebih Tinggi
Dengan mengizinkan unclean leader election, partisi dapat kembali online lebih cepat tanpa menunggu replika ISR pulih.
Ini sangat berguna untuk aplikasi di mana ketersediaan lebih penting daripada kehilangan data sesekali, seperti pengumpulan metrik atau log.
Peringatan
Pengaturan unclean.leader.election.enable=true
dianggap berbahaya karena dapat menyebabkan kehilangan data dan inkonsistensi. Untuk pemula, disarankan untuk mempertahankan nilai default (false
) kecuali ada kebutuhan spesifik yang dipahami dengan baik.
Kasus Penggunaan untuk Unclean Leader Election
Mengaktifkan unclean leader election dapat dipertimbangkan dalam kasus berikut:
Pengumpulan Metrik: Data metrik sering kali bersifat tidak kritis, sehingga kehilangan beberapa pesan dapat diterima demi ketersediaan yang lebih tinggi.
Pengumpulan Log: Log aplikasi yang tidak memerlukan jaminan ketahanan data penuh dapat menggunakan pengaturan ini untuk memastikan topik tetap tersedia.
Aplikasi dengan Toleransi Kehilangan Data: Jika aplikasi dapat mentolerir kehilangan data sesekali dan memprioritaskan ketersediaan, pengaturan ini mungkin sesuai.
Namun, untuk aplikasi yang memerlukan integritas data tinggi (misalnya, transaksi finansial atau sistem pesanan), unclean leader election sebaiknya dihindari.
Untuk diskusi lebih mendalam tentang kapan menggunakan pengaturan ini, Anda dapat merujuk ke artikel dari DataDog: Kafka at DataDog: Unclean Leader Elections.
Mengonfigurasi Unclean Leader Election Menggunakan CLI
Parameter unclean.leader.election.enable
dapat diatur pada level topik atau broker menggunakan alat CLI kafka-configs.sh
. Nilai defaultnya adalah false
pada level broker, yang berarti unclean leader election dinonaktifkan kecuali ditimpa secara eksplisit.
Prasyarat
Pastikan klaster Kafka berjalan (mode Zookeeper atau KRaft).
Gunakan ekstensi CLI yang sesuai:
.sh
untuk Linux/Mac,.bat
untuk Windows.Pastikan broker Kafka aktif di
localhost:9092
(atau alamat lain sesuai konfigurasi Anda).Topik
configured-topic
sudah dibuat, misalnya:kafka-topics.sh --bootstrap-server localhost:9092 --create --topic configured-topic --partitions 3 --replication-factor 1
Langkah-langkah Konfigurasi
Periksa Konfigurasi Topik Saat Ini: 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 konfigurasi override untuk
unclean.leader.election.enable
.Aktifkan Unclean Leader Election: Atur
unclean.leader.election.enable=true
untuk topikconfigured-topic
:kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type topics --entity-name configured-topic --add-config unclean.leader.election.enable=true
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: unclean.leader.election.enable=true 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
unclean.leader.election.enable=true
telah ditambahkan sebagai konfigurasi override topik.Hapus Konfigurasi Override (Opsional): Jika Anda ingin menghapus konfigurasi
unclean.leader.election.enable
dan kembali ke default broker (false
):kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type topics --entity-name configured-topic --delete-config unclean.leader.election.enable
Verifikasi kembali dengan
kafka-topics.sh --describe
untuk memastikan konfigurasi telah dihapus.
Konfigurasi pada Level Broker
Untuk mengatur unclean.leader.election.enable
sebagai default untuk semua topik:
Melalui File Konfigurasi:
Buka file
config/server.properties
.Tambahkan parameter:
unclean.leader.election.enable=true
Restart broker untuk menerapkan perubahan:
kafka-server-stop.sh kafka-server-start.sh config/server.properties
Melalui CLI (Konfigurasi Dinamis):
Atur konfigurasi default untuk semua broker:
kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type brokers --entity-default --add-config unclean.leader.election.enable=true
Verifikasi perubahan:
kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-type brokers --entity-default
Hapus konfigurasi dinamis (opsional):
kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type brokers --entity-default --delete-config unclean.leader.election.enable
Catatan: Konfigurasi level topik akan menimpa konfigurasi level broker. Karena pengaturan ini berbahaya, pertimbangkan untuk hanya menerapkannya pada topik tertentu, bukan secara global di level broker.
Pertimbangan Unclean Leader Election
Kapan Mengaktifkan?
Kasus yang Cocok: Aktifkan
unclean.leader.election.enable=true
hanya untuk topik yang dapat mentolerir kehilangan data, seperti:Pengumpulan metrik (misalnya, data performa sistem).
Pengumpulan log aplikasi yang tidak kritis.
Aplikasi dengan kebutuhan ketersediaan tinggi dan toleransi terhadap inkonsistensi data.
Kasus yang Tidak Cocok: Hindari penggunaan pada topik yang memerlukan integritas data tinggi, seperti:
Data transaksi finansial.
Sistem pesanan atau inventaris.
Topik yang bergantung pada urutan pesan yang ketat.
Dampak pada Konsumer
Konsumer mungkin melihat data yang tidak lengkap atau urutan pesan yang salah jika replika yang tidak sinkron menjadi pemimpin.
Untuk mengurangi dampak, pastikan konsumer memiliki mekanisme untuk menangani data yang hilang atau inkonsisten, seperti validasi atau rekonsiliasi data.
Dampak pada Klaster
Mengaktifkan unclean leader election dapat meningkatkan ketersediaan, tetapi meningkatkan risiko kehilangan data.
Pantau metrik seperti
OfflinePartitions
danUnderReplicatedPartitions
untuk mendeteksi masalah replikasi yang dapat memicu unclean leader election.
Alternatif
Jika ketersediaan adalah prioritas tetapi Anda ingin meminimalkan kehilangan data:
Tingkatkan faktor replikasi (
replication.factor
) untuk memastikan lebih banyak replika tersedia dalam ISR.Atur
min.insync.replicas
ke nilai yang lebih rendah (misalnya, 1) untuk menjaga ketersediaan tanpa mengorbankan konsistensi sebanyak unclean leader election.Pastikan kesehatan broker dipantau dan pulihkan broker yang gagal secepat mungkin untuk meminimalkan waktu ketika ISR kosong.
Praktik Terbaik
Pertahankan Default (
false
) untuk Pemula:Jangan aktifkan
unclean.leader.election.enable
kecuali Anda memahami sepenuhnya implikasinya terhadap kehilangan data dan inkonsistensi.
Terapkan pada Topik Spesifik:
Jika diperlukan, aktifkan pengaturan ini hanya pada topik tertentu dengan kebutuhan ketersediaan tinggi dan toleransi kehilangan data, bukan pada level broker.
Gunakan Konfigurasi Dinamis:
Gunakan
kafka-configs.sh
untuk mengubahunclean.leader.election.enable
secara dinamis tanpa restart broker:kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type topics --entity-name configured-topic --add-config unclean.leader.election.enable=true
Pantau Kesehatan Klaster:
Gunakan alat seperti Kafka Manager atau metrik JMX untuk memantau status ISR dan mendeteksi replika yang tidak sinkron.
Periksa metrik
LeaderElectionRateAndTimeMs
untuk memantau frekuensi pemilihan pemimpin.
Uji di Lingkungan Non-Produksi:
Uji dampak pengaturan
unclean.leader.election.enable=true
di lingkungan pengujian untuk memahami efeknya pada aplikasi dan konsumer.
Kombinasikan dengan Konfigurasi Lain:
Gunakan
min.insync.replicas
danreplication.factor
yang sesuai untuk meminimalkan kemungkinan ISR kosong, sehingga mengurangi kebutuhan akan unclean leader election.
Dokumentasikan Perubahan:
Catat semua topik yang menggunakan
unclean.leader.election.enable=true
dan alasan penggunaannya untuk memudahkan pemeliharaan dan audit.
Penjelasan Tambahan
Hubungan dengan ISR
In-Sync Replicas (ISR) adalah replika yang sinkron dengan pemimpin partisi. Jika ISR kosong (misalnya, karena semua replika tertinggal), Kafka harus memilih antara menunggu ISR pulih atau mengizinkan unclean leader election. Parameter min.insync.replicas
juga memengaruhi perilaku ini, karena menentukan jumlah minimum replika ISR yang diperlukan untuk operasi penulisan dengan acks=all
.
Mode KRaft
Dalam mode KRaft (Kafka tanpa Zookeeper, mulai versi 3.3), pemilihan pemimpin dikelola oleh controller Kafka, bukan Zookeeper. Logika unclean leader election tetap sama, tetapi prosesnya lebih efisien karena metadata terintegrasi di broker. Pastikan untuk menguji pengaturan ini dalam mode KRaft untuk memahami dampaknya pada ketersediaan.
Pemecahan Masalah
Jika topik menjadi tidak tersedia karena ISR kosong:
Periksa status ISR:
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic configured-topic
Perhatikan bagian
Isr
untuk memastikan replika sinkron.Jika unclean leader election diaktifkan dan terjadi kehilangan data, periksa log konsumer untuk mendeteksi inkonsistensi.
Pulihkan broker yang gagal secepat mungkin untuk mengisi kembali ISR.
Kesimpulan
Konfigurasi unclean.leader.election.enable
adalah alat yang kuat namun berisiko di Apache Kafka, memungkinkan trade-off antara ketersediaan dan konsistensi data. Dengan mengaktifkan pengaturan ini, Anda dapat meningkatkan ketersediaan partisi dengan mengorbankan potensi kehilangan data dan inkonsistensi. Pengaturan ini hanya cocok untuk kasus penggunaan tertentu, seperti pengumpulan metrik atau log, dan harus digunakan dengan hati-hati. Dengan menggunakan alat CLI seperti kafka-configs.sh
, Anda dapat mengelola pengaturan ini secara dinamis, sementara praktik terbaik seperti pemantauan kesehatan klaster dan pengujian di lingkungan non-produksi membantu meminimalkan risiko.
Last updated