Apache Kafka - Part 5 - Producer
Pendahuluan
Pendahuluan awal mengenai Kafka dilihat di Kafka - Part 1 ?
Kenapa harus memakai Kafka bisa dilihat di Kafka - Part 2
Infrastruktur di Kafka - Part 3 ?
Infratruktur Kafka itu bisa kita bagi 2 :
- Infrastruktur Fisik, dijelaskan di Kafka - Part 3 ?
- Infrastruktur Logik, dijelaskan di Kafka - Part 4 ?
Sekarang mari kita lihat infrastruktur logic yang terakhir yaitu Producer
Producer
Producer merupakan program yang menulis data/message ke sebuah topic di dalam sebuah cluster.
Producer juga merupakan salah satu Kafka client selain dari Consumer.
Perbedaannya yaa yang satu untuk menulis ke topic, dan satu lagi untuk membaca dari topic.
Oh iya, ada satu lagi, kalau Producer tidak butuh producer group, seperti halnya Consumer.
Konsep Producer ini juga tidak jauh berbeda dengan konsep Publisher di messaging tradisional seperti ActiveMq, dll.
Producer bisa saja menulis data/message ke kesebuah topic sebanyak mungkin.
Siapa yang menentukan nanti messagenya akan ditaruh di Partition mana ?
Yang menentukan adalah Producer !, bukan broker.
Walaupun Producer berada di sisi client, tapi yang menentukan partition mana yang akan ditaruh data/message yang dikirimkan adalah tetap Producer
Oleh karena itu Producer memiliki metadata mengenai topic dan partition yang terhubung dengannya.
Tentunya ini difasilitasi oleh library Kafka Client baik yang kita pakai dengan menggunakan CLI atau sebagai library Kafka.
Algoritma untuk menentukan partition mana yang akan ditaruh data/message tersebut biasanya memakai fungsi hashing terhadap key dari data/message yang dikirimkan tersebut.
Bagaimana kalau kita mengirimkan data/message tanpa menggunakan key ?
Yaa, tentu saja bisa, dan Kafka Client juga mengakomodasi hal ini.
Data/Message yang dikirimkan tanpa menggunakan key , akan dikalkulasi menggunakan key standard yaitu null, dan akan diassign menggunakan class DefaultPartitioner.
Tergantung dari versi Kafka Client nya, maka key standard == null , akan menggunakan skema Round-Robin atau Sticky Partitioner sebagai Default Partitionernya.