d1oxyde/kafka-bundle
Laravel-friendly Kafka integration bundle providing configuration, producer/consumer helpers, and streamlined setup for working with Apache Kafka in PHP applications. Suitable for event-driven apps needing message publishing and processing.
d1oxyde/kafka-bundle enables Kafka integration in Symfony, making it a strong fit for architectures requiring asynchronous event processing, microservices communication, or real-time data pipelines. It abstracts Kafka’s complexity behind Symfony’s dependency injection and configuration, aligning with modern PHP/Symfony ecosystems.ext-rdkafka PHP extension (a C extension), which may require:
enqueue/rdkafka (v0.10.3), which may introduce additional dependencies or version conflicts if not already in use.| Risk Area | Severity | Mitigation Strategy |
|---|---|---|
| Extension Compatibility | High | Test ext-rdkafka compatibility early; provide fallback (e.g., Docker images with pre-built extensions). |
| Bundle Maturity | Medium | Low stars/dependents suggest unproven stability. Plan for forks or maintenance gaps. |
| Version Lock-In | Medium | Pin enqueue/rdkafka and rdkafka versions strictly to avoid breaking changes. |
| Symfony Version Support | Low | Bundle targets Symfony 4/5; ensure alignment with your LTS version. |
| Error Handling | Medium | Kafka’s eventual consistency may require custom retry/logic layers. |
symfony/messenger with a Kafka transport (e.g., php-kafka/kafka) or a higher-level library like react/kafka?enqueue/rdkafka, but lose bundle benefits (e.g., config management, Symfony integration).bitnami/kafka).config/packages/kafka.yaml:
kafka:
clients:
default:
hosts: ['kafka:9092']
client_id: 'symfony-app'
consumers:
order_events:
topics: ['orders']
group_id: 'symfony-consumers'
auto.offset.reset (e.g., earliest for reprocessing).composer require symfony/flex if missing.enqueue/rdkafka or other Kafka libraries.composer require d1oxyde/kafka-bundle
kafka.yaml.use D1oxyde\KafkaBundle\Producer\ProducerInterface;
class OrderService {
public function __construct(private ProducerInterface $producer) {}
public function createOrder(): void {
$this->producer->send('orders', ['event' => 'order_created']);
}
}
enqueue workers:
php bin/console kafka:consumer consume order_events
php-kafka/mock).enqueue/rdkafka for breaking changes (e.g., RDKafka C API updates).kafka-topics.sh).kafka-consumer-groups.sh.kafka:
clients:
default:
debug: '%kernel.debug%'
kafka-consumer-groups to inspect offsets.enqueue/rdkafka GitHub issues.partition.assignor config:
kafka:
consumers:
order_events:
partition_assignor: 'range'
batch.size and linger.ms for producer throughput.max.poll.records for high-volume topics.| Failure Scenario | Impact | Mitigation | |---------------------------------|--------------------------------
How can I help you explore Laravel packages today?