You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gobblin.apache.org by wl...@apache.org on 2024/07/18 21:53:20 UTC

(gobblin) branch master updated: [GOBBLIN-2114] Add fields to show computed delta between consume and … (#4005)

This is an automated email from the ASF dual-hosted git repository.

wlo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/gobblin.git


The following commit(s) were added to refs/heads/master by this push:
     new 077a10ac41 [GOBBLIN-2114] Add fields to show computed delta between consume and … (#4005)
077a10ac41 is described below

commit 077a10ac4182ad64865eb4985df15ee08de9a971
Author: Wei-Hsiang (Max) Lin <aa...@gmail.com>
AuthorDate: Thu Jul 18 14:53:15 2024 -0700

    [GOBBLIN-2114] Add fields to show computed delta between consume and … (#4005)
    
    * [GOBBLIN-2114] Add fields to show computed delta between consume and producer/append time respectively
---
 .../extract/kafka/KafkaExtractorStatsTracker.java       | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/gobblin-modules/gobblin-kafka-common/src/main/java/org/apache/gobblin/source/extractor/extract/kafka/KafkaExtractorStatsTracker.java b/gobblin-modules/gobblin-kafka-common/src/main/java/org/apache/gobblin/source/extractor/extract/kafka/KafkaExtractorStatsTracker.java
index eec0d09c46..d88f026bb7 100644
--- a/gobblin-modules/gobblin-kafka-common/src/main/java/org/apache/gobblin/source/extractor/extract/kafka/KafkaExtractorStatsTracker.java
+++ b/gobblin-modules/gobblin-kafka-common/src/main/java/org/apache/gobblin/source/extractor/extract/kafka/KafkaExtractorStatsTracker.java
@@ -79,6 +79,8 @@ public class KafkaExtractorStatsTracker {
   private static final String FETCH_MESSAGE_BUFFER_TIME = "fetchMessageBufferTime";
   private static final String LAST_RECORD_HEADER_TIMESTAMP = "lastRecordHeaderTimestamp";
   private static final String OBSERVED_LATENCY_HISTOGRAM = "observedLatencyHistogram";
+  private static final String CREATION_DURATION_TIME = "creationDurationTime";
+  private static final String APPEND_DURATION_TIME = "appendDurationTime";
 
   @Getter
   private final Map<KafkaPartition, ExtractorStats> statsMap;
@@ -183,6 +185,8 @@ public class KafkaExtractorStatsTracker {
     private long minLogAppendTime = -1L;
     private long maxLogAppendTime = -1L;
     private long minRecordCreationTime = -1L;
+    private long creationDurationTime = -1L;
+    private long appendDurationTime = -1L;
   }
 
   /**
@@ -306,6 +310,17 @@ public class KafkaExtractorStatsTracker {
         if (logAppendTimestamp > 0 && (System.currentTimeMillis() - logAppendTimestamp > recordLevelSlaMillis)) {
           v.slaMissedRecordCount++;
         }
+        // This experiment tracks the SLA for record creation times after migrating to Xinfra.
+        // It compares the time taken for appending records versus the time taken for creating records.
+        // The goal is to identify any potential impact on the SLA. 
+        // Here we capture the time taken from the record was appended to the time consumed by the extractor.
+        if (logAppendTimestamp > 0) {
+          v.appendDurationTime = System.currentTimeMillis() - logAppendTimestamp;        
+        }
+        // Here we capture the time taken from the record was created or produced to the time consumed by the extractor.
+        if (recordCreationTimestamp > 0) {
+          v.creationDurationTime = System.currentTimeMillis() - recordCreationTimestamp;        
+        }
       }
       return v;
     });
@@ -456,6 +471,8 @@ public class KafkaExtractorStatsTracker {
     tagsForPartition.put(UNDECODABLE_MESSAGE_COUNT, Long.toString(stats.getDecodingErrorCount()));
     tagsForPartition.put(NULL_RECORD_COUNT, Long.toString(stats.getNullRecordCount()));
     tagsForPartition.put(LAST_RECORD_HEADER_TIMESTAMP, Long.toString(stats.getLastSuccessfulRecordHeaderTimestamp()));
+    tagsForPartition.put(APPEND_DURATION_TIME, Long.toString(stats.getAppendDurationTime()));
+    tagsForPartition.put(CREATION_DURATION_TIME, Long.toString(stats.getCreationDurationTime()));
 
     // Commit avg time to pull a record for each partition
     double avgMillis = stats.getAvgMillisPerRecord();