karafka/waterdrop

Standalone Karafka library for producing Kafka messages

Ruby

284

1,225 commits

updated Sep 27, 2026

See the code

README

WaterDrop

Build Status Gem Version Join the chat at https://slack.karafka.io

WaterDrop is a standalone gem that sends messages to Kafka easily with an extra validation layer. It is a part of the Karafka ecosystem.

It:

  • Is thread-safe
  • Supports sync and async producing
  • Supports transactions
  • Supports buffering
  • Supports producing to multiple clusters
  • Supports multiple delivery policies
  • Supports per-topic configuration alterations (variants)
  • Works with async gems ecosystem
  • Works with Kafka 1.0+ and Ruby 3.2+
  • Works with and without Karafka

Documentation

Karafka ecosystem components documentation, including WaterDrop, can be found here.

Getting Started

If you want to both produce and consume messages, please use Karafka. It integrates WaterDrop automatically.

To get started with WaterDrop:

  1. Add it to your Gemfile:
bundle add waterdrop
  1. Create and configure a producer:
producer = WaterDrop::Producer.new do |config|
  config.deliver = true
  config.kafka = {
    'bootstrap.servers': 'localhost:9092',
    'request.required.acks': 1
  }
end
  1. Use it as follows:
# sync producing
producer.produce_sync(topic: 'my-topic', payload: 'my message')

# or for async
producer.produce_async(topic: 'my-topic', payload: 'my message')

# or in sync batches
producer.produce_many_sync(
  [
    { topic: 'my-topic', payload: 'my message'},
    { topic: 'my-topic', payload: 'my message'}
  ]
)

# and async batches
producer.produce_many_async(
  [
    { topic: 'my-topic', payload: 'my message'},
    { topic: 'my-topic', payload: 'my message'}
  ]
)

# transactions
producer.transaction do
  producer.produce_async(topic: 'my-topic', payload: 'my message')
  producer.produce_async(topic: 'my-topic', payload: 'my message')
end
apache-kafka
apache-kafka-producer
kafka
karafka
karafka-application
karafka-framework
ruby
rubygem
rubygems
ruby-kafka
waterdrop

Contributors

mensfeld

915 commits

nijikon

129 commits

renovate[bot]

116 commits

pavlo-vavruk

21 commits

karafka/waterdrop

Standalone Karafka library for producing Kafka messages

Ruby

284

1,225 commits

updated Sep 27, 2026

See the code

README

WaterDrop

Build Status Gem Version Join the chat at https://slack.karafka.io

WaterDrop is a standalone gem that sends messages to Kafka easily with an extra validation layer. It is a part of the Karafka ecosystem.

It:

  • Is thread-safe
  • Supports sync and async producing
  • Supports transactions
  • Supports buffering
  • Supports producing to multiple clusters
  • Supports multiple delivery policies
  • Supports per-topic configuration alterations (variants)
  • Works with async gems ecosystem
  • Works with Kafka 1.0+ and Ruby 3.2+
  • Works with and without Karafka

Documentation

Karafka ecosystem components documentation, including WaterDrop, can be found here.

Getting Started

If you want to both produce and consume messages, please use Karafka. It integrates WaterDrop automatically.

To get started with WaterDrop:

  1. Add it to your Gemfile:
bundle add waterdrop
  1. Create and configure a producer:
producer = WaterDrop::Producer.new do |config|
  config.deliver = true
  config.kafka = {
    'bootstrap.servers': 'localhost:9092',
    'request.required.acks': 1
  }
end
  1. Use it as follows:
# sync producing
producer.produce_sync(topic: 'my-topic', payload: 'my message')

# or for async
producer.produce_async(topic: 'my-topic', payload: 'my message')

# or in sync batches
producer.produce_many_sync(
  [
    { topic: 'my-topic', payload: 'my message'},
    { topic: 'my-topic', payload: 'my message'}
  ]
)

# and async batches
producer.produce_many_async(
  [
    { topic: 'my-topic', payload: 'my message'},
    { topic: 'my-topic', payload: 'my message'}
  ]
)

# transactions
producer.transaction do
  producer.produce_async(topic: 'my-topic', payload: 'my message')
  producer.produce_async(topic: 'my-topic', payload: 'my message')
end
apache-kafka
apache-kafka-producer
kafka
karafka
karafka-application
karafka-framework
ruby
rubygem
rubygems
ruby-kafka
waterdrop

Contributors

mensfeld

915 commits

nijikon

129 commits

renovate[bot]

116 commits

pavlo-vavruk

21 commits

Languages

Ruby

99.7%