Geavanceerd Spring Boot 4: gebeurtenisgestuurde architectuur (Kafka) · Les

Consumers pauzeren en hervatten

Leer Kafka-consumers dynamisch te pauzeren en te hervatten, een essentiële functie voor het omgaan met backpressure of tijdelijke service-uitval.

Les 2 van 411 stappen

Consumers pauzeren en hervatten is een gratis Geavanceerd Spring Boot 4: gebeurtenisgestuurde architectuur (Kafka)-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Geavanceerd Spring Boot 4: gebeurtenisgestuurde architectuur (Kafka). Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Geavanceerd Spring Boot 4: gebeurtenisgestuurde architectuur (Kafka) bevat in totaal 4 lessen.

Waarom een consumer pauzeren?

Stel je voor dat je Kafka-consumer berichten sneller verwerkt dan een downstreamservice ze kan afhandelen. Daardoor kan die service overbelast raken of kunnen er zelfs gegevens verloren gaan.

Deze situatie staat algemeen bekend als backpressure. Het is een veelvoorkomende uitdaging in gebeurtenisgestuurde systemen.

Omgaan met backpressure

Er zijn verschillende manieren om met backpressure om te gaan, zoals het vergroten van de capaciteit van je downstreamservice of het implementeren van een mechanisme voor nieuwe pogingen.

Een andere krachtige strategie is je Kafka-consumer tijdelijk te pauzeren. Hierdoor worden er geen nieuwe berichten opgehaald totdat de downstreamservice is hersteld of het probleem is opgelost.

De interface ConsumerSeekAware

Spring for Apache Kafka biedt de interface ConsumerSeekAware. Met deze interface kan je @KafkaListener rechtstreeks communiceren met de onderliggende Kafka-instantie Consumer die door de listenercontainer wordt beheerd.

Dit is essentieel in situaties waarin je fijnmazige controle over berichtverbruik nodig hebt, zoals het pauzeren en hervatten van partities.

ConsumerSeekAware implementeren

Om ConsumerSeekAware te gebruiken, moet je klasse @KafkaListener deze interface implementeren. Spring roept de methoden ervan vervolgens op specifieke momenten in de levensduur van de consumer aan en geeft je daarbij een callbackobject.

import org.springframework.kafka.listener.ConsumerSeekAware;
import org.springframework.kafka.listener.ConsumerSeekCallback;
import org.apache.kafka.common.TopicPartition;

import java.util.Collection;
import java.util.Map;

public class MyKafkaListener implements ConsumerSeekAware {

    private ConsumerSeekCallback seekCallback;

    @Override
    public void registerSeekCallback(ConsumerSeekCallback callback) {
        this.seekCallback = callback;
    }

    @Override
    public void onPartitionsAssigned(Map<TopicPartition, Long> assignments,
                                     ConsumerSeekCallback callback) {
        this.seekCallback = callback;
    }

    // ... other methods like onMessage, onIdleContainer
}

De ConsumerSeekCallback

Wanneer je listener ConsumerSeekAware implementeert, levert Spring een object ConsumerSeekCallback. Deze callback is je toegangspoort tot het beheren van de positie en het ophaalgedrag van de consumer voor specifieke partities.

De ConsumerSeekCallback bevat essentiële methoden zoals pause() en resume(), die we hierna bekijken.

Verbruik stoppen met pause()

Om het verbruik van berichten uit een of meer partities tijdelijk te stoppen, roep je de methode pause() aan op de ConsumerSeekCallback. Hiermee geef je de consumer opdracht om geen nieuwe records meer uit de opgegeven partities op te halen.

Je doet dit meestal wanneer er een fout optreedt of een downstreamservice niet beschikbaar is.

import org.apache.kafka.common.TopicPartition;
import org.springframework.kafka.listener.ConsumerSeekCallback;

import java.util.Collections;
import java.util.Set;

// Assuming 'seekCallback' is registered and available
// and 'myTopic' and 'partitionIndex' are known.

String myTopic = "my_data_topic";
int partitionIndex = 0;

TopicPartition partitionToPause = new TopicPartition(myTopic, partitionIndex);
Set<TopicPartition> partitionsToPause = Collections.singleton(partitionToPause);

// Example of how you would call pause:
// seekCallback.pause(partitionsToPause);

System.out.println("Logic to pause consumption for partition: " 
                   + partitionToPause);
System.out.println("No new messages will be fetched from it.");

Opnieuw starten met resume()

Wanneer de oorzaak van de pauze is opgelost (bijvoorbeeld wanneer de downstreamservice weer online is), kun je de methode resume() aanroepen op de ConsumerSeekCallback.

Hiermee geef je de consumer opdracht opnieuw berichten uit de opgegeven partities op te halen, vanaf het punt waar hij was gestopt.

import org.apache.kafka.common.TopicPartition;
import org.springframework.kafka.listener.ConsumerSeekCallback;

import java.util.Collections;
import java.util.Set;

// Assuming 'seekCallback' is registered and available
// and 'myTopic' and 'partitionIndex' are known.

String myTopic = "my_data_topic";
int partitionIndex = 0;

TopicPartition partitionToResume = new TopicPartition(myTopic, partitionIndex);
Set<TopicPartition> partitionsToResume = Collections.singleton(partitionToResume);

// Example of how you would call resume:
// seekCallback.resume(partitionsToResume);

System.out.println("Logic to resume consumption for partition: " 
                   + partitionToResume);
System.out.println("Messages will now be fetched again.");

Alle listenerpartities pauzeren

Hoewel ConsumerSeekCallback op specifieke partities werkt, moet je soms alle partities pauzeren die aan een @KafkaListener zijn toegewezen.

Daarvoor kun je de KafkaMessageListenerContainer zelf injecteren (bijvoorbeeld op basis van de naam van de bean) en de methode pause() ervan aanroepen. Dit heeft gevolgen voor alle partities die door die container worden beheerd.

Praktische gebruikssituaties

Wanneer moet je de functionaliteit voor pauzeren en hervatten gebruiken?

  • Uitval van een externe service: Pauzeer tijdelijk wanneer een kritieke downstreamdatabase of API niet beschikbaar is.
  • Hoge belasting/backpressure: Pauzeer wanneer je verwerkingslogica achteropraakt door een hoog berichtvolume.
  • Onderhoudsvensters: Stop het verbruik programmatisch tijdens gepland onderhoud aan afhankelijke services.
  • Gecontroleerd afsluiten: Zorg ervoor dat er geen nieuwe berichten worden verwerkt terwijl de applicatie netjes wordt afgesloten.

Test je kennis

Je hebt geleerd hoe je Kafka-consumers in Spring Boot dynamisch pauzeert en hervat. Laten we je begrip testen.

Samenvatting: pauzeren en hervatten

In deze les heb je geleerd hoe je Kafka-consumers in Spring Boot dynamisch pauzeert en hervat:

  • We hebben de interface ConsumerSeekAware onderzocht, die fijnmazige controle biedt.
  • Je hebt gezien hoe je de methoden pause() en resume() van ConsumerSeekCallback gebruikt om het ophalen van berichten te beheren.
  • We hebben praktische situaties besproken, zoals omgaan met backpressure en uitval van externe services, waarin deze functie zeer waardevol is.

Met deze krachtige functionaliteit kun je robuustere en veerkrachtigere gebeurtenisgestuurde applicaties bouwen.

Gratis beginnen

Leer Geavanceerd Spring Boot 4: gebeurtenisgestuurde architectuur (Kafka) met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
12
Lessen
48

Veelgestelde vragen

Is de les “Consumers pauzeren en hervatten” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Geavanceerd Spring Boot 4: gebeurtenisgestuurde architectuur (Kafka), waaronder “Consumers pauzeren en hervatten”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Geavanceerd Spring Boot 4: gebeurtenisgestuurde architectuur (Kafka) bevat in totaal 4 lessen.

Wat leer ik in “Consumers pauzeren en hervatten”?

Leer Kafka-consumers dynamisch te pauzeren en te hervatten, een essentiële functie voor het omgaan met backpressure of tijdelijke service-uitval. Je oefent met Geavanceerd Spring Boot 4: gebeurtenisgestuurde architectuur (Kafka) door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Geavanceerd Spring Boot 4: gebeurtenisgestuurde architectuur (Kafka) te beginnen?

Ervaring vooraf is niet nodig. Geavanceerd Spring Boot 4: gebeurtenisgestuurde architectuur (Kafka) op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Consumers pauzeren en hervatten”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Geavanceerd Spring Boot 4: gebeurtenisgestuurde architectuur (Kafka)?

Ja. Elke les over Geavanceerd Spring Boot 4: gebeurtenisgestuurde architectuur (Kafka) bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Offsets handmatig committen
  2. Consumers pauzeren en hervatten
  3. Gelijktijdigheid en threadbeheer
  4. Rebalance-listeners en static membership
← Terug naar Geavanceerd Spring Boot 4: gebeurtenisgestuurde architectuur (Kafka)