Interface KafkaProducer<K,V>
- Type Parameters:
K- the type of keyV- the type of value
- All Known Implementing Classes:
ReactiveKafkaProducer
Unlike KafkaProducer, this API is guaranteed to be asynchronous.
Note that even though the org.apache.kafka.clients.producer.KafkaProducer is documented to be asynchronous,
it actually may block in some cases; see KAFKA-3539
for more info.
The way asynchrony is guaranteed here is an implementation detail. Currently, the sending actions are executed
on a special sending thread, but when KAFKA-3539 is fixed, the implementation may become just a simple
wrapper providing a Uni API.
-
Method Summary
Modifier and TypeMethodDescriptionio.smallrye.mutiny.Uni<Void>io.smallrye.mutiny.Uni<Void>voidclose()Close the producer clientio.smallrye.mutiny.Uni<Void>io.smallrye.mutiny.Uni<Void>flush()Sends all buffered records immediately.io.smallrye.mutiny.Uni<Void>io.smallrye.mutiny.Uni<List<org.apache.kafka.common.PartitionInfo>>partitionsFor(String topic) Returns a list of partition metadata for given topic.io.smallrye.mutiny.Uni<Void>runOnSendingThread(Consumer<org.apache.kafka.clients.producer.Producer<K, V>> action) Runs an action on the sending thread.<R> io.smallrye.mutiny.Uni<R>runOnSendingThread(Function<org.apache.kafka.clients.producer.Producer<K, V>, R> action) Runs an action on the sending thread.io.smallrye.mutiny.Uni<org.apache.kafka.clients.producer.RecordMetadata>Send a record to a topic.io.smallrye.mutiny.Uni<Void>sendOffsetsToTransaction(Map<org.apache.kafka.common.TopicPartition, org.apache.kafka.clients.consumer.OffsetAndMetadata> offsets, org.apache.kafka.clients.consumer.ConsumerGroupMetadata groupMetadata) unwrap()
-
Method Details
-
configuration
- Returns:
- Kafka producer configuration
-
runOnSendingThread
@CheckReturnValue <R> io.smallrye.mutiny.Uni<R> runOnSendingThread(Function<org.apache.kafka.clients.producer.Producer<K, V>, R> action) Runs an action on the sending thread.The action is a function taking as parameter the
Producerand that returns a result (potentiallynull). The producedUniemits the returned result when the action completes. If the action throws an exception, the producedUniemits the exception as failure.If the action does not return a result, use
runOnSendingThread(java.util.function.Consumer).- Type Parameters:
R- the type of result, can beVoid- Parameters:
action- the action to execute, must not benull- Returns:
- the Uni emitting the result or the failure when the action completes.
-
runOnSendingThread
@CheckReturnValue io.smallrye.mutiny.Uni<Void> runOnSendingThread(Consumer<org.apache.kafka.clients.producer.Producer<K, V>> action) Runs an action on the sending thread.The action is a consumer receiving the
Producer. The producedUniemitsnullwhen the action completes. If the action throws an exception, the producedUniemits the exception as failure.- Parameters:
action- the action, must not benull- Returns:
- the Uni emitting
nullor the failure when the action completes.
-
send
@CheckReturnValue io.smallrye.mutiny.Uni<org.apache.kafka.clients.producer.RecordMetadata> send(org.apache.kafka.clients.producer.ProducerRecord<K, V> record) Send a record to a topic. The returnedUnicompletes withRecordMetadatawhen the send has been acknowledged, or with an exception in case of an error. -
flush
Sends all buffered records immediately. The returnedUnicompletes when all requests belonging to the buffered records complete. In other words, when the returnedUnicompletes, all previoussend(ProducerRecord)operations are known to be complete as well. No guarantee is made about the completion of records sent afterflushwas called. -
partitionsFor
@CheckReturnValue io.smallrye.mutiny.Uni<List<org.apache.kafka.common.PartitionInfo>> partitionsFor(String topic) Returns a list of partition metadata for given topic. -
initTransactions
- Returns:
- the Uni emitting
nullwhen theProducer.initTransactions()executes.
-
beginTransaction
- Returns:
- the Uni emitting
nullwhen theProducer.beginTransaction()executes.
-
commitTransaction
- Returns:
- the Uni emitting
nullwhen theProducer.commitTransaction()executes.
-
abortTransaction
- Returns:
- the Uni emitting
nullwhen theProducer.abortTransaction()executes.
-
sendOffsetsToTransaction
@CheckReturnValue io.smallrye.mutiny.Uni<Void> sendOffsetsToTransaction(Map<org.apache.kafka.common.TopicPartition, org.apache.kafka.clients.consumer.OffsetAndMetadata> offsets, org.apache.kafka.clients.consumer.ConsumerGroupMetadata groupMetadata) - Parameters:
offsets- topic partition offsets to commit into transactiongroupMetadata- consumer group metadata of the exactly-once consumer- Returns:
- the Uni emitting
nullwhen theProducer.sendOffsetsToTransaction(Map, ConsumerGroupMetadata)executes.
-
unwrap
- Returns:
- the underlying producer. Be aware that to use it you needs to be on the sending thread.
-
close
void close()Close the producer client
-