Brandon Jiang created KAFKA-9158:
------------------------------------
Summary: producer fetch metadata until 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.2.1
Reporter: Brandon Jiang
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)