Avansert Spring Boot 4: hendelsesdrevet arkitektur (Kafka) · leksjon

Håndtering av konsumentgrupper

Forstå hvordan konsumentgrupper muliggjør parallell behandling og feiltoleranse, slik at meldinger behandles bare én gang per gruppe.

Leksjon 2 av 411 trinn

Håndtering av konsumentgrupper er en gratis leksjon i Avansert Spring Boot 4: hendelsesdrevet arkitektur (Kafka) på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Avansert Spring Boot 4: hendelsesdrevet arkitektur (Kafka), og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Avansert Spring Boot 4: hendelsesdrevet arkitektur (Kafka) inneholder totalt 4 leksjoner.

Hva er konsumentgrupper?

Velkommen! I dag skal vi utforske konsumentgrupper i Kafka. Dette er et grunnleggende konsept for å skalere meldingskonsumering og sikre feiltoleranse.

Tenk på en konsumentgruppe som et team av konsumenter som samarbeider om å behandle meldinger fra ett eller flere topics. Hver melding fra partisjonene til et topic leveres bare til én konsument i den aktuelle gruppen.

Skalering og feiltoleranse

Konsumentgrupper løser to viktige utfordringer:

  • Skalering: Ved å fordele partisjoner på flere konsumenter kan du behandle meldinger mye raskere og øke applikasjonens gjennomstrømming.
  • Feiltoleranse: Hvis en konsument feiler eller forlater gruppen, tildeler Kafka automatisk partisjonene på nytt til andre aktive konsumenter i samme gruppe. Dette sikrer kontinuerlig meldingsbehandling.

Til syvende og sist behandles en melding nøyaktig én gang per konsumentgruppe, selv når gruppen har flere konsumenter.

Partisjoner og konsumenter

For å forstå grupper må du huske at Kafka-topics er delt inn i partisjoner. Disse partisjonene er enhetene som muliggjør parallell behandling.

  • Innenfor en konsumentgruppe tildeles hver partisjon høyst én konsument.
  • Hvis du har flere konsumenter enn partisjoner i en gruppe, vil noen konsumenter være inaktive.
  • Hvis du har færre konsumenter enn partisjoner, vil noen konsumenter håndtere flere partisjoner.

Denne tildelingsstrategien sikrer ordnet behandling innenfor hver partisjon, samtidig som den tillater parallell behandling på tvers av partisjoner.

Dynamisk omfordeling av partisjoner

Kafka er smart! Når en konsument blir med i eller forlater en gruppe (for eksempel når en applikasjon starter, stopper eller krasjer), utløser Kafka automatisk en ombalansering.

Under en ombalansering tildeles partisjonene dynamisk på nytt mellom de aktive konsumentene i gruppen. Dette sikrer at alle partisjoner fortsatt blir konsumert, og tilpasser seg endringer i applikasjonens skaleringsbehov.

Ombalansering er en automatisk prosess som garanterer høy tilgjengelighet og tilpasser seg varierende arbeidsbelastning.

`group.id` i Spring Kafka

I Spring Kafka angir du hvilken konsumentgruppe lytteren tilhører, ved hjelp av egenskapen group.id.

Denne unike strengen identifiserer konsumentgruppen din overfor Kafka. Alle konsumenter (enten de kjører i samme applikasjonsinstans eller i ulike instanser) som har nøyaktig samme group.id, regnes som del av den samme gruppen.

Dette konfigurerer du vanligvis i application.properties eller direkte i @KafkaListener-annoteringen.

Eksempel på en Spring-lytter

Her er en enkel Spring Boot Kafka-lytter konfigurert med en bestemt group.id. Dette forteller Kafka at lytteren er en del av konsumentgruppen «my-first-group».

Prøv å kjøre dette eksempelet og se på resultatet!

package com.coddykit;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

@SpringBootApplication
public class ConsumerGroupApp {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerGroupApp.class, args);
    }

    @Component
    public static class MyKafkaListener {

        @KafkaListener(topics = "my-topic", groupId = "my-first-group")
        public void listen(String message) {
            System.out.println("Received in Group 1: " + message);
        }
    }
}

Skalering med flere konsumenter

For å oppnå parallell behandling og høyere gjennomstrømming for et topic kan du kjøre flere instanser av applikasjonen, alle konfigurert med samme same group.id.

Kafka fordeler deretter topicets partisjoner mellom de kjørende instansene. Hver instans behandler et delsett av partisjonene uavhengig, slik at meldingskonsumeringen skaleres horisontalt.

Dette er den viktigste måten å håndtere topics med store datamengder på en effektiv måte.

Flere lyttere, samme gruppe

Du kan også definere flere @KafkaListener-metoder i den samme Spring Boot-applikasjonsinstansen, der alle tilhører den samme konsumentgruppen.

Spring Kafka håndterer disse som separate konsumenter i gruppen. Hvis topicet har nok partisjoner, kan disse lytterne behandle meldinger fra ulike partisjoner parallelt i én enkelt applikasjon.

id-attributtet gjør det mulig å skille mellom lytterbønner, spesielt når flere lyttere er definert for samme topic og gruppe.

package com.coddykit;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

@SpringBootApplication
public class MultiListenerApp {

    public static void main(String[] args) {
        SpringApplication.run(MultiListenerApp.class, args);
    }

    @Component
    public static class MyMultiKafkaListeners {

        // Consumer 1 for "my-topic" in "my-app-group"
        @KafkaListener(topics = "my-topic", groupId = "my-app-group", id = "listener1")
        public void listen1(String message) {
            System.out.println("Listener 1 received: " + message);
        }

        // Consumer 2 for "my-topic" in "my-app-group"
        @KafkaListener(topics = "my-topic", groupId = "my-app-group", id = "listener2")
        public void listen2(String message) {
            System.out.println("Listener 2 received: " + message);
        }
    }
}

Uavhengig konsumering

Hva om ulike applikasjoner må behandle de samme meldingene fra et topic, men til forskjellige formål?

Det er her flere konsumentgrupper er nyttige. Du kan ha flere separate konsumentgrupper, hver med sin egen unike group.id, som konsumerer fra det samme Kafka-topicet.

Hver gruppe mottar en full kopi av alle meldinger som publiseres til topicet. Dette muliggjør uavhengig behandling uten å påvirke andre grupper.

Kontroll av gruppehåndtering

Se for deg et Kafka-topic med 3 partisjoner. Du starter en applikasjon med én konsumentgruppe og to aktive konsumenter. Hvordan blir meldingene fordelt?

Oppsummering av konsumentgrupper

Du har lært om kraften i Kafkas konsumentgrupper!

  • De er avgjørende for skalering av meldingskonsumering og for å bygge feiltolerante applikasjoner.
  • Meldinger fra et topics partisjoner fordeles mellom konsumentene i en gruppe og behandles nøyaktig én gang per gruppe.
  • Kafka håndterer partisjonstildeling og ombalansering automatisk når konsumenter blir med i eller forlater gruppen.
  • Ved å bruke ulike verdier for group.id kan flere applikasjoner konsumere den samme meldingsstrømmen uavhengig av hverandre.

Å beherske konsumentgrupper er avgjørende for å bygge robuste Kafka-applikasjoner.

Gratis å komme i gang

Lær deg Avansert Spring Boot 4: hendelsesdrevet arkitektur (Kafka) med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Håndtering av konsumentgrupper» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Avansert Spring Boot 4: hendelsesdrevet arkitektur (Kafka), inkludert «Håndtering av konsumentgrupper», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Avansert Spring Boot 4: hendelsesdrevet arkitektur (Kafka) inneholder totalt 4 leksjoner.

Hva lærer jeg i «Håndtering av konsumentgrupper»?

Forstå hvordan konsumentgrupper muliggjør parallell behandling og feiltoleranse, slik at meldinger behandles bare én gang per gruppe. Du øver på Avansert Spring Boot 4: hendelsesdrevet arkitektur (Kafka) med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Avansert Spring Boot 4: hendelsesdrevet arkitektur (Kafka)?

Ingen tidligere erfaring er nødvendig. Avansert Spring Boot 4: hendelsesdrevet arkitektur (Kafka) på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Håndtering av konsumentgrupper»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Avansert Spring Boot 4: hendelsesdrevet arkitektur (Kafka)-leksjonen?

Ja. Alle Avansert Spring Boot 4: hendelsesdrevet arkitektur (Kafka)-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Bygge Kafka-lyttekonteinere
  2. Håndtering av konsumentgrupper
  3. Deserialisering og meldingskonvertering
  4. Batch-konsumering og bekreftelsesmoduser
← Tilbake til Avansert Spring Boot 4: hendelsesdrevet arkitektur (Kafka)