X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2FApplicationRebalanceListener.java;h=d31929519e61a4a6fc18f84e4590a7295f757c4f;hb=384ed293b9d6d71f68031f92bd7bf60670a7ba4b;hp=6d3850f677b33e8ad71695527ac9386e3e42c1fd;hpb=2d25525ef70a90709edc48bd9542d1b08a2888a2;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 6d3850f..d319295 100644 --- a/src/main/java/de/juplo/kafka/ApplicationRebalanceListener.java +++ b/src/main/java/de/juplo/kafka/ApplicationRebalanceListener.java @@ -2,26 +2,26 @@ package de.juplo.kafka; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.kafka.clients.consumer.ConsumerRebalanceListener; +import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.common.TopicPartition; -import java.time.Clock; -import java.time.Duration; -import java.time.Instant; import java.util.*; @RequiredArgsConstructor @Slf4j -public class ApplicationRebalanceListener implements ConsumerRebalanceListener +public class ApplicationRebalanceListener implements CommittingConsumerRebalanceListener { private final ApplicationRecordHandler recordHandler; private final AdderResults adderResults; private final StateRepository stateRepository; private final String id; + private final Consumer consumer; private final Set partitions = new HashSet<>(); + private boolean commitsEnabled = true; + @Override public void onPartitionsAssigned(Collection partitions) { @@ -51,6 +51,19 @@ public class ApplicationRebalanceListener implements ConsumerRebalanceListener @Override public void onPartitionsRevoked(Collection partitions) { + if (commitsEnabled) + { + log.info("{} - Commiting offsets for all previously assigned partitions", id); + try + { + consumer.commitSync(); + } + catch (Exception e) + { + log.warn("{} - Could not commit offsets in onPartitionsRevoked():", id, e); + } + } + partitions.forEach(tp -> { Integer partition = tp.partition(); @@ -70,4 +83,16 @@ public class ApplicationRebalanceListener implements ConsumerRebalanceListener stateRepository.save(new StateDocument(partition, state, results)); }); } + + @Override + public void enableCommits() + { + commitsEnabled = true; + } + + @Override + public void disableCommits() + { + commitsEnabled = false; + } }