KIP-848, generally available since Kafka 4.0 129 , moves assignment into the broker. Members send heartbeats (every 5 s by default, set by the broker); the coordinator computes a target assignment with a server-side assignor (uniform by default) and moves each member toward it independently, with no group-wide barrier. It is opt-in (group.protocol=consumer) in Java and in librdkafka, production-ready there since confluent-kafka 2.12.0 (October 2025); Kafka 4.3 logs a recommendation to switch when a consumer uses the classic protocol (KIP-1274).
0.0s A assigned [0, 1, 2] 10.2s A revoked [2] 10.2s A assigned [] 11.2s B assigned [2] ...
Under rebalance_demo.py consumer, A gave up only partition 2 and kept consuming 0 and 1. The move waited for the heartbeat cycle, about five seconds, a fair price for never stopping the group. Session timeouts, heartbeat intervals and assignors are broker or group settings here; custom client-side assignors are not supported.