WaterDrop provides several methods for sending messages to Kafka, depending on whether you require synchronous or asynchronous behavior, and whether you are sending single messages or batches.
Synchronous Producing
Use produce_sync for a single message where you want to wait for the result, or produce_many_sync to send an array of messages synchronously.
Asynchronous Producing
Use produce_async for a single message to avoid blocking, or produce_many_async to send an array of messages asynchronously.
Transactions
You can wrap multiple produce_async calls within a transaction block to ensure atomicity.
# 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