A Laravel package for integrating Apache Kafka as a queue driver in Laravel applications.
- Custom Kafka Queue Driver for Laravel
- Push & Consume Jobs via Kafka
- Supports Laravel Queues with
queue:work
integration - Lightweight & Efficient for event-driven architecture
- Microservice-Friendly for decoupled applications
- Compatible with Laravel 11 and 12
"require": {
"mk/kafka-laravel-queue": "dev-main",
"php": "^8.2"
},
"autoload": {
"psr-4": {
"Kafka\": "vendor/mk/kafka-laravel-queue/src/"
}
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/MalobaKombo/kafka-laravel-queue.git"
}
]
composer update mk/kafka-laravel-queue
// ./src/bootstrap/providers.php
return [
Kafka\KafkaServiceProvider::class,
];
KAFKA_QUEUE=default_topic
KAFKA_ENVIRONMENT=internal
BOOTSTRAP_SERVERS=kafka-1:9092,kafka-2:9092
SECURITY_PROTOCOL=PLAINTEXT
SASL_MECHANISMS=PLAIN
KAFKA_SASL_USERNAME=myuser
KAFKA_SASL_PASSWORD=mypassword
GROUP_ID=default_group
QUEUE_CONNECTION=kafka
'connections' => [
'kafka' => [
'driver' => 'kafka',
'kafka_environments' => env('KAFKA_ENVIRONMENT', 'internal'),
'queue' => env('KAFKA_QUEUE'),
'bootstrap_servers' => env('BOOTSTRAP_SERVERS'),
'security_protocol' => env('SECURITY_PROTOCOL'),
'sasl_mechanisms' => env('SASL_MECHANISMS'),
'sasl_username' => env('KAFKA_SASL_USERNAME'),
'sasl_password' => env('KAFKA_SASL_PASSWORD'),
'group_id' => env('GROUP_ID'),
],
],
use App\Jobs\SendMessageJob;
SendMessageJob::dispatch(['message' => 'Hello from Laravel Kafka!'])
->onQueue('default_topic');
php artisan queue:work --queue=default_topic
Kafka uses the job class namespace to resolve the consumer job.
If the consumer cannot find a matching FQCN, youβll see:
β Received invalid job data!
- Producer and Consumer jobs must use the same namespace and class name.
// File: app/Jobs/Web/Verification/VerifySchoolJob.php
namespace App\Jobs\Web\Verification;
use Illuminate\Contracts\Queue\ShouldQueue;
class VerifySchoolJob implements ShouldQueue {
public array $data;
public function __construct(array $data) {
$this->data = $data;
}
public function handle(): void {
// This will NOT run in the producer service
}
}
// File: app/Jobs/Web/Verification/VerifySchoolJob.php
namespace App\Jobs\Web\Verification;
use Illuminate\Contracts\Queue\ShouldQueue;
class VerifySchoolJob implements ShouldQueue {
public array $data;
public function __construct(array $data) {
$this->data = $data;
}
public function handle(): void {
// β
Create DB, trigger events, mark as verified, etc.
}
}
// File: app/Jobs/Web/Notifications/SendNotificationJob.php
namespace App\Jobs\Web\Notifications;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendNotificationJob implements ShouldQueue {
public array $data;
public function __construct(array $data) {
$this->data = $data;
}
public function handle(): void {}
}
// File: app/Jobs/Web/Notifications/SendNotificationJob.php
namespace App\Jobs\Web\Notifications;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendNotificationJob implements ShouldQueue {
public array $data;
public function __construct(array $data) {
$this->data = $data;
}
public function handle(): void {
// π Send SMS, email or push notification
}
}
- Use identical namespaces and class names for Kafka jobs across microservices.
- Ensure data is always passed as an array.
- Register consumers with
queue:work
using the correct topic.
php artisan queue:work --queue=default_topic
Youβre now Kafka-ready in Laravel! π