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
, ataulz4
). Default biasanyanone
.Kebijakan Pembersihan Log (
cleanup.policy
): Menentukan apakah log akan dihapus (delete
) atau dipadatkan (compact
) berdasarkan waktu retensi atau ukuran. Default adalahdelete
.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
dankafka-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).
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 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.
Ubah
min.insync.replicas
: Atur 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 di bagianConfigs
.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:
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.
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:
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
.
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.
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).
Tingkat Kompresi (
compression.type
):Mengurangi ukuran data di disk dan jaringan. Pilihan termasuk
gzip
,snappy
,lz4
, atauzstd
.Contoh:
compression.type=snappy
untuk keseimbangan antara kompresi dan performa.
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.
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
, aturmin.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
danreplication.factor
berdasarkan kebutuhan ketahanan dan ketersediaan. Nilai umum adalahmin.insync.replicas=replication.factor-1
.Pantau Kesehatan Klaster: Gunakan alat seperti Kafka Manager atau metrik JMX untuk memantau metrik seperti
UnderReplicatedPartitions
atauOfflinePartitions
.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
ataulz4
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