Skip to content

Conversation

Drowze
Copy link
Contributor

@Drowze Drowze commented Aug 29, 2025

What does this PR do?

Adds support for WaterDrop (i.e. Karafka producers). Fixes #4868

Motivation:
We use Datadog and Karafka. For a long time we've been using a custom patch to have some distributed tracing support, but since @nvh0412 got the ball rolling by adding traces for Karafka consumers, I've decided to continue the work there and also add proper tracing support for Karafka producers.
Hope we can get an ever-improving good support for Karafka in Datadog! 😄

(Thanks @mensfeld for the amazing Kafka framework!)

Change log entry

Additional Notes:
Although WaterDrop is part of the Karafka framework, it can be used in isolation (which is handy if the application doesn't need any message consumer).

How to test the change?
See:

@Drowze Drowze requested review from a team as code owners August 29, 2025 18:59
@github-actions github-actions bot added integrations Involves tracing integrations tracing labels Aug 29, 2025
@Drowze Drowze force-pushed the add-waterdrop-integration branch from 8903281 to 47f6f12 Compare August 29, 2025 19:01
Comment on lines 35 to 36
topics = payload[:messages].map { |m| m[:topic] }.uniq
span.set_tag(Contrib::Ext::Messaging::TAG_DESTINATION, topics)
Copy link
Contributor Author

@Drowze Drowze Aug 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A bit unsure about TAG_DESTINATION... this tag can either be an array of kafka topics (when produce_many_... is called) or a simple string (when generating a single message at a time)

Same goes for the TAG_PARTITION - can be either an array or a number, depending on whether we call batch produce methods or not

@Drowze Drowze force-pushed the add-waterdrop-integration branch from 30f2cb9 to 6b654d4 Compare September 1, 2025 12:23
Comment on lines 65 to 68
def inject(trace_digest, message)
message[:headers] ||= {}
WaterDrop.inject(trace_digest, message[:headers])
end
Copy link
Contributor Author

@Drowze Drowze Sep 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am a bit on the fence about using a custom the custom monitor to inject the trace context 🤔
WaterDrop producers do have a middleware interface... They just don't have a way to automatically add some middleware to all new instances.

I suppose an alternative approach might be patching the WaterDrop::Producer#setup method, so a middleware is automatically added (if it wasn't already) right after configuring a producer. E.g.:

module Datadog
  module Tracing
    module Contrib
      module WaterDrop
        class Middleware
          def self.call(message)
            message[:headers] ||= {}
            WaterDrop.inject(Tracing.active_trace&.to_digest, message[:headers])
            message
          end
        end

        module ProducerPatch
          def setup(&block)
            super.tap do
              current_middlewares = middleware.instance_variable_get(:@steps)
              if current_middlewares.none? { |middleware| middleware == Middleware }
                middleware.append(Middleware)
              end
            end
          end
        end

        module Patcher
          def patch
            # ...
            ::WaterDrop::Producer.prepend(ProducerPatch)
          end
        end
      end
    end
  end
end

def patch
require_relative 'monitor'

::WaterDrop::Instrumentation::Monitor.prepend(Monitor)
Copy link
Contributor Author

@Drowze Drowze Sep 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One thing to keep in mind: the WaterDrop monitor is configurable (just like Karafka's). That means that this would bypass our monitor patch:

::WaterDrop::Producer.new do |c|
  c.kafka = { "bootstrap.servers": "127.0.0.1:9092" }
  c.monitor = ActiveSupport::Notifications
end

As this is also the case in Karafka, the karafka integration suffers from the same problem (see here)

Perhaps one approach that we can take is patching the WaterDrop::Producer#setup method, so we replace the monitor right after configuring a producer (or the Karafka::App) (and also we could trigger a warning if the user had changed the monitor from the default one)

@marcotc
Copy link
Member

marcotc commented Sep 2, 2025

Thank you, @Drowze! We'll take a look in the next few days.

@mensfeld
Copy link

mensfeld commented Sep 4, 2025

I think we oculd tackle this by adding a process wide monitor that would react on builder events.

@mensfeld
Copy link

mensfeld commented Sep 4, 2025

Yes I will expose porper instrumentation events on the WaterDrop layer for you to use.

Something like:

WaterDrop.instrumentation.subscribe('producer.created') do |event|
  event.producer.middleware...
end

@mensfeld
Copy link

mensfeld commented Sep 4, 2025

They just don't have a way to automatically add some middleware to all new instances.

tadam karafka/waterdrop#680

@Drowze
Copy link
Contributor Author

Drowze commented Sep 4, 2025

Thanks a lot for this change @mensfeld 😄 I'll make use of this new notification asap!

In order to support versions prior to your PR though I suppose we'll end up with something like this (as we've discussed already - but just to keep Datadog folks on the same page):

class Integration
  MINIMUM_CLASS_LEVEL_INSTRUMENTATION_VERSION = Gem::Version.new('2.8.8')

  def self.supports_class_level_instrumentation?
    version >= MINIMUM_CLASS_LEVEL_INSTRUMENTATION_VERSION
  end
end

module Patcher
  def patch
    if Integration.supports_class_level_instrumentation?
      require_relative 'middleware'
      ::WaterDrop.instrumentation.subscribe('producer.configured') do |event|
        producer = event[:producer]
        producer.config.middleware.append(Middleware)
      end
    else
      require_relative 'monitor'
      ::WaterDrop::Instrumentation::Monitor.prepend(Monitor)
    end
  end
end

By the way I suppose we can do something similar for the Karafka integration (but I'll leave this for separate PR):

def patch
  ::Karafka.monitor.subscribe("app.initialized") do
    if Karafka::App.config.monitor.is_a?(Module) # e.g.: ActiveSupport::Notifications or any other class/module
      Karafka::App.config.monitor.prepend(Monitor)
    else # e.g.: a monitor instance from karafka-core
      Karafka::App.config.monitor.singleton_class.prepend(Monitor)
    end
  end
end

@mensfeld
Copy link

mensfeld commented Sep 5, 2025

Np. I should craft the releases with this in the upcoming days. Need to make sure docs are aligned before that.

@marcotc
Copy link
Member

marcotc commented Sep 10, 2025

👋 @Drowze, with the super fast improvements that @mensfeld did (thank you so much!), do your use cases need to instrument older versions of WaterDrop?
In other words, is it reasonable to assume that upgrading WaterDrop is not a meaningful hurdle? I see that WaterDrop v2 has been around since 2021, so I'd assume the vast majority of users are on the v2 series, thus the upgrade would be non-breaking.

I'm trying to save your time, and keep only the nice new instrumentation, using the newly exposed API, if possible.

@Drowze
Copy link
Contributor Author

Drowze commented Sep 11, 2025

Hey @marcotc! Thanks for reaching :)

While I agree it'd be nice to just stick with the new API (which was not even released yet), I'm not sure about breaking compatibility with all past Waterdrop versions 😕

One thing to keep in mind: the Karafka ecosystem does not follow strict semantic versioning. Instead it usually employs breaking change in minor versions and reserve major versions major architectural changes. For context, see the Karafka docs on Versions Lifecycle and EOL

Personally I don't see a good reason for not supporting any Waterdrop version before @mensfeld's changes.... I imagine other Karafka users might get confused and frustrated when e.g.: they try to use dd-trace-rb's karafka integration just to find out that consumers tracing works but producer tracing doesn't because they are using a month old gem versions.
Also I'd like to note that dd-trace-rb supports karafka v2.3.0+, which was released on Jan/2024, so supporting only the latest waterdrop version is a bit of weird decision when we consider "Karafka" as a framework.

While I'd prefer to keep the support of karafka/waterdrop versions more or less concise, I understand if Datadog team would prefer to only support those versions with a more supported API to instrument on. Please let me know your thoughts and I'll update the PR 😃 !

That being said... Out of curiosity I just compiled the waterdrop requirement on all Karafka releases (see below). Nothing too interesting there, but might be a good reference.

Waterdrop requirement on all karafka git tags
# script used for compiling this list (using fish)
for karafka_version in (git tag | sort -V)
    echo "$karafka_version" | string match -rq '(?<major>\d+)\.(?<minor>\d+)\.(?<revision>\d+)(?:\.(?<prerelease>[0-9a-zA-Z]+))?'
    set -l waterdrop_version (git show "$karafka_version:karafka.gemspec" | grep 'waterdrop' | xargs)
    echo "$karafka_version | $waterdrop_version"
end
0.5.0.3 | waterdrop=spec.add_dependency waterdrop, ~> 0.3.2.4
1.0.1 | waterdrop=spec.add_dependency waterdrop, ~> 0.4
1.2.11 | waterdrop=spec.add_dependency waterdrop, ~> 1.2.4
1.2.12 | waterdrop=spec.add_dependency waterdrop, ~> 1.2.4
1.2.13 | waterdrop=spec.add_dependency waterdrop, ~> 1.2.4
v1.0.1 | waterdrop=spec.add_dependency waterdrop, ~> 1.4.0
v1.3.0 | waterdrop=spec.add_dependency waterdrop, ~> 1.3.0
v1.3.1 | waterdrop=spec.add_dependency waterdrop, ~> 1.3.0
v1.4.0 | waterdrop=spec.add_dependency waterdrop, ~> 1.4.0
v1.4.1 | waterdrop=spec.add_dependency waterdrop, ~> 1.4.0
v1.4.2 | waterdrop=spec.add_dependency waterdrop, ~> 1.4.0
v1.4.3 | waterdrop=spec.add_dependency waterdrop, ~> 1.4.0
v1.4.4 | waterdrop=spec.add_dependency waterdrop, ~> 1.4.0
v1.4.5 | waterdrop=spec.add_dependency waterdrop, ~> 1.4.0
v1.4.6 | waterdrop=spec.add_dependency waterdrop, ~> 1.4.0
v1.4.7 | waterdrop=spec.add_dependency waterdrop, ~> 1.4.0
v1.4.8 | waterdrop=spec.add_dependency waterdrop, ~> 1.4.0
v1.4.9 | waterdrop=spec.add_dependency waterdrop, ~> 1.4.0
v1.4.10 | waterdrop=spec.add_dependency waterdrop, ~> 1.4
v1.4.11 | waterdrop=spec.add_dependency waterdrop, ~> 1.4
v1.4.12 | waterdrop=spec.add_dependency waterdrop, ~> 1.4
v1.4.13 | waterdrop=spec.add_dependency waterdrop, ~> 1.4
v1.4.14 | waterdrop=spec.add_dependency waterdrop, ~> 1.4
v2.0.0 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.0.alpha1 | waterdrop=spec.add_dependency waterdrop, >= 2.1.0, < 3.0.0
v2.0.0.alpha2 | waterdrop=spec.add_dependency waterdrop, >= 2.2.0, < 3.0.0
v2.0.0.alpha3 | waterdrop=spec.add_dependency waterdrop, >= 2.2.0, < 3.0.0
v2.0.0.alpha4 | waterdrop=spec.add_dependency waterdrop, >= 2.2.0, < 3.0.0
v2.0.0.alpha5 | waterdrop=spec.add_dependency waterdrop, >= 2.3.0, < 3.0.0
v2.0.0.alpha6 | waterdrop=spec.add_dependency waterdrop, >= 2.3.0, < 3.0.0
v2.0.0.beta1 | waterdrop=spec.add_dependency waterdrop, >= 2.3.0, < 3.0.0
v2.0.0.beta2 | waterdrop=spec.add_dependency waterdrop, ~> 1.4
v2.0.0.beta3 | waterdrop=spec.add_dependency waterdrop, >= 2.3.0, < 3.0.0
v2.0.0.beta4 | waterdrop=spec.add_dependency waterdrop, >= 2.3.1, < 3.0.0
v2.0.0.beta5 | waterdrop=spec.add_dependency waterdrop, >= 2.3.1, < 3.0.0
v2.0.0.rc1 | waterdrop=spec.add_dependency waterdrop, >= 2.3.1, < 3.0.0
v2.0.0.rc2 | waterdrop=spec.add_dependency waterdrop, >= 2.3.3, < 3.0.0
v2.0.0.rc3 | waterdrop=spec.add_dependency waterdrop, >= 2.3.3, < 3.0.0
v2.0.0.rc4 | waterdrop=spec.add_dependency waterdrop, >= 2.4.0, < 3.0.0
v2.0.0.rc5 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.1 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.2 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.3 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.4 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.5 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.6 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.7 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.8 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.9 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.10 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.11 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.12 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.13 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.14 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.15 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.16 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.17 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.18 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.19 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.20 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.21 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.22 | waterdrop=spec.add_dependency waterdrop, >= 2.4.1, < 3.0.0
v2.0.23 | waterdrop=spec.add_dependency waterdrop, >= 2.4.3, < 3.0.0
v2.0.24 | waterdrop=spec.add_dependency waterdrop, >= 2.4.7, < 3.0.0
v2.0.25 | waterdrop=spec.add_dependency waterdrop, >= 2.4.7, < 3.0.0
v2.0.26 | waterdrop=spec.add_dependency waterdrop, >= 2.4.7, < 3.0.0
v2.0.27 | waterdrop=spec.add_dependency waterdrop, >= 2.4.9, < 3.0.0
v2.0.28 | waterdrop=spec.add_dependency waterdrop, >= 2.4.9, < 3.0.0
v2.0.29 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.0.30 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.0.31 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.0.32 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.0.33 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.0.34 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.0.35 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.0.36 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.0.37 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.0.38 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.0.39 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.0.40 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.0.41 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.1.0 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.1.1 | waterdrop=spec.add_dependency waterdrop, >= 2.4.10, < 3.0.0
v2.1.2 | waterdrop=spec.add_dependency waterdrop, >= 2.5.3, < 3.0.0
v2.1.3 | waterdrop=spec.add_dependency waterdrop, >= 2.5.3, < 3.0.0
v2.1.4 | waterdrop=spec.add_dependency waterdrop, >= 2.5.3, < 3.0.0
v2.1.5 | waterdrop=spec.add_dependency waterdrop, >= 2.6.1, < 3.0.0
v2.1.5.beta1 | waterdrop=spec.add_dependency waterdrop, >= 2.6.1.beta1, < 3.0.0
v2.1.6 | waterdrop=spec.add_dependency waterdrop, >= 2.6.2, < 3.0.0
v2.1.7 | waterdrop=spec.add_dependency waterdrop, >= 2.6.2, < 3.0.0
v2.1.8 | waterdrop=spec.add_dependency waterdrop, >= 2.6.2, < 3.0.0
v2.1.9 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.1.10 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.1.11 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.1.12 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.1.13 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.2.0 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.2.1 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.2.2 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.2.3 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.2.4 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.2.5 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.2.6 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.2.7 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.2.8 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.2.8.beta1 | waterdrop=spec.add_dependency waterdrop, >= 2.6.6, < 3.0.0
v2.2.9 | waterdrop=spec.add_dependency waterdrop, >= 2.6.10, < 3.0.0
v2.2.10 | waterdrop=spec.add_dependency waterdrop, >= 2.6.10, < 3.0.0
v2.2.11 | waterdrop=spec.add_dependency waterdrop, >= 2.6.10, < 3.0.0
v2.2.12 | waterdrop=spec.add_dependency waterdrop, >= 2.6.11, < 3.0.0
v2.2.13 | waterdrop=spec.add_dependency waterdrop, >= 2.6.11, < 3.0.0
v2.2.14 | waterdrop=spec.add_dependency waterdrop, >= 2.6.11, < 3.0.0
v2.3.0 | waterdrop=spec.add_dependency waterdrop, >= 2.6.12, < 3.0.0
v2.3.0.alpha1 | waterdrop=spec.add_dependency waterdrop, >= 2.6.12, < 3.0.0
v2.3.0.alpha2 | waterdrop=spec.add_dependency waterdrop, >= 2.6.12, < 3.0.0
v2.3.0.rc1 | waterdrop=spec.add_dependency waterdrop, >= 2.6.12, < 3.0.0
v2.3.1 | waterdrop=spec.add_dependency waterdrop, >= 2.6.12, < 3.0.0
v2.3.2 | waterdrop=spec.add_dependency waterdrop, >= 2.6.12, < 3.0.0
v2.3.3 | waterdrop=spec.add_dependency waterdrop, >= 2.6.12, < 3.0.0
v2.3.4 | waterdrop=spec.add_dependency waterdrop, >= 2.6.12, < 3.0.0
v2.4.0 | waterdrop=spec.add_dependency waterdrop, >= 2.7.0, < 3.0.0
v2.4.0.beta1 | waterdrop=spec.add_dependency waterdrop, >= 2.7.0.rc1, < 3.0.0
v2.4.0.beta2 | waterdrop=spec.add_dependency waterdrop, >= 2.7.0.rc1, < 3.0.0
v2.4.0.rc1 | waterdrop=spec.add_dependency waterdrop, >= 2.7.0.rc2, < 3.0.0
v2.4.1 | waterdrop=spec.add_dependency waterdrop, >= 2.7.0, < 3.0.0
v2.4.2 | waterdrop=spec.add_dependency waterdrop, >= 2.7.0, < 3.0.0
v2.4.3 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.4 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.5 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.6 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.7 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.8 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.9 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.10 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.11 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.12 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.13 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.14 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.15 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.16 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.17 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.4.18 | waterdrop=spec.add_dependency waterdrop, >= 2.7.3, < 3.0.0
v2.5.0 | waterdrop=spec.add_dependency waterdrop, >= 2.8.3, < 3.0.0
v2.5.0.beta1 | waterdrop=spec.add_dependency waterdrop, >= 2.8.3, < 3.0.0
v2.5.0.beta2 | waterdrop=spec.add_dependency waterdrop, >= 2.8.3, < 3.0.0
v2.5.0.rc1 | waterdrop=spec.add_dependency waterdrop, >= 2.8.3, < 3.0.0
v2.5.0.rc2 | waterdrop=spec.add_dependency waterdrop, >= 2.8.3, < 3.0.0
v2.5.1.beta1 | waterdrop=spec.add_dependency waterdrop, >= 2.8.3, < 3.0.0

@mensfeld
Copy link

While I agree it'd be nice to just stick with the new API (which was not even released yet), I'm not sure about breaking compatibility with all past Waterdrop versions

This change (if not used) is backwards compatible. WaterDrop had no breaking changes for years aside of one super edge case in transactions and one deprecated setting early 2024.

In other words, is it reasonable to assume that upgrading WaterDrop is not a meaningful hurdle?

Yes. While Karafka can be complex, WaterDrop upgrades are not.

I bump dependency of waterdrop version in karafka framework mostly to support weird edge cases and sync APIs. If you are not using Karafka, WaterDrop standalone is in my opinion low effort tool with extremely low (so far) maintenance burden.

New version with the introduced changes to support this will be released at most next week as I am traveling at the moment.

@mensfeld
Copy link

mensfeld commented Sep 11, 2025

@Drowze I will release rc1 for you today of waterdrop for testing.

NOTE: producer.configured is a new feature, which should be present on
WaterDrop 2.8.8 (it's only present in the 2.8.8.rc1 for now).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
integrations Involves tracing integrations tracing
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BUG]: Karafka integration doesn't inject trace digest to produced messages
4 participants