Consumer groups | Laravel Kafka

 [ Laravel Kafka ](/)

     Search

 ⌘K

  [   Login with GitHub ](https://laravelkafka.com/oauth/github/redirect)

    Docs for version          selected

 v2.11

 v2.10

 v2.9

 v2.8

 v1.13

- - [ Introduction ](/docs/v2.11/introduction)
    - [ Requirements ](/docs/v2.11/requirements)
    - [ Installation and Setup ](/docs/v2.11/installation-and-setup)
    - [ Questions and issues ](/docs/v2.11/questions-and-issues)
    - [ Changelog ](/docs/v2.11/changelog)
    - [ Upgrade guide ](/docs/v2.11/upgrade-guide)
    - [ Example docker-compose file ](/docs/v2.11/example-docker-compose)
- Producing messages
    ------------------

    - [ Producing messages ](/docs/v2.11/producing-messages/producing-messages)
    - [ Configuring your kafka producer ](/docs/v2.11/producing-messages/configuring-producers)
    - [ Configuring message payload ](/docs/v2.11/producing-messages/configuring-message-payload)
    - [ Custom serializers ](/docs/v2.11/producing-messages/custom-serializers)
    - [ Publishing to kafka ](/docs/v2.11/producing-messages/publishing-to-kafka)
- Consuming messages
    ------------------

    - [ Creating a kafka consumer ](/docs/v2.11/consuming-messages/creating-consumer)
    - [ Subscribing to kafka topics ](/docs/v2.11/consuming-messages/subscribing-to-kafka-topics)
    - [ Using regex to subscribe to kafka topics ](/docs/v2.11/consuming-messages/using-regex-to-subscribe-to-kafka-topics)
    - [ Assigning consumers to a topic partition ](/docs/v2.11/consuming-messages/assigning-partitions)
    - [ Consuming messages from specific offsets ](/docs/v2.11/consuming-messages/consuming-from-specific-offsets)
    - [ Consumer groups ](/docs/v2.11/consuming-messages/consumer-groups)
    - [ Partition Discovery and Dynamic Assignment ](/docs/v2.11/consuming-messages/partition-discovery)
    - [ Message handlers ](/docs/v2.11/consuming-messages/message-handlers)
    - [ Configuring consumer options ](/docs/v2.11/consuming-messages/configuring-consumer-options)
    - [ Custom deserializers ](/docs/v2.11/consuming-messages/custom-deserializers)
    - [ Consuming messages ](/docs/v2.11/consuming-messages/consuming-messages)
    - [ Class structure ](/docs/v2.11/consuming-messages/class-structure)
    - [ Queueable handlers ](/docs/v2.11/consuming-messages/queueable-handlers)
- Advanced usage
    --------------

    - [ Replacing the default serializer/deserializer ](/docs/v2.11/advanced-usage/replacing-default-serializer)
    - [ Graceful shutdown ](/docs/v2.11/advanced-usage/graceful-shutdown)
    - [ SASL Authentication ](/docs/v2.11/advanced-usage/sasl-authentication)
    - [ Custom Committers ](/docs/v2.11/advanced-usage/custom-committers)
    - [ Manual Commit ](/docs/v2.11/advanced-usage/manual-commit)
    - [ Middlewares ](/docs/v2.11/advanced-usage/middlewares)
    - [ Stop consumer after last messages ](/docs/v2.11/advanced-usage/stop-consumer-after-last-message)
    - [ Stop consumer on demand ](/docs/v2.11/advanced-usage/stopping-a-consumer)
    - [ Writing custom loggers ](/docs/v2.11/advanced-usage/custom-loggers)
    - [ Before and after callbacks ](/docs/v2.11/advanced-usage/before-callbacks)
    - [ Setting global configurations ](/docs/v2.11/advanced-usage/setting-global-configuration)
    - [ Sending multiple messages with the same producer ](/docs/v2.11/advanced-usage/sending-multiple-messages-with-the-same-producer)
- Testing
    -------

    - [ Kafka fake ](/docs/v2.11/testing/fake)
    - [ Assert Published ](/docs/v2.11/testing/assert-published)
    - [ Assert published On ](/docs/v2.11/testing/assert-published-on)
    - [ Assert nothing published ](/docs/v2.11/testing/assert-nothing-published)
    - [ Assert published times ](/docs/v2.11/testing/assert-published-times)
    - [ Assert published on times ](/docs/v2.11/testing/assert-published-on-times)
    - [ Mocking your kafka consumer ](/docs/v2.11/testing/mocking-your-kafka-consumer)

  Consumer groups
=================

Kafka consumers belonging to the same consumer group share a group id. The consumers in a group divides the topic partitions as fairly amongst themselves as possible by establishing that each partition is only consumed by a single consumer from the group.

Support Laravel Kafka by sponsoring me!

Do you find Laravel Kafka valuable and wanna support its development?

Laravel Kafka is free and Open Source software, built to empower developers like you. Your support helps maintain and enhance the project. If you find it valuable, please consider sponsoring me on GitHub. Every contribution makes a difference and keeps the development going strong! Thank you!

   [ Become a Sponsor ](https://github.com/sponsors/mateusjunges)

 Want to hide this message? Sponsor at any tier of $10/month or more!

To attach your consumer to a consumer group, you can use the method `withConsumerGroupId` to specify the consumer group id:

         ```
use Junges\Kafka\Facades\Kafka;

$consumer = Kafka::consumer()->withConsumerGroupId('foo');
```

### [](#content-kafka-consumer-group-rebalancing "Permalink")Kafka Consumer Group Rebalancing

Watch how Kafka automatically redistributes partitions among consumers when the consumer group changes. Add or remove consumers to see the rebalancing process in action.

     Assignment Strategy   Range Round Robin Sticky Assigns partitions in ranges to consumers for balanced distribution

     Partitions: 6   3 6 9 12

### [](#content-partition-assignment-strategies "Permalink")Partition Assignment Strategies

You can configure how Kafka assigns partitions to consumers in your consumer group by specifying a rebalance strategy:

         ```
use Junges\Kafka\Facades\Kafka;
use Junges\Kafka\Config\RebalanceStrategy;

$consumer = Kafka::consumer()
    ->withConsumerGroupId('my-group')
    ->withRebalanceStrategy(RebalanceStrategy::ROUND_ROBIN);
```

#### [](#content-available-strategies "Permalink")Available Strategies

- **Range** (`RebalanceStrategy::RANGE`): Default strategy. Assigns partitions on a per-topic basis by dividing partitions evenly among consumers.
- **Round Robin** (`RebalanceStrategy::ROUND_ROBIN`): Distributes partitions evenly across all consumers in a round-robin fashion.
- **Sticky** (`RebalanceStrategy::STICKY`): Maintains balanced assignments while preserving existing assignments during rebalancing.
- **Cooperative Sticky** (`RebalanceStrategy::COOPERATIVE_STICKY`): Same as sticky but allows cooperative rebalancing for reduced downtime.

#### [](#content-examples "Permalink")Examples

         ```
// Using Range strategy (default)
$consumer = Kafka::consumer()
    ->withConsumerGroupId('my-group')
    ->withRebalanceStrategy(RebalanceStrategy::RANGE);

// Using Round Robin for better distribution
$consumer = Kafka::consumer()
    ->withConsumerGroupId('my-group')
    ->withRebalanceStrategy(RebalanceStrategy::ROUND_ROBIN);

// Using Sticky for minimal disruption during rebalancing
$consumer = Kafka::consumer()
    ->withConsumerGroupId('my-group')
    ->withRebalanceStrategy(RebalanceStrategy::STICKY);

// Using Cooperative Sticky for minimal downtime
$consumer = Kafka::consumer()
    ->withConsumerGroupId('my-group')
    ->withRebalanceStrategy(RebalanceStrategy::COOPERATIVE_STICKY);
```

You can also pass strategy names as strings:

         ```
$consumer = Kafka::consumer()
    ->withConsumerGroupId('my-group')
    ->withRebalanceStrategy('sticky');
```

Or set the strategy using raw options:

         ```
$consumer = Kafka::consumer()
    ->withConsumerGroupId('my-group')
    ->withOption('partition.assignment.strategy', 'sticky');
```

 Previous  [ Consuming messages from specific offsets    ](https://laravelkafka.com/docs/v2.11/consuming-messages/consuming-from-specific-offsets)

 Next  [ Partition Discovery and Dynamic Assignment    ](https://laravelkafka.com/docs/v2.11/consuming-messages/partition-discovery)

Sponsors

 [ version="1.0" encoding="UTF-8"?       EasyCal ](https://easycal.app/)

 [       Search  ⌘ K   ](https://typesense.org/)
