Skip to content

Releases: karafka/waterdrop

v2.8.15

24 Nov 08:44
d176d07

Choose a tag to compare

  • [Enhancement] Skip statistics decoration and emission when no listeners are subscribed to statistics.emitted events to reduce overhead.
  • [Enhancement] Support late subscription to statistics.emitted by checking for listeners on each emission (every 5 seconds).

v2.8.14

14 Nov 10:19
cf06485

Choose a tag to compare

  • [Fix] Fatal error replacement not working without exact error unwind from the fatal envelope
  • [Testing] Add WaterDrop::Producer::Testing module for injecting and querying librdkafka fatal errors in tests.
  • [Testing] Add #trigger_test_fatal_error(error_code, reason) method to simulate fatal errors without requiring actual broker-side conditions.
  • [Testing] Add #fatal_error method to query current fatal error state for validation in tests.
  • [Testing] Add comprehensive test coverage for fatal error injection, reload behavior, and event instrumentation with real librdkafka errors.
  • [Change] Require karafka-rdkafka >= 0.23.1 due to error handling fixes.

v2.8.13

31 Oct 20:31
cd5475d

Choose a tag to compare

  • [Enhancement] Make fenced error skip-reload behavior configurable via new non_reloadable_errors setting (defaults to [:fenced] for backward compatibility).
  • [Enhancement] Add producer.reload event allowing config modification before reload to escape fencing loops (#706).
  • [Enhancement] Do not early initialize the new instance on reload.

v2.8.12

10 Oct 12:02
d94fc7c

Choose a tag to compare

  • [Enhancement] Introduce reload_on_idempotent_fatal_error to automatically reload librdkafka producer after fatal errors on idempotent (non-transactional) producers.
  • [Enhancement] Add configurable backoff and retry limits for fatal error recovery to prevent infinite reload loops:
    • wait_backoff_on_idempotent_fatal_error (default: 5000ms) - backoff before retrying after idempotent fatal error reload
    • max_attempts_on_idempotent_fatal_error (default: 5) - max reload attempts for idempotent fatal errors
    • wait_backoff_on_transaction_fatal_error (default: 1000ms) - backoff after transactional fatal error reload
    • max_attempts_on_transaction_fatal_error (default: 10) - max reload attempts for transactional fatal errors
  • [Enhancement] Ensure error.occurred is instrumented before idempotent fatal error reload for visibility.
  • [Enhancement] Automatically reset fatal error reload attempts counter on successful produce/transaction to allow recovery.
  • [Refactor] Extract idempotence-related logic into separate WaterDrop::Producer::Idempotence module.
  • [Refactor] Initialize @idempotent and @transactional instance variables in Producer#initialize for consistent Ruby object shapes optimization.
  • [Refactor] Add idempotent_reloadable? and idempotent_retryable? methods to encapsulate idempotent fatal error reload checks.
  • [Refactor] Add transactional_retryable? method to encapsulate transactional fatal error reload retry checks.
  • [Fix] Waterdrop config.kafka errors on frozen hash.
  • [Fix] Producer#transactional? method now correctly computes transactional status when @transactional is initialized to nil.

v2.8.11

27 Sep 20:03
299b509

Choose a tag to compare

  • [Enhancement] Provide fast-track for middleware-less flows (20% faster) for single message, 5000x faster for batches.
  • [Enhancement] Optimize middlewares application by around 20%.
  • [Change] Remove Ruby 3.1 according to the EOL schedule.
  • [Fix] Connection pool timeout parameter now accepts milliseconds instead of seconds for consistency with other WaterDrop timeouts. The default timeout has been changed from 5 seconds to 5000 milliseconds (equivalent value).

v2.8.10

25 Sep 08:29
b5d5fee

Choose a tag to compare

  • [Enhancement] Add #close alias for WaterDrop::ConnectionPool#shutdown to align with producer API for consistent interface across both individual producers and connection pools.
  • [Enhancement] Add WaterDrop.monitor method as the preferred alias for WaterDrop.instrumentation to align with per-producer API naming convention. The instrumentation method remains available as a deprecated alias for backward compatibility.

v2.8.9

24 Sep 08:36
0284518

Choose a tag to compare

  • [Enhancement] Add connection pool lifecycle events to global instrumentation for improved observability. Events include connection_pool.created, connection_pool.setup, connection_pool.shutdown, connection_pool.reload, and connection_pool.reloaded.
  • [Enhancement] Add default connection pool transactional direct API.

v2.8.8

23 Sep 13:56
8e5c450

Choose a tag to compare

  • [Feature] Add WaterDrop::ConnectionPool for efficient connection pooling using the proven connection_pool gem.
  • [Feature] Add WaterDrop.instrumentation class-level instrumentation for producer lifecycle events. This allows external libraries to subscribe to producer.created and producer.configured events without needing producer instance references, enabling middleware injection and configuration by libraries like Datadog tracing.
  • [Change] Remove Ruby 3.1 specs according to the EOL schedule.

v2.8.8.rc1

11 Sep 09:24
379ed12

Choose a tag to compare

v2.8.8.rc1 Pre-release
Pre-release
  • [Feature] Add WaterDrop::ConnectionPool for efficient connection pooling using the proven connection_pool gem.
  • [Feature] Add WaterDrop.instrumentation class-level instrumentation for producer lifecycle events. This allows external libraries to subscribe to producer.created and producer.configured events without needing producer instance references, enabling middleware injection and configuration by libraries like Datadog tracing.
  • [Change] Remove Ruby 3.1 specs according to the EOL schedule.

v2.8.7

02 Sep 10:49
58e6040

Choose a tag to compare

  • [Enhancement] Disable Nagle algorithm by default (improves latency / aligned with librdkafka)
  • [Change] Normalize how libs and dependencies are required (no functional change for the end user)