Kafka Topic Advanced: Konvensi Penamaan Topic Kafka
Konvensi Penamaan Topik Kafka
Dalam Apache Kafka, topik adalah unit dasar untuk mengatur dan menyimpan data. Anda bebas memilih nama topik apa pun, tetapi menetapkan konvensi penamaan yang konsisten di seluruh organisasi sangat penting untuk menjaga organisasi, kejelasan, dan skalabilitas sistem. Konvensi penamaan yang baik memudahkan pengelolaan topik, debugging, dan kolaborasi antar tim. Artikel ini akan menjelaskan pentingnya konvensi penamaan topik Kafka, karakter yang valid, struktur penamaan hierarkis yang umum, serta panduan praktis untuk menerapkannya dengan contoh lengkap menggunakan alat CLI Kafka.
Mengapa Konvensi Penamaan Penting?
Konsistensi: Nama topik yang konsisten memudahkan tim untuk memahami tujuan dan konteks topik tanpa dokumentasi tambahan.
Skalabilitas: Dalam klaster dengan ratusan atau ribuan topik, konvensi penamaan yang terstruktur mencegah kekacauan dan mempermudah pencarian.
Kejelasan: Nama topik yang jelas mengindikasikan data yang disimpan, formatnya, dan tim yang bertanggung jawab.
Pencegahan Konflik: Konvensi yang baik menghindari masalah seperti tabrakan namespace metrik, yang dapat terjadi jika karakter tertentu (misalnya, titik dan garis bawah) dicampur secara tidak konsisten.
Kolaborasi: Memudahkan komunikasi antar tim, terutama dalam organisasi besar dengan banyak departemen.
Untuk inspirasi lebih lanjut tentang konvensi penamaan, Anda dapat membaca artikel berikut: How to Paint the Bike Shed: Kafka Topic Naming Conventions.
Karakter yang Valid untuk Nama Topik
Nama topik Kafka hanya boleh menggunakan karakter berikut:
Alfanumerik ASCII: Huruf (a–z, A–Z) dan angka (0–9).
Karakter Khusus: Titik (
.), garis bawah (_), dan tanda hubung (-).
Peringatan
Hindari Mencampur Titik dan Garis Bawah: Menggunakan titik (
.) dan garis bawah (_) dalam nama topik yang serupa dapat menyebabkan tabrakan namespace metrik di Kafka, yang menghasilkan kesalahan seperti:org.apache.kafka.common.errors.InvalidTopicException: Topic 'test.1' collides with existing topics: test_1Solusi: Pilih salah satu pemisah (misalnya, hanya titik atau hanya tanda hubung) dan gunakan secara konsisten di seluruh klaster.
Panjang Nama: Nama topik sebaiknya tidak terlalu panjang untuk menjaga kejelasan, tetapi Kafka mengizinkan hingga 249 karakter (termasuk pemisah).
Hindari Karakter Khusus Lain: Karakter seperti spasi, tanda baca lain (misalnya,
!,@,#), atau karakter non-ASCII (misalnya,é,ñ) tidak diperbolehkan.
Struktur Penamaan Hierarkis
Struktur penamaan hierarkis adalah praktik umum untuk topik Kafka, terutama di organisasi besar. Struktur ini biasanya mengikuti pola berikut:
<nama_departemen>.<nama_tim>.<nama_dataset>.<format_data>
nama_departemen: Menunjukkan departemen atau unit bisnis yang memiliki topik (misalnya,
finance,marketing).nama_tim: Mengidentifikasi tim spesifik dalam departemen yang bertanggung jawab atas topik (misalnya,
billing,analytics).nama_dataset: Menjelaskan jenis data yang disimpan dalam topik (misalnya,
transactions,user_events).format_data: Menunjukkan format data untuk memudahkan konsumer memahami cara memproses pesan (misalnya,
avro,json,text,protobuf,csv,log).
Contoh Nama Topik
Berikut adalah beberapa contoh nama topik berdasarkan struktur hierarkis:
finance.billing.transactions.avro: Topik yang menyimpan data transaksi dari tim penagihan di departemen keuangan dalam format Avro.marketing.analytics.user_events.json: Topik yang menyimpan peristiwa pengguna dari tim analitik di departemen pemasaran dalam format JSON.it.monitoring.server_logs.text: Topik yang menyimpan log server dari tim pemantauan di departemen IT dalam format teks.
Variasi Struktur
Anda dapat menyesuaikan struktur sesuai kebutuhan organisasi, misalnya:
Sederhana:
<nama_dataset>.<format_data>(misalnya,orders.jsonuntuk organisasi kecil).Dengan Lingkungan:
<lingkungan>.<nama_departemen>.<nama_dataset>.<format_data>(misalnya,prod.finance.transactions.avrountuk lingkungan produksi).Dengan Aplikasi:
<nama_aplikasi>.<nama_dataset>.<format_data>(misalnya,crm.customers.jsonuntuk data pelanggan dari aplikasi CRM).
Praktik Penamaan Topik
Berikut adalah langkah-langkah praktis untuk menerapkan konvensi penamaan topik Kafka, lengkap dengan contoh pembuatan topik menggunakan alat CLI.
Prasyarat
Pastikan klaster Kafka berjalan (mode Zookeeper atau KRaft).
Gunakan ekstensi CLI yang sesuai:
.shuntuk Linux/Mac,.batuntuk Windows.Pastikan broker Kafka aktif di
localhost:9092(atau alamat lain sesuai konfigurasi Anda).Tentukan konvensi penamaan untuk organisasi Anda sebelum membuat topik.
Contoh Kasus Penggunaan
Misalkan Anda bekerja di perusahaan dengan tiga departemen: Keuangan (finance), Pemasaran (marketing), dan IT. Anda ingin membuat topik untuk:
Data transaksi penagihan dalam format Avro, dikelola oleh tim penagihan di departemen keuangan.
Peristiwa pengguna dalam format JSON, dikelola oleh tim analitik di departemen pemasaran.
Log server dalam format teks, dikelola oleh tim pemantauan di departemen IT.
Kami akan menggunakan struktur penamaan: <nama_departemen>.<nama_tim>.<nama_dataset>.<format_data> dengan pemisah titik (.) secara konsisten.
Langkah-langkah Praktis
1. Buat Topik dengan Konvensi Penamaan
Buat tiga topik dengan konfigurasi yang sesuai menggunakan kafka-topics.sh. Kami akan menggunakan 3 partisi dan faktor replikasi 3 untuk ketahanan dan distribusi yang baik.
Penjelasan Konfigurasi:
finance.billing.transactions.avro:
Menggunakan
cleanup.policy=deletedengan retensi 1 minggu (retention.ms=604800000) karena data transaksi perlu disimpan sementara.
marketing.analytics.user_events.json:
Menggunakan
cleanup.policy=compactuntuk menyimpan hanya peristiwa terbaru per kunci (misalnya, ID pengguna), denganmin.cleanable.dirty.ratio=0.001dansegment.ms=5000untuk mempercepat kompaksi.
it.monitoring.server_logs.text:
Menggunakan
cleanup.policy=deletedengan retensi 1 hari (retention.ms=86400000) karena log server tidak perlu disimpan lama.
2. Verifikasi Konfigurasi Topik
Periksa konfigurasi topik untuk memastikan semuanya diterapkan dengan benar:
Contoh Keluaran:
3. Produksi dan Konsumsi Data (Contoh)
Untuk menguji topik, jalankan produser dan konsumer konsol untuk setiap topik.
a. Topik finance.billing.transactions.avro
Jalankan produser:
Kirim pesan (misalnya, ID transaksi sebagai kunci, data transaksi sebagai nilai):
Jalankan konsumer:
b. Topik marketing.analytics.user_events.json
Jalankan produser:
Kirim pesan dengan kunci duplikat untuk menguji kompaksi:
Jalankan konsumer untuk melihat hasil kompaksi:
Keluaran setelah kompaksi (hanya nilai terbaru per kunci):
c. Topik it.monitoring.server_logs.text
Jalankan produser:
Kirim pesan log:
Jalankan konsumer:
4. Pantau dan Kelola Topik
Pantau Metrik: Gunakan alat seperti Kafka Manager atau metrik JMX untuk memantau metrik seperti
BytesInPerSec,BytesOutPerSec, danUnderReplicatedPartitions.Periksa Direktori Log: Verifikasi struktur direktori topik di
log.dirs(misalnya,/tmp/kafka-logs):Pastikan nama topik muncul sebagai subdirektori (misalnya,
finance.billing.transactions.avro-0).
Praktik Terbaik
Tetapkan Konvensi Penamaan Organisasi:
Dokumentasikan konvensi penamaan (misalnya,
<nama_departemen>.<nama_tim>.<nama_dataset>.<format_data>) dan terapkan secara konsisten di seluruh tim.Contoh dokumen konvensi:
Gunakan Pemisah Konsisten:
Pilih titik (
.) atau tanda hubung (-) sebagai pemisah dan hindari mencampur dengan garis bawah (_) untuk mencegah tabrakan namespace metrik.
Sertakan Format Data:
Tambahkan sufiks format data (misalnya,
.avro,.json) untuk memberikan petunjuk kepada konsumer tentang cara memproses pesan.
Gunakan Nama Deskriptif:
Pastikan nama topik jelas dan mencerminkan data yang disimpan, seperti
finance.billing.transactionsalih-alihtopic1.
Sertakan Lingkungan (Opsional):
Untuk lingkungan produksi dan pengujian, pertimbangkan menambahkan prefiks lingkungan (misalnya,
prod.finance.billing.transactions.avro).
Uji Konvensi Penamaan:
Uji pembuatan topik di lingkungan non-produksi untuk memastikan nama tidak menyebabkan kesalahan atau konflik.
Pantau dan Audit Topik:
Secara berkala periksa semua topik untuk memastikan kepatuhan terhadap konvensi penamaan:
Pertimbangkan Mode KRaft:
Dalam mode KRaft (Kafka tanpa Zookeeper), manajemen topik lebih efisien, tetapi konvensi penamaan tetap penting untuk organisasi dan kejelasan.
Penjelasan Tambahan
Hubungan dengan Operasi Kafka
Metrik dan Pemantauan: Nama topik yang konsisten memudahkan konfigurasi alat pemantauan seperti Prometheus atau Grafana, karena metrik Kafka menggunakan nama topik sebagai bagian dari namespace.
Manajemen Topik: Konvensi penamaan yang terstruktur mempermudah operasi seperti menghapus, memodifikasi, atau memindahkan topik di klaster besar.
Integrasi dengan Schema Registry: Jika menggunakan format seperti Avro, nama topik dengan sufiks
.avromembantu mengaitkan topik dengan skema di Confluent Schema Registry atau sistem serupa.
Pemecahan Masalah
Jika terjadi kesalahan seperti InvalidTopicException:
Periksa Nama Topik:
Pastikan nama hanya menggunakan karakter valid (alfanumerik,
.,_,-).Hindari nama yang mirip dengan pemisah berbeda (misalnya,
test.1vs.test_1).
Periksa Konflik:
Gunakan perintah berikut untuk melihat daftar topik:
Jika ada konflik, hapus topik yang bermasalah:
Jika topik tidak muncul seperti yang diharapkan:
Periksa konfigurasi broker di
server.propertiesuntuk memastikanlog.dirsdapat diakses.Verifikasi status topik:
Kesimpulan
Konvensi penamaan topik Kafka adalah praktik penting untuk menjaga konsistensi, kejelasan, dan skalabilitas dalam klaster Kafka. Dengan menggunakan struktur hierarkis seperti <nama_departemen>.<nama_tim>.<nama_dataset>.<format_data> dan karakter valid seperti titik atau tanda hubung, Anda dapat membuat nama topik yang informatif dan mudah dikelola. Contoh praktis menunjukkan cara membuat topik dengan konfigurasi yang sesuai untuk kasus penggunaan nyata, seperti transaksi keuangan, peristiwa pengguna, dan log server. Dengan mengikuti praktik terbaik seperti mendokumentasikan konvensi, menggunakan pemisah konsisten, dan memantau topik, Anda dapat memastikan pengelolaan klaster Kafka yang efisien dan bebas masalah.
Last updated