You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by "Jun Rao (JIRA)" <ji...@apache.org> on 2016/07/26 23:20:20 UTC

[jira] [Commented] (KAFKA-3996) ByteBufferMessageSet.writeTo() should be non-blocking

    [ https://issues.apache.org/jira/browse/KAFKA-3996?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15394755#comment-15394755 ] 

Jun Rao commented on KAFKA-3996:
--------------------------------

To address this issue, we will need to get rid of the while loop and return the bytes returned from channel.write(buffer) similar to what's in ByteBufferSend.

> ByteBufferMessageSet.writeTo() should be non-blocking
> -----------------------------------------------------
>
>                 Key: KAFKA-3996
>                 URL: https://issues.apache.org/jira/browse/KAFKA-3996
>             Project: Kafka
>          Issue Type: Bug
>    Affects Versions: 0.10.0.0
>            Reporter: Jun Rao
>
> Currently, in ByteBufferMessageSet.writeTo(), we try to finish writing all bytes in the buffer in a single call. The code has been like that since 0.8. This hasn't been a problem historically since the broker uses zero-copy to send fetch responses and only use ByteBufferMessageSet to send produce responses, which are small. However, in 0.10.0, if a consumer is before 0.10.0, the broker has to down convert the message and use ByteBufferMessageSet to send a fetch response to the consumer. If the client is slow and there are lots of bytes in the ByteBufferMessageSet, we may not be able to completely send all the bytes in the buffer for a long period of time. When this happens, the Processor will be blocked and can't handle other connections, which is bad.



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