Advance Kafka Producer

Producer Retries

Ketika terjadi error saat producer mengirim pesan diharapkan ada retry mechanism.
Jumlah retry berdasarkan versi
Kafka ≤ 2.0 → default : 0
Kafka ≥ 2.1 → default 2147483647
Jeda dari retry satu ke retry berikutnya bisa di set di retry.cutoff.ms → default : 100ms
Jika jumlah retry lebih dari 0 maka harus di set juga delivery.timeout.ms
Jika lebih dari delivery.timeout.ms maka akan dianggap fail dan tidak akan mengirim ack

Idempotent Producer

Tanpa Idempotent

Ketika Producer mengirm pesan ke Broker, kemudian Broker melakukan commit, kemudian Broker akan mengirim ack ke Producer. Ketika terdapat network error saat pengiriman ack, maka data tersebut dianggap tidak tersimpan. Sehingga akan ada pengiriman ulang yang mengakibatkan pesan di commit 2 kali dan mengakibatkan duplikat.

Dengan Idempotent

Dengan mekanisme Idempotent, ketika ada network error maka akan ada pengecekan data agar tidak terjadi duplikat.

Best Practice Kafka Producer Config

Sejak kafka 3.0, konfigurasi producer secara default sudah safe. Untuk breakdownya sebagai berikut
acks = all / -1 → Memastikan data sudah sukses direplikasi sebelum ack diterima
min.insync.replicas = 2 → Memastikan ada 2 replica dalam broker ISR yang menerima data setelah ack
enable.idempotance = true → Memastikan tidak ada duplikasi karena masalah network
retries = 2147483647 → Retry sampe delivery.timeout.ms
delivery.timeout.ms= 120*1000 → Retry sampe 120 detik / 2 menit
max.in.flight.request.per.connections = 5 → Menggunakan performa maksimal untuk message ordering → berguna saat proses idempotent