Topik ini memperkenalkan kosakata yang muncul pada setiap percakapan tentang Kafka, yaitu topic, partisi, offset, broker, producer, dan consumer. Setiap istilah diperkenalkan beserta mekanismenya, kemudian seluruh kosakata diterapkan pada demo broker sungguhan yang membuat topic dengan tiga partisi dan menampilkan deskripsinya. Setelah membaca topik ini, keluaran perintah administrasi Kafka dapat dibaca dan ditafsirkan tanpa menebak.
Topic dan partisi#
Topic adalah nama kategori tempat pesan disimpan dan diterbitkan. Producer menulis ke topic tertentu, sedangkan consumer membaca dari topic yang menjadi langganannya, dan keduanya tidak perlu saling mengenal. Nama topic hanya berupa label seperti sensor-suhu, sedangkan aturan penggunaan data di dalamnya ditentukan oleh kesepakatan antara pihak yang menulis dan membaca. Satu cluster Kafka memuat banyak topic sekaligus, dan tiap topic biasanya melayani satu jenis aliran data.
Secara fisik, sebuah topic terpecah menjadi beberapa partisi, yaitu log kejadian terpisah yang masing-masing memiliki urutan offset sendiri. Pemecahan ini memberi dua sifat sekaligus, yaitu paralelisme karena partisi dapat tersebar di beberapa broker, serta pengurutan lokal yang terjaga di dalam satu partisi. Diagram berikut memperlihatkan topic dengan tiga partisi beserta nomor offset di masing-masing partisi.
Panjang partisi dapat berbeda karena setiap partisi menerima pesannya sendiri. Producer menentukan partisi tujuan setiap pesan, dan pesan dengan key (penanda yang menyertai pesan) selalu masuk ke partisi yang dihitung dari key tersebut, sedangkan pesan tanpa key disebar antar partisi untuk menyeimbangkan beban. Partisi juga menjadi unit pembagian kerja bagi consumer, sebagaimana dijelaskan pada bagian Producer dan consumer.
Offset dan pengurutan#
Offset adalah nomor posisi sebuah pesan di dalam partisinya, dimulai dari 0 dan bertambah satu untuk setiap pesan baru yang masuk. Nomor ini bersifat kekal, sehingga offset 7 pada partisi 0 selalu menunjuk pesan yang sama selama pesan itu belum dihapus oleh retensi. Karena penulisan hanya terjadi di ujung partisi, dua pesan yang berdampingan di satu partisi pasti berurutan waktunya.
Jaminan pengurutan hanya berlaku di dalam satu partisi. Dua pesan pada partisi berbeda tidak memiliki urutan yang dapat dibandingkan, dan consumer yang membaca beberapa partisi sekaligus melihat irisan pesan yang bergantung pada kecepatan pembacaannya. Rancangan yang menuntut urutan kejadian atas satu entitas menggunakan key yang tetap, sehingga seluruh kejadian entitas itu berakhir di partisi yang sama. Aturan inilah yang menjadikan pemilihan key sebagai keputusan desain yang penting.
Broker dan cluster#
Broker adalah satu server Kafka yang menyimpan partisi dan melayani producer serta consumer. Satu broker saja sudah cukup untuk belajar, sedangkan sistem produksi menggunakan beberapa broker yang membentuk satu cluster. Setiap partisi ditempatkan pada broker tertentu, dan broker pemiliknya disebut leader partisi tersebut, yaitu satu-satunya yang melayani penulisan dan pembacaan partisinya pada konfigurasi dasar.
Koordinasi antara broker pada Kafka modern ditangani mode KRaft, yaitu protokol bawaan yang menjadikan broker sekaligus sebagai pengelola metadata tanpa perangkat tambahan. Semua klien, baik producer, consumer, maupun alat administrasi, menghubungi cluster melalui satu alamat yang disebut bootstrap server, contohnya localhost:9092 pada broker tunggal. Dari alamat tersebut, klien memperoleh peta lengkap cluster, lalu berkomunikasi langsung dengan broker pemilik partisi yang dituju.
Producer dan consumer#
Producer adalah aplikasi yang menulis pesan ke topic, dan consumer adalah aplikasi yang membaca pesan dari topic. Producer memilih topic tujuan, opsi key, dan isi pesan, lalu broker menambahkan pesan itu ke partisi yang ditetapkan. Consumer menyatakan topic yang dibaca beserta posisi mulainya, misalnya dari awal log atau dari offset terakhir yang pernah dibaca.
Consumer biasanya berjalan dalam consumer group, yaitu kelompok consumer yang berbagi satu identitas. Anggota group membagi tugas tanpa membaca pesan yang sama, karena satu partisi dalam satu group hanya dikerjakan satu anggota. Mekanisme pembagian itu menjadikan penambahan anggota meningkatkan kecepatan konsumsi sampai jumlah anggota melebihi jumlah partisi, dan setelah itu tambahan anggota tidak menerima partisi apa pun.
Topic tiga partisi pada broker nyata#
Kosakata di atas dapat diuji langsung pada broker. Blok berikut membuat topic bernama m0-demo-kejadian dengan tiga partisi di broker lokal, kemudian menampilkan deskripsinya. Topic dengan nama yang sama dihapus terlebih dahulu agar demo dapat diulang dan hasilnya tetap sama.
(
cd /home/kal/my-project/kafka-runtime/kafka
bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --if-exists --topic m0-demo-kejadian 2>/dev/null
sleep 2
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic m0-demo-kejadian --partitions 3
bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic m0-demo-kejadian | grep "Partition:" | expand
)Created topic m0-demo-kejadian.
Topic: m0-demo-kejadian Partition: 0 Leader: 1 Replicas: 1 Isr: 1 Elr: LastKnownElr:
Topic: m0-demo-kejadian Partition: 1 Leader: 1 Replicas: 1 Isr: 1 Elr: LastKnownElr:
Topic: m0-demo-kejadian Partition: 2 Leader: 1 Replicas: 1 Isr: 1 Elr: LastKnownElr: Baris pertama adalah konfirmasi pembuatan topic, sedangkan tiga baris berikutnya memuat satu partisi per baris. Kolom Partition menunjukkan nomor partisi, kolom Leader menunjukkan broker yang melayani partisi itu, sedangkan kolom Replicas dan Isr (in-sync replicas) menunjukkan daftar salinan partisi beserta salinan yang sinkron dengan leader. Kolom Leader, Replicas, dan Isr bernilai 1 karena demo berjalan pada satu broker. Keluaran perintah describe disaring dengan grep "Partition:" karena baris kepala deskripsi memuat identitas topic yang berubah setiap kali topic dibuat ulang.
Ringkasan#
- Topic adalah kategori pesan yang terpecah menjadi partisi, dan setiap partisi adalah log kejadian dengan urutan offset sendiri.
- Pengurutan dijamin di dalam satu partisi, sedangkan key mengarahkan pesan-pesan berelasi ke partisi yang sama.
- Broker menyimpan partisi dan melayani klien, cluster menggabungkan beberapa broker, dan alamat bootstrap menjadi pintu masuk semua klien.
- Producer menulis pesan ke partisi yang ditetapkan, sedangkan consumer membaca dari posisi tertentu dan dapat bergabung dalam consumer group.
Referensi#
- Apache Kafka documentation — Apache Software Foundation — dokumentasi resmi yang menetapkan istilah topic, partisi, offset, broker, producer, dan consumer beserta perilakunya.
- Apache Kafka quickstart — Apache Software Foundation — panduan resmi mencoba topic, producer, dan consumer dari terminal pada broker lokal.