[
https://issues.apache.org/jira/browse/KAFKA-7639?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Rajini Sivaram resolved KAFKA-7639.
-----------------------------------
Fix Version/s: 2.5.0
Reviewer: Jun Rao
Resolution: Fixed
> Read one request at a time from socket to reduce broker memory usage
> --------------------------------------------------------------------
>
> Key: KAFKA-7639
> URL: https://issues.apache.org/jira/browse/KAFKA-7639
> Project: Kafka
> Issue Type: Improvement
> Components: network
> Reporter: Rajini Sivaram
> Assignee: Rajini Sivaram
> Priority: Major
> Fix For: 2.5.0
>
>
> Broker's Selector currently reads all requests available on the socket when
> the socket is ready for read. These are queued up as staged receives. We mute
> the channel and stop reading any more data until all the staged requests are
> processed. This behaviour is slightly inconsistent since for the initial read
> we drain the socket buffer, allowing it to get filled up again, but if data
> arrives slighly after the initial read, then we dont read from the socket
> buffer until pending requests are processed.
> To avoid holding onto requests for longer than required, we should read one
> request at a time even if more data is available in the socket buffer. This
> is especially useful for produce requests which may be large and may take
> long to process.
> Note that with the default socket read buffer size of 100K, this is not a
> critical issue. But with larger socket buffers, this could result in
> excessive memory usage if a lot of produce requests are buffered in the
> broker and the producer times out, reconnects and sends more data before
> broker has cleared older requests. By reading one-at-a-time, we reduce the
> amount of time the broker holds onto memory for each request.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)