enqueue/rdkafka
Kafka transport for Enqueue using the RdKafka (librdkafka) extension. Implements Queue Interop so you can produce and consume messages via Kafka with Enqueue tooling. Links to docs, support channels, and issue tracker.
config/queue.php by extending Enqueue\Client\Producer/Consumer and wrapping it in Laravel’s Queue facade.librdkafka (C extension) and PHP’s ext-kafka or rdkafka PECL extension. Docker/Kubernetes deployments simplify this via pre-built images (e.g., confluentinc/cp-kafka).kafka) are installed, version clashes may arise.AfterCommitMiddleware). Workarounds require custom middleware wrapping Enqueue’s Context.batch() method may not translate cleanly to Kafka’s producer->produceBatch() without custom logic.confluentinc/schema-registry).max.in.flight.requests.per.connection and retries must align with Laravel’s queue retry logic.database, redis) with Kafka via Enqueue\Dbal\DbalContext or custom QueueServiceProvider.OrderCreated) alongside Laravel’s bus or events.bitnami/kafka).redis) with Kafka for a non-critical workflow (e.g., notifications).Context to route messages between Kafka and other transports (e.g., Redis for local jobs, Kafka for distributed).$context = new Enqueue\Context\Context();
$context->addTransport(new Enqueue\Kafka\KafkaTransport($producer));
$context->addTransport(new Enqueue\Redis\RedisTransport($redis));
rdkafka.conf or KafkaTransport constructor.enqueue/doctrine, enqueue/horizon (limited), or enqueue/amqp for hybrid setups.librdkafka and PHP extensions (pecl install rdkafka).composer.json:
"enqueue/rdkafka": "^3.0",
"ext-kafka": "*"
config/queue.php:
'connections' => [
'kafka' => [
'driver' => 'kafka',
'hosts' => env('KAFKA_HOSTS', 'localhost:9092'),
'username' => env('KAFKA_USERNAME'),
'password' => env('KAFKA_PASSWORD'),
'topic' => env('KAFKA_TOPIC', 'laravel-jobs'),
],
],
app/Services/KafkaConsumer.php):
use Enqueue\Kafka\KafkaConsumer;
use Enqueue\Client\ProducerInterface;
class KafkaConsumerService {
public function __construct(ProducerInterface $producer) {
$consumer = new KafkaConsumer($producer, [
'group.id' => 'laravel-consumers',
]);
$consumer->consume(function ($message) {
dispatch(new HandleJob($message->getBody()));
});
}
}
dispatch(new ProcessPodcast)->onConnection('kafka');
$producer = app(ProducerInterface::class);
$producer->send(new Message($job->payload));
enqueue/rdkafka and librdkafka for CVE patches (e.g., Kafka’s CVE-2021-4612).ext-kafka) may require recompilation on OS upgrades..env) and config validation.message_id, partition, timestamp).How can I help you explore Laravel packages today?