David Schlosnagle created KAFKA-14336: -----------------------------------------
Summary: Reduce allocations from MetadataResponse#convertToNodeArray Key: KAFKA-14336 URL: https://issues.apache.org/jira/browse/KAFKA-14336 Project: Kafka Issue Type: Improvement Components: admin Reporter: David Schlosnagle While profiling a Kafka consumer application that utilizes `org.apache.kafka.clients.admin.Admin#listOffsets(java.util.Map<org.apache.kafka.common.TopicPartition,org.apache.kafka.clients.admin.OffsetSpec>)`, one of the largest aggregate memory allocations are coming from `org.apache.kafka.common.requests.MetadataResponse.convertToNodeArray(List, Map)` due to the use of stream reference pipeline. We can avoid allocating the stream reference pipeline & spliterator for this case by explicitly allocating the presized `Node[]` and using a for loop with `int` induction over the specified IDs `List` argument. {code} java.util.stream.ReferencePipeline$3 at java.util.stream.ReferencePipeline.map(Function) at org.apache.kafka.common.requests.MetadataResponse.convertToNodeArray(List, Map) at org.apache.kafka.common.requests.MetadataResponse.toPartitionInfo(MetadataResponse$PartitionMetadata, Map) at org.apache.kafka.common.requests.MetadataResponse.cluster() at org.apache.kafka.clients.admin.KafkaAdminClient.getListOffsetsCalls(MetadataOperationContext, Map, Map) at org.apache.kafka.clients.admin.KafkaAdminClient.lambda$listOffsets$21(MetadataOperationContext, Map, Map) at org.apache.kafka.clients.admin.KafkaAdminClient$$Lambda$3539+0x000000080142d120.1364252822.get() at org.apache.kafka.clients.admin.KafkaAdminClient$23.handleResponse(AbstractResponse) at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.handleResponses(long, List) at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.processRequests() at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.run() at java.lang.Thread.run() {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)