Verbesserte Tests und Korrekturen gemerged: sumup-adder -> stored-offsets
[demos/kafka/training] / src / main / java / de / juplo / kafka / ApplicationRebalanceListener.java
index 2fccb4f..444b7b7 100644 (file)
@@ -25,6 +25,7 @@ public class ApplicationRebalanceListener implements PollIntervalAwareConsumerRe
   private final Consumer<String, Long> consumer;
 
   private Instant lastCommit = Instant.EPOCH;
+  private boolean commitsEnabled = true;
 
   @Override
   public void onPartitionsAssigned(Collection<TopicPartition> partitions)
@@ -32,12 +33,11 @@ public class ApplicationRebalanceListener implements PollIntervalAwareConsumerRe
     partitions.forEach(tp ->
     {
       Integer partition = tp.partition();
-      Long offset = consumer.position(tp);
-      log.info("{} - adding partition: {}, offset={}", id, partition, offset);
       StateDocument document =
           stateRepository
               .findById(Integer.toString(partition))
               .orElse(new StateDocument(partition));
+      log.info("{} - adding partition: {}, offset={}", id, partition, document.offset);
       if (document.offset >= 0)
       {
         // Only seek, if a stored offset was found
@@ -54,14 +54,21 @@ public class ApplicationRebalanceListener implements PollIntervalAwareConsumerRe
     partitions.forEach(tp ->
     {
       Integer partition = tp.partition();
-      Long newOffset = consumer.position(tp);
+      Long offset = consumer.position(tp);
       log.info(
           "{} - removing partition: {}, offset of next message {})",
           id,
           partition,
-          newOffset);
-      Map<String, Long> removed = recordHandler.removePartition(partition);
-      stateRepository.save(new StateDocument(partition, removed, consumer.position(tp)));
+          offset);
+      if (commitsEnabled)
+      {
+        Map<String, Long> removed = recordHandler.removePartition(partition);
+        stateRepository.save(new StateDocument(partition, removed, offset));
+      }
+      else
+      {
+        log.info("Offset commits are disabled! Last commit: {}", lastCommit);
+      }
     });
   }
 
@@ -69,6 +76,12 @@ public class ApplicationRebalanceListener implements PollIntervalAwareConsumerRe
   @Override
   public void beforeNextPoll()
   {
+    if (!commitsEnabled)
+    {
+      log.info("Offset commits are disabled! Last commit: {}", lastCommit);
+      return;
+    }
+
     if (lastCommit.plus(commitInterval).isBefore(clock.instant()))
     {
       log.debug("Storing data and offsets, last commit: {}", lastCommit);
@@ -80,4 +93,16 @@ public class ApplicationRebalanceListener implements PollIntervalAwareConsumerRe
       lastCommit = clock.instant();
     }
   }
+
+  @Override
+  public void enableCommits()
+  {
+    commitsEnabled = true;
+  }
+
+  @Override
+  public void disableCommits()
+  {
+    commitsEnabled = false;
+  }
 }