Skip to content

Releases: pirumu/kacrab

v0.2.0 outage resilience

Choose a tag to compare

@pirumu pirumu released this 07 Jul 11:24
2277a07

Outage-resilience release. The producer and consumer now recover from prolonged and total broker outages instead of wedging permanently. Includes one breaking consumer API change (Consumer::assign now returns Result), so this is a minor version bump under the pre-1.0 convention.

⚠️ Breaking

  • Consumer::assign now returns Result. Subscription modes are mutually exclusive (Java SubscriptionState parity): mixing a manual assign with subscribe / subscribe_pattern returns ConsumerError::InvalidState; call unsubscribe to switch. An empty assign is treated as unsubscribe. (#45)

Added

  • Consumer::close_timeout(Duration) — close with a caller-chosen bound on the final commit-and-leave work. (#45)
  • Soak test harness (benches/src/bin/soak_bench.rs): sustained load + broker/consumer chaos with a per-partition continuity verdict. (#46)

Fixed — outage resilience

  • Producer no longer wedges permanently on a total-cluster outage longer than delivery.timeout.ms — the background sender loop parked on a transient metadata/wire Timeout and never woke once appends dried up; it now retries on the retry backoff. (#48)
  • Producer recovers from prolonged broker outages: requeued batches retry on a timer; the pump no longer wedges on an expired batch. (#47)
  • Consumer recovers from a coordinator-broker outage instead of livelocking (clears a stale coordinator on connection/timeout errors; bounded JoinGroup/SyncGroup). (#47)
  • Wire: fenced-broker handshake bounded by request.timeout.ms; broker reader task aborted on drop / consumer close so sockets don't linger. (#47)
  • init_transactions retries a still-loading transaction coordinator (COORDINATOR_LOAD_IN_PROGRESS) for the full max.block.ms instead of the produce retries count, matching Java. (#51)

Full changelog: CHANGELOG.md · crates.io: kacrab 0.2.0