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

Chia-Ping Tsai commented on KAFKA-18989:
----------------------------------------


{code:java}
diff --git 
a/clients/src/main/java/org/apache/kafka/common/record/FileRecords.java 
b/clients/src/main/java/org/apache/kafka/common/record/FileRecords.java
index c905a4678a..ecf6abd104 100644
--- a/clients/src/main/java/org/apache/kafka/common/record/FileRecords.java
+++ b/clients/src/main/java/org/apache/kafka/common/record/FileRecords.java
@@ -298,11 +298,15 @@ public class FileRecords extends AbstractRecords 
implements Closeable {
      * @return the batch's base offset, its physical position, and its size 
(including log overhead)
      */
     public LogOffsetPosition searchForOffsetWithSize(long targetOffset, int 
startingPosition) {
+        FileChannelRecordBatch previous = null;
         for (FileChannelRecordBatch batch : batchesFrom(startingPosition)) {
-            long offset = batch.lastOffset();
-            if (offset >= targetOffset)
-                return new LogOffsetPosition(batch.baseOffset(), 
batch.position(), batch.sizeInBytes());
+            if (targetOffset <= batch.baseOffset()) {
+                if (previous == null || previous.lastOffset() < targetOffset) 
return new LogOffsetPosition(batch);
+                return new LogOffsetPosition(previous);
+            }
+            previous = batch;
         }
+        if (previous != null && previous.lastOffset() >= targetOffset) return 
new LogOffsetPosition(previous);
         return null;
     }
 
@@ -464,6 +468,10 @@ public class FileRecords extends AbstractRecords 
implements Closeable {
         public final int position;
         public final int size;
 
+        private LogOffsetPosition(FileChannelRecordBatch batch) {
+            this(batch.baseOffset(), batch.position(), batch.sizeInBytes());
+        }
+
         public LogOffsetPosition(long offset, int position, int size) {
             this.offset = offset;
             this.position = position;
{code}


> Optimize FileRecord#searchForOffsetWithSize
> -------------------------------------------
>
>                 Key: KAFKA-18989
>                 URL: https://issues.apache.org/jira/browse/KAFKA-18989
>             Project: Kafka
>          Issue Type: Improvement
>            Reporter: Chia-Ping Tsai
>            Assignee: Chia-Ping Tsai
>            Priority: Major
>
> the `lastOffset` needs to load whole header of batch, so we should check 
> `baseOffset` instead. this approach is similar to 
> https://github.com/apache/kafka/pull/17322#discussion_r1807869552



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

Reply via email to