Skip to content

Next-Gen Consumer Group (KIP-848)

KIP-848 is Kafka's next-generation consumer group protocol. It moves partition assignment from the client to the server and replaces the classic protocol's stop-the-world rebalance with incremental heartbeats. RobustMQ supports it: clients enable it by setting group.protocol=consumer. For the classic protocol see Consumer Group.

Enabling

ConfigValueEffect
group.protocolconsumerUse the KIP-848 protocol
group.protocolclassic (default)Use the classic protocol

How It Works

RobustMQ Kafka KIP-848

The core is a single ConsumerGroupHeartbeat that replaces the classic JoinGroup / SyncGroup / Heartbeat trio:

  1. Report subscription — the consumer's heartbeat carries the list of topics it subscribes to.
  2. Server-side assignment — the broker (coordinator) computes the target assignment and returns it in the heartbeat response. This is the biggest difference from the classic protocol.
  3. Incremental reconcile — the consumer moves toward the target assignment by revoking then adding partitions incrementally, with no group-wide pause.
  4. Steady-state heartbeat — once the target assignment is reached, heartbeats carry an epoch to acknowledge it and enter steady state.

Classic vs KIP-848

AspectClassicKIP-848
Assignment computed byClient leaderServer (broker)
Protocol messagesJoinGroup + SyncGroup + HeartbeatSingle ConsumerGroupHeartbeat
Rebalance styleEager (stop-the-world: revoke all, then reassign)Incremental reconcile (gradual migration)
Assignor locationClientServer
Enabled viaDefaultgroup.protocol=consumer

Both protocols share the same committed offsets and the same coordinator (the Raft leader), so offset management is identical (see Offset Management).

Limits

ItemStatus
group.protocol=consumerSupported
Server-side assignment + incremental heartbeatSupported
subscribed_topic_regex (regex subscription)Not supported
🎉 既然都登录了 GitHub,不如顺手给我们点个 Star 吧!⭐ 你的支持是我们最大的动力 🚀