Assigning consumers to a topic partition
Kafka clients allows you to implement your own partition assignment strategies for consumers.
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!
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) ]);
Dynamic Partition Discovery
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 .