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

Jun Rao resolved KAFKA-12736.
-----------------------------
    Fix Version/s: 3.0.0
         Assignee: Lucas Bradstreet
       Resolution: Fixed

> KafkaProducer.flush holds onto completed ProducerBatch(s) until flush 
> completes
> -------------------------------------------------------------------------------
>
>                 Key: KAFKA-12736
>                 URL: https://issues.apache.org/jira/browse/KAFKA-12736
>             Project: Kafka
>          Issue Type: Improvement
>            Reporter: Lucas Bradstreet
>            Assignee: Lucas Bradstreet
>            Priority: Minor
>             Fix For: 3.0.0
>
>
> When flush is called a copy of the incomplete batches is made. This means 
> that the full ProducerBatch(s) are held in memory until the flush has 
> completed. For batches where the existing memory pool is used this is not as 
> wasteful as the memory will already be returned to the pool, but for non pool 
> memory it can only be GC'd after the flush has completed. Rather than use 
> copyAll we can make a new array with only the produceFuture(s) and await on 
> those.
>  
> {code:java}
> /**
>  * Mark all partitions as ready to send and block until the send is complete
>  */
> public void awaitFlushCompletion() throws InterruptedException {
>  try {
>  for (ProducerBatch batch : this.incomplete.copyAll())
>  batch.produceFuture.await();
>  } finally {
>  this.flushesInProgress.decrementAndGet();
>  }
> }
> {code}
> This may help in cases where the application is already memory constrained 
> and memory usage is slowing progress on completion of the incomplete batches.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to