Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Kafka Bundle Laravel Package

m6web/kafka-bundle

Symfony bundle for integrating Apache Kafka into PHP applications, with configurable producers and consumers, php-rdkafka support, and console commands for publishing and consuming messages.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Bottom line: reject for new work. m6web/kafka-bundle is an archived, deprecated Symfony bundle last released in 2017 with 8 stars and zero dependents. It is not a Laravel package and should not be adopted into a Laravel codebase, regardless of the Kafka requirement.

Architecture fit

  • It is a Symfony bundle, not a Laravel package. It integrates via Symfony's DI container, Bundle registration, EventDispatcher, and Console component — none of which map onto Laravel's service provider / facade / queue model.
  • Laravel's queue abstraction is job-centric (Queue, Worker, Job contracts). This bundle is service-centric: named producers and a long-running kafka:consumer command. There is no Queue driver, no ShouldQueue hook, no failed-job table integration.
  • Consequently, "integration" means writing an adapter layer from scratch (container bindings, config publishing, supervisor-managed worker commands, failure/retry semantics) — you inherit the maintenance burden without inheriting the abstraction.

Integration feasibility

  • Composer resolution is the first hard blocker: a 2017 Symfony bundle will constrain symfony/* to ~2.7|~3.0, which conflicts directly with Laravel 10/11 (Symfony 6/7 components). Installation requires forking and rewriting composer.json, then chasing transitive conflicts through its Kafka client dependency.
  • PHP version: the package predates PHP 7.1+ typing conventions. Expect PHP 8.x incompatibilities (each(), dynamic properties, removed mcrypt/create_function, missing return types) — a rewrite, not a patch.
  • The underlying client (pure-PHP nmred/kafka-php-era) speaks the Kafka 0.8/0.9 protocol: no idempotent producer, no transactions, no incremental cooperative rebalancing, limited/no SASL-SCRAM or TLS config. That is a data-integrity gap on modern brokers, not just a feature gap.

Technical risk

  • Supply chain: archived repo + abandoned transitive dependencies = no CVE response path. If your platform runs a vulnerability scanner, this is a permanent finding you must own.
  • Protocol drift: modern brokers (3.x, KRaft-only 4.x) deprecate the client semantics this bundle assumes; message format v2 and ZooKeeper removal create latency and, in some configurations, correctness issues.
  • Security posture: managed Kafka offerings (MSK, Confluent Cloud, Aiven) mandate TLS + SASL. The old client's support here is weak to nonexistent — likely a hard stop at the infrastructure review.
  • Bus factor: zero dependents and 8 stars means no community triage, no Stack Overflow corpus, no upstream fixes. Every bug becomes internal R&D.

Key questions for the requesting team

  1. What is the actual requirement — event streaming, or Laravel job offloading? If it's the latter, the native queue with Redis/SQS is cheaper.
  2. Which broker version and auth mechanism must we target (TLS, SASL/SCRAM, IAM)? This likely disqualifies the package outright.
  3. Is there an existing production deployment of this bundle, or is this greenfield? (Legacy parity is the only scenario where a fork is defensible.)
  4. What is the PHP/Laravel upgrade roadmap? If PHP 8.2+ is planned within 12 months, this package is a blocker on that roadmap.
  5. Who owns the fork if we adopt it — named engineer, named team, and what's the SLA for patching?

Integration Approach

Stack fit

Dimension Assessment
Framework Symfony bundle → Laravel requires an adapter; no first-party fit
HTTP/queue layer Does not use Laravel Queue/Job contracts; no failed-job, retry, or queue:work compatibility
PHP runtime 2017-era code; incompatible with PHP 8.x without a fork
Auth/transport Weak TLS/SASL support; blocks managed Kafka
Observability No metrics, health checks, or structured logging hooks

Recommended path: do not migrate, replace. Substitute a maintained option and treat the bundle as a design reference only.

  • Primary candidate: ext-rdkafka (librdkafka) via mateusjunges/laravel-kafka — real Laravel service provider, config publishing, consumer commands, modern protocol and SASL/TLS support.
  • Alternative: enqueue/rdkafka if you need a transport-agnostic abstraction (RabbitMQ + Kafka behind one interface).
  • Alternative: isolate Kafka in a small Symfony service if the organization is already Symfony-native, and let Laravel talk over HTTP/gRPC. Avoids a second framework dependency inside Laravel.

Migration path (if a legacy deployment exists and must be retired)

  1. Inventory producers, topics, consumer groups, and offset-commit semantics currently in use.
  2. Fork-and-freeze the existing bundle only to keep the legacy service alive — pin the commit, no feature work, document it as frozen.
  3. Build the replacement producer path first (lowest risk, easiest to shadow-verify).
  4. Dual-write to the same topics from old and new producers; diff payloads and ordering for a defined window.
  5. Migrate consumers group by group, oldest/lowest-traffic first, using a new consumer group ID so offsets are independent and rollback is trivial.
  6. Decommission the fork once all groups are cut over and the shadow window closes.

Compatibility and sequencing

  • Sequence framework/runtime upgrades before any Kafka work if the fork is staying — otherwise you're blocked on PHP 8 support you'll have to write yourself.
  • Do not attempt to run the Symfony bundle and a Laravel-native package in the same process; container collisions and duplicate symfony/* versions will surface at autoload time.
  • Budget an explicit spike (2–3 days, timeboxed): install the fork on the target PHP version, confirm broker handshake with production auth, and produce a go/no-go. Expect a no-go — the spike exists to make that finding defensible rather than asserted.

Operational Impact

Maintenance

  • The package is archived: every future fix is yours. Realistically this is a standing 10–20% of one engineer to hold a fork current against PHP upgrades and broker changes — spend with no product value.
  • Dependency rot compounds: abandoned transitive packages will accumulate advisories you cannot patch upstream.
  • Documentation is 2017-era; onboarding relies on reading source, not docs.

Support

  • No maintainer, no issue triage, no security contact. Your incident process must own the "is this our code or the library" question alone, which lengthens every Kafka-related postmortem.
  • If Kafka is on a critical path (payments, order events), this is an unacceptable support posture for a tier-1 dependency.

Scaling

  • The consumer command is a long-running blocking loop with manual concurrency — you scale by running more processes against more partitions, not by configuration.
  • No backpressure handling, no batch-tuning guidance, no dead-letter queue support. DLQ and poison-message handling must be built by hand.
  • Producer path lacks idempotence and batching controls tuned for modern brokers, so throughput and duplicate-safety guarantees are whatever you implement around it.

Failure modes to expect

  • Silent loss: producer flush/shutdown semantics in old clients can drop buffered messages on process exit; no delivery reports.
  • Duplicate or skipped messages: auto-commit offsets without at-least-once guarantees — replays and gaps are both plausible.
  • Consumer traps: rebalance storms without cooperative rebalancing, offset commits on partially processed batches, memory growth in long-lived workers.
  • Auth failures at deploy time: TLS/SASL gaps surface only against the managed broker, i.e., in staging or production, not locally.
  • Upgrade cliff: PHP or Laravel upgrades block indefinitely until the fork is modernized.

Ramp-up

  • High. Estimate 2–4 weeks for an engineer unfamiliar with Kafka to become productive, and that time is spent on a dependency you intend to discard.
  • Contrast with a maintained Laravel-native package: 2–3 days to a working producer/consumer, with documentation, community answers, and a real security response path.

Recommendation: decline adoption. Record the decision with the broker-version, auth-mechanism, and PHP-version evidence from the spike, then direct the team to ext-rdkafka + a maintained Laravel package. If the requesting team's real need is asynchronous job processing rather than event streaming, redirect them to Laravel's native queue — the cheapest and lowest-risk outcome of all.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle