Interface ProducerFactory<K,V>

Type Parameters:
K - the key type.
V - the value type.
All Known Implementing Classes:
DefaultKafkaProducerFactory, MockProducerFactory

public interface ProducerFactory<K,V>
The strategy to produce a Producer instance(s).
Author:
Gary Russell, Thomas Strauß, Kwon YongHyun
  • Field Details

    • DEFAULT_PHYSICAL_CLOSE_TIMEOUT

      static final Duration DEFAULT_PHYSICAL_CLOSE_TIMEOUT
      The default close timeout duration as 30 seconds.
    • FACTORY_DOES_NOT_SUPPORT_METHOD

      static final String FACTORY_DOES_NOT_SUPPORT_METHOD
      Error message for unsupported factory methods.
      See Also:
  • Method Details

    • createProducer

      org.apache.kafka.clients.producer.Producer<K,V> createProducer()
      Create a producer which will be transactional if the factory is so configured.
      Returns:
      the producer.
      See Also:
    • createProducer

      default org.apache.kafka.clients.producer.Producer<K,V> createProducer(@Nullable String txIdPrefix)
      Create a producer with an overridden transaction id prefix.
      Parameters:
      txIdPrefix - the transaction id prefix.
      Returns:
      the producer.
      Since:
      2.3
    • createNonTransactionalProducer

      default org.apache.kafka.clients.producer.Producer<K,V> createNonTransactionalProducer()
      Create a non-transactional producer.
      Returns:
      the producer.
      Since:
      2.4.3
      See Also:
    • transactionCapable

      default boolean transactionCapable()
      Return true if the factory supports transactions.
      Returns:
      true if transactional.
    • closeThreadBoundProducer

      default void closeThreadBoundProducer()
      If the factory implementation uses thread-bound producers, call this method to close and release this thread's producer.
      Since:
      2.3
    • reset

      default void reset()
      Reset any state in the factory, if supported.
      Since:
      2.4
    • getConfigurationProperties

      default Map<String,Object> getConfigurationProperties()
      Return an unmodifiable reference to the configuration map for this factory. Useful for cloning to make a similar factory.
      Returns:
      the configs.
      Since:
      2.5
    • getValueSerializerSupplier

      default Supplier<org.apache.kafka.common.serialization.Serializer<V>> getValueSerializerSupplier()
      Return a supplier for a value serializer. Useful for cloning to make a similar factory.
      Returns:
      the supplier.
      Since:
      2.5
    • getKeySerializerSupplier

      default Supplier<org.apache.kafka.common.serialization.Serializer<K>> getKeySerializerSupplier()
      Return a supplier for a key serializer. Useful for cloning to make a similar factory.
      Returns:
      the supplier.
      Since:
      2.5
    • isProducerPerThread

      default boolean isProducerPerThread()
      Return true when there is a producer per thread.
      Returns:
      the producer per thread.
      Since:
      2.5
    • getTransactionIdPrefix

      @Nullable default String getTransactionIdPrefix()
      Return the transaction id prefix.
      Returns:
      the prefix or null if not configured.
      Since:
      2.5
    • getPhysicalCloseTimeout

      default Duration getPhysicalCloseTimeout()
      Get the physical close timeout.
      Returns:
      the timeout.
      Since:
      2.5
    • addListener

      default void addListener(ProducerFactory.Listener<K,V> listener)
      Add a listener.
      Parameters:
      listener - the listener.
      Since:
      2.5.3
    • addListener

      default void addListener(int index, ProducerFactory.Listener<K,V> listener)
      Add a listener at a specific index.
      Parameters:
      index - the index (list position).
      listener - the listener.
      Since:
      2.5.3
    • removeListener

      default boolean removeListener(ProducerFactory.Listener<K,V> listener)
      Remove a listener.
      Parameters:
      listener - the listener.
      Returns:
      true if removed.
      Since:
      2.5.3
    • getListeners

      default List<ProducerFactory.Listener<K,V>> getListeners()
      Get the current list of listeners.
      Returns:
      the listeners.
      Since:
      2.5.3
    • addPostProcessor

      default void addPostProcessor(ProducerPostProcessor<K,V> postProcessor)
      Add a post processor.
      Parameters:
      postProcessor - the post processor.
      Since:
      2.5.3
    • removePostProcessor

      default boolean removePostProcessor(ProducerPostProcessor<K,V> postProcessor)
      Remove a post processor.
      Parameters:
      postProcessor - the post processor.
      Returns:
      true if removed.
      Since:
      2.5.3
    • getPostProcessors

      default List<ProducerPostProcessor<K,V>> getPostProcessors()
      Get the current list of post processors.
      Returns:
      the post processors.
      Since:
      2.5.3
    • updateConfigs

      default void updateConfigs(Map<String,Object> updates)
      Update the producer configuration map; useful for situations such as credential rotation.
      Parameters:
      updates - the configuration properties to update.
      Since:
      2.5.10
    • removeConfig

      default void removeConfig(String configKey)
      Remove the specified key from the configuration map.
      Parameters:
      configKey - the key to remove.
      Since:
      2.5.10
    • getKeySerializer

      @Nullable default org.apache.kafka.common.serialization.Serializer<K> getKeySerializer()
      Return the configured key serializer (if provided as an object instead of a class name in the properties).
      Returns:
      the serializer.
      Since:
      2.8
    • getValueSerializer

      @Nullable default org.apache.kafka.common.serialization.Serializer<V> getValueSerializer()
      Return the configured value serializer (if provided as an object instead of a class name in the properties).
      Returns:
      the serializer.
      Since:
      2.8
    • copyWithConfigurationOverride

      default ProducerFactory<K,V> copyWithConfigurationOverride(Map<String,Object> overrideProperties)
      Copy the properties of the instance and the given properties to create a new producer factory.

      The copy shall prioritize the override properties over the configured values. It is in the responsibility of the factory implementation to make sure the configuration of the new factory is identical, complete and correct.

      ProducerPostProcessor and Listeners must stay intact.

      If the factory does not implement this method, an exception will be thrown.

      Note: see DefaultKafkaProducerFactory.copyWithConfigurationOverride(java.util.Map<java.lang.String, java.lang.Object>)

      Parameters:
      overrideProperties - the properties to be applied to the new factory
      Returns:
      ProducerFactory with properties applied
      Since:
      2.5.17
      See Also: