mateusjunges/laravel-kafka
Laravel Kafka makes it easy to produce and consume Kafka messages in Laravel with a clean, expressive API and improved testability. Build producers and consumers quickly, integrate with your app workflows, and avoid painful Kafka testing setups.
Kafka clients allows you to implement your own partition assignment strategies for consumers.
<x-sponsors.request-sponsor/>
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.
How can I help you explore Laravel packages today?