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