Interface KafkaProducer<K,​V>

  • Type Parameters:
    K - the type of key
    V - the type of value
    All Known Implementing Classes:
    ReactiveKafkaProducer

    public interface KafkaProducer<K,​V>
    Kafka Producer API.

    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

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method Description
      io.smallrye.mutiny.Uni<Void> flush()
      Sends all buffered records immediately.
      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​(org.apache.kafka.clients.producer.ProducerRecord<K,​V> record)
      Send a record to a topic.
      org.apache.kafka.clients.producer.Producer<K,​V> unwrap()  
    • Method Detail

      • runOnSendingThread

        <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 Producer and that returns a result (potentially null). The produced Uni emits the returned result when the action completes. If the action throws an exception, the produced Uni emits 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 be Void
        Parameters:
        action - the action to execute, must not be null
        Returns:
        the Uni emitting the result or the failure when the action completes.
      • runOnSendingThread

        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 produced Uni emits null when the action completes. If the action throws an exception, the produced Uni emits the exception as failure.

        Parameters:
        action - the action, must not be null
        Returns:
        the Uni emitting null or the failure when the action completes.
      • send

        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 returned Uni completes with RecordMetadata when the send has been acknowledged, or with an exception in case of an error.
      • flush

        io.smallrye.mutiny.Uni<Void> flush()
        Sends all buffered records immediately. The returned Uni completes when all requests belonging to the buffered records complete. In other words, when the returned Uni completes, all previous send(ProducerRecord) operations are known to be complete as well. No guarantee is made about the completion of records sent after flush was called.
      • partitionsFor

        io.smallrye.mutiny.Uni<List<org.apache.kafka.common.PartitionInfo>> partitionsFor​(String topic)
        Returns a list of partition metadata for given topic.
      • unwrap

        org.apache.kafka.clients.producer.Producer<K,​V> unwrap()
        Returns:
        the underlying producer. Be aware that to use it you needs to be on the sending thread.