[ 
https://issues.apache.org/jira/browse/KAFKA-9158?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Brandon Jiang updated KAFKA-9158:
---------------------------------
    Affects Version/s:     (was: 2.2.1)
                       2.3.0

> Makr producer fetch metadata only when buffer is full
> -----------------------------------------------------
>
>                 Key: KAFKA-9158
>                 URL: https://issues.apache.org/jira/browse/KAFKA-9158
>             Project: Kafka
>          Issue Type: Improvement
>          Components: producer 
>    Affects Versions: 2.3.0
>            Reporter: Brandon Jiang
>            Priority: Major
>
> Currently, based on my understanding with KafakProducer.doSend() method, when 
> trigger kafka java client with  
> {code:java}
> org.apache.kafka.clients.producer.Producer.send(message);{code}
> The currently behavior is to do metadata fetch first and then queue the 
> message for sending ?  This could result the kafka producer hangs for 
> max.block.ms time when kafka servers are down.
> Is it possible to change the Producer.send() function behavior to queue all 
> the messages first and then only do metadata fetch async when the queue is 
> full. e.g. 
> {code:java}
> if (msgQueue.batchIsFull ) {
>      clusterAndWaitTime = waitOnMetadata(record.topic(), record.partition(), 
> maxBlockTimeMs);
>      .....
>      this.sender.wakeup();
> }{code}
> I am happy to make this changes. But before doing that, just want to check 
> the current design logic behind producer.send(). 
> I have seen there are lots of talks regarding the producer send() behavior.  
> e.g. https://issues.apache.org/jira/browse/KAFKA-2948, 
> https://issues.apache.org/jira/browse/KAFKA-5369
> So trying to make sure I didnot misunderstand the current behavior here.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to