# Consumer Groups vs Share Groups Apache Kafka supports two consumption models: **consumer groups** and **share groups**. Consumer groups are the traditional model, using exclusive partition assignment to deliver ordered streams of events to consumers. Share groups, introduced by [KIP-932](https://cwiki.apache.org/confluence/display/KAFKA/KIP-932:+Queues+for+Kafka), are a new model that enables cooperative, queue-like consumption where multiple consumers can process records from the same partition simultaneously. This page explains both models, compares their characteristics across key dimensions, and provides guidance on when to use each in Karafka-based applications. !!! note "Share Group Support in Karafka" Karafka's share group support is actively in progress. As librdkafka, the underlying C driver Karafka uses to communicate with Kafka, lands the share group protocol, Karafka is being extended to support share groups natively — including routing DSL integration, consumer APIs, and Web UI observability. The information below describes how share groups work at the Kafka level. Follow the progress in [GitHub issue #2953](https://github.com/karafka/karafka/issues/2953). ## Consumer Groups vs Share Groups / Consumer Groups Consumer groups are Kafka's original consumption model and the foundation of all current Karafka message processing. In a consumer group, each topic partition is assigned to exactly one consumer at a time. This exclusive assignment guarantees that records within a partition are processed in offset order by a single consumer.
| State | Description |
|---|---|
| Available | Record is eligible for delivery to a consumer. |
| Acquired | Record has been delivered to a consumer and is awaiting acknowledgment. A time-limited acquisition lock prevents redelivery during processing. |
| Acknowledged | Consumer has confirmed successful processing. |
| Archived | Terminal state. Record is no longer available for delivery. Reached after acknowledgment, explicit rejection, or exceeding the maximum delivery attempts. |
| Acknowledgment | Effect |
|---|---|
| ACCEPT | Record processed successfully. Transitions to Acknowledged. |
| RELEASE | Record cannot be processed right now (transient failure). Returns to Available for redelivery to any consumer. |
| REJECT | Record is permanently unprocessable (poison message). Transitions directly to Archived. |
| Dimension | Consumer Groups | Share Groups (KIP-932) |
|---|---|---|
| Partition assignment | Exclusive: each partition assigned to exactly one consumer | Cooperative: multiple consumers share the same partition |
| Max consumers | Limited to the number of partitions | Can exceed the number of partitions |
| Ordering guarantee | Strong ordering within each partition | No ordering guarantees across consumers |
| Progress tracking | Offset-based (batch-level commits) | Per-record acknowledgment (ACCEPT/RELEASE/REJECT) |
| Failure handling | Entire batch redelivered from last committed offset | Individual records released or rejected independently |
| Poison message handling | Requires application-level DLQ (Karafka provides built-in DLQ) | Broker-level delivery count limit with automatic archival |
| Rebalancing impact | Can pause all consumers in the group (mitigated by cooperative strategies) | Minimal disruption; no stop-the-world barrier |
| Delivery semantics | At-least-once or exactly-once | At-least-once only |
| Kafka version | All versions | Kafka 4.0+ (early access), 4.1 (preview), 4.2+ (GA) |
| Karafka support | Full support with extensive features | Under Development |
| Best suited for | Ordered event streams, stateful processing, event sourcing | Independent work items, job queues, elastic scaling |