Assigning consumers to a topic partition

Kafka clients allows you to implement your own partition assignment strategies for consumers.

Sponsorship

Support Laravel Kafka by sponsoring me!

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 Want to hide this message? Sponsor at any tier of $10/month or more!

If you have a topic with multiple consumers and want to assign a consumer to a specific partition topic, you can use the assignPartitions method, available on the ConsumerBuilder instance:

$partition = 1; // The partition number you want to assign

$consumer = \Junges\Kafka\Facades\Kafka::consumer()
    ->assignPartitions([
        new \RdKafka\TopicPartition('your-topic-name', $partition)
    ]);

The assignPartitions method accepts an array of \RdKafka\TopicPartition objects. You can assign multiple partitions to the same consumer by adding more entries to the assignPartitions parameter:

$consumer = \Junges\Kafka\Facades\Kafka::consumer()
    ->assignPartitions([
        new \RdKafka\TopicPartition('your-topic-name', 1),
        new \RdKafka\TopicPartition('your-topic-name', 2),
        new \RdKafka\TopicPartition('your-topic-name', 3)
    ]);

If you don't know the partition numbers in advance (which is common when using consumer groups), you can use the partition discovery features:

$consumer = \Junges\Kafka\Facades\Kafka::consumer(['your-topic-name'], 'your-group')
    ->withPartitionAssignmentCallback(function ($partitions) {
        echo "Assigned " . count($partitions) . " partitions\n";
        
        foreach ($partitions as $partition) {
            echo "Partition: {$partition->getPartition()}\n";
        }
    })
    ->withHandler(function ($message) {
        // Handle message
    });

For more advanced partition discovery and dynamic offset assignment, see the Partition Discovery documentation .