exoticca/kafka-transport
Kafka transport integration for Laravel/PHP applications, enabling messaging with Apache Kafka from your Laravel project.
max.poll.interval.ms without being evicted — a real win for slow handlers. The cost is that you no longer get rebalance-driven backpressure: you must own prefetch limits, in-flight concurrency, and shutdown drain behavior yourself.Adopt it when:
max.poll.interval.ms eviction and thundering rebalances. This release is explicitly aimed at that.Look elsewhere when:
php-rdkafka / Confluent's client directly.Due diligence before committing (updated):
SIGTERM / pod eviction: are offsets already committed and messages dropped, or is there a drain path?For executives: This is a small open-source Laravel package that lets our PHP services talk to Kafka using normal framework conventions instead of bespoke low-level code. The 0.2.5 release changes how we acknowledge messages: the service now records "I've got it" as soon as a message arrives, then steps out of the consumer group to do the work, and rejoins afterwards. The upside is operational: deploys and scaling no longer stall the whole group, and slow handlers no longer get kicked out mid-work — shorter processing stalls and less message lag during releases. The trade-off is a real one and needs a decision from us: if a handler fails after that acknowledgement, the message is lost rather than retried. So this release is a good fit for telemetry, audit, cache and notification pipelines, and a poor fit for anything financial or state-changing without an independent safety net. It is also still pre-1.0 with a small maintainer base, and this behavior change arrived in a patch release — so we should treat version bumps as reviewable events, not routine. Recommended path: pilot on one non-critical event pipeline with an explicitly at-most-once-tolerant workload, pin the exact version, wrap the transport behind our own interface, and keep a documented fallback to the underlying Kafka client.
For engineering: 0.2.5 changes the consumer lifecycle in two coupled moves: it commits the offset on receive, then leaves the consumer group before invoking the handler, and rejoins after. Consequences you need to reason about before adopting:
SIGTERM between commit and handler completion loses that record. Any handler that previously relied on redelivery for retry needs its own retry/compensation, or the package needs a config flag to restore commit-after-handle — verify which.max.poll.interval.ms evictions from slow handlers disappear, rebalance storms shrink further on top of the cooperative protocol from 0.2.2, and rolling deploys stop being a group-wide pause.php-rdkafka — or a revert to commit-after-handle — stays a contained change.How can I help you explore Laravel packages today?