[ https://issues.apache.org/jira/browse/KAFKA-6258?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jason Gustafson resolved KAFKA-6258. ------------------------------------ Resolution: Fixed Fix Version/s: 1.0.1 1.1.0 Issue resolved by pull request 4248 [https://github.com/apache/kafka/pull/4248] > SSLTransportLayer should keep reading from socket until either the buffer is > full or the socket has no more data > ---------------------------------------------------------------------------------------------------------------- > > Key: KAFKA-6258 > URL: https://issues.apache.org/jira/browse/KAFKA-6258 > Project: Kafka > Issue Type: Improvement > Reporter: Dong Lin > Assignee: Dong Lin > Fix For: 1.1.0, 1.0.1 > > > When consumer uses plaintext and there is remaining data in consumer's > buffer, consumer.poll() will read all data available from the socket buffer > to consumer buffer. However, if consumer uses ssl and there is remaining > data, consumer.poll() may only read 16 KB (the size of > SslTransportLayer.appReadBuffer) from socket buffer. This will reduce > efficient of consumer.poll() by asking user to call more poll() to get the > same amount of data. > Furthermore, we observe that for users who naively sleep a constant time > after each consumer.poll(), some partition will lag behind after they switch > from plaintext to ssl. Here is the explanation why this can happen. > Say there are 1 partition of 1MB/sec and 9 partition of 32KB/sec. Leaders of > these partitions are all different and consumer is consuming these 10 > partitions. Let's also assume that socket read buffer size is large enough > and consume sleeps 1 sec between consumer.poll(). 1 sec is long enough for > consumer to receive the FetchResponse back from broker. > - When consumer uses plaintext, each consumer.poll() will read all data from > the socket buffer and it means 1 MB data is read from each partition. > - When consumer uses ssl, each consumer.poll() is likely to find that there > is some data available in the memory. In this case consumer only reads 16 KB > data from other sockets, particularly the socket for the broker with the > large partition. Then the throughput of the large partition will be limited > to 16KB/sec. > Arguably user should not sleep 1 sec if its consumer is lagging behind. But > on Kafka dev side it is nice to keep the previous behavior and optimize > consumer.poll() to read as much data from socket as possible. -- This message was sent by Atlassian JIRA (v6.4.14#64029)