Advance Kafka Consumer

Consumer Group and Partition Rebalance

Rebalance adalah perubahan relasi antar parition dan consumer
Perubahan relasi bisa terjadi ketika ada consumer baru yang masuk atau keluar
Perubahan relasi juga bisa terjadi ketika ada partition baru yang ditambahkan

Eager Rebalance

Semua consumer berhenti dan memutuskan relasi dengan partition. Terjadi stop the world.
Kemudian semua consumer dan partition berelasi kembali (termasuk yang baru).
Relasi antar consumer dan partition bisa saja berbeda.

Cooperative Rebalance

Tidak terjadi stop the world.
Hanya consumer yang berkebutuhan yang melepaskan relasi
Partisi akan berelasi dengan consumer yang baru

How to use Cooperative Rebalance

Kafka Consumer: partition.assignment.strategy
RangeAssignor (Eager)
RoundRobin (Eager)
StickyAssignor (Eager)
CooperativeStickyAssignor (Cooperative) → BEST PRACTICE
Default → RangeAssignor
Kafka Connect
Kafka Streams: Default → StreamPartitionAssignor

Static Group Membership

Secara default ketika consumer cabut, partition akan di reassign.
Jika consumer kembali maka dia akan memiliki member ID baru dan akan di assign ulang.
Jika kita melabeli consumer dengan group.instance.id maka dia akan membuatnya menjadi static.
Sehingga ketika consumer cabut dan belum melewati session.timeout.ms maka dia bisa kembali ke partitionnya tanpa rebalance

Consumer Auto Offset Commit

Offset akan di commit ketika .poll() di panggil dan auto.commit.interval.ms berakhir.
Perlu di make sure semua proses sukses sebelum .poll() dieksekusi, jika tidak atleast once scenario bisa gagal.
Kita juga harus disable auto commit dengan cara setenable.auto.commit sebagai false