X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2FApplicationRebalanceListener.java;h=444b7b7139d2d6845a02e42fb109e8b77f871b37;hb=f1eec82fb197f9fc7906eb9a90d75468e9e4356f;hp=2fccb4f28209ff6ef4c268bcb7c9eb42cd444f08;hpb=4abc82d5d4cc80feabee91a10749b40f9bcfd879;p=demos%2Fkafka%2Ftraining diff --git a/src/main/java/de/juplo/kafka/ApplicationRebalanceListener.java b/src/main/java/de/juplo/kafka/ApplicationRebalanceListener.java index 2fccb4f..444b7b7 100644 --- a/src/main/java/de/juplo/kafka/ApplicationRebalanceListener.java +++ b/src/main/java/de/juplo/kafka/ApplicationRebalanceListener.java @@ -25,6 +25,7 @@ public class ApplicationRebalanceListener implements PollIntervalAwareConsumerRe private final Consumer consumer; private Instant lastCommit = Instant.EPOCH; + private boolean commitsEnabled = true; @Override public void onPartitionsAssigned(Collection 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 removed = recordHandler.removePartition(partition); - stateRepository.save(new StateDocument(partition, removed, consumer.position(tp))); + offset); + if (commitsEnabled) + { + Map 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; + } }