Thomas Graves created KAFKA-3236:
------------------------------------

             Summary: Honor Producer Configuration "block.on.buffer.full"
                 Key: KAFKA-3236
                 URL: https://issues.apache.org/jira/browse/KAFKA-3236
             Project: Kafka
          Issue Type: Bug
          Components: producer 
    Affects Versions: 0.9.0.0
            Reporter: Thomas Graves
            Assignee: Thomas Graves


In Kafka-0.9, "max.block.ms" is used to control how long the following methods 
will block.

KafkaProducer.send() when
   * Buffer is full
   * Metadata is unavailable

KafkaProducer.partitionsFor() when
   * Metadata is unavailable

However when "block.on.buffer.full" is set to false, "max.block.ms" is in 
effect whenever a buffer is requested/allocated from the Producer BufferPool. 
Instead it should throw a BufferExhaustedException without waiting for 
"max.block.ms"
This is particulary useful if a producer application does not wish to block at 
all on KafkaProducer.send() . We avoid waiting on KafkaProducer.send() when 
metadata is unavailable by invoking send() only if the producer instance has 
fetched the metadata for the topic in a different thread using the same 
producer instance. However "max.block.ms" is still required to specify a 
timeout for bootstrapping the metadata fetch.

We should resolve this limitation by decoupling "max.block.ms" and 
"block.on.buffer.full".

   * "max.block.ms" will be used exclusively for fetching metadata when    
"block.on.buffer.full" = false (in pure non-blocking mode )
   * "max.block.ms" will be applicable to both fetching metadata as well as 
buffer allocation when "block.on.buffer.full = true




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to