Grunnleggende Apache Kafka og strømming · leksjon

Produsent- og forbrukerytelse

Juster konfigurasjonen av produsenter og forbrukere for å oppnå optimal gjennomstrømming og ventetid i applikasjonene dine.

Leksjon 1 av 411 trinn

Produsent- og forbrukerytelse er en gratis leksjon i Grunnleggende Apache Kafka og strømming på CoddyKit. Dette er leksjon 1 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 Grunnleggende Apache Kafka og strømming, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Grunnleggende Apache Kafka og strømming inneholder totalt 4 leksjoner.

Optimalisere Kafka-ytelsen

Velkommen til justering av Kafka! Vi skal se på hvordan produsentene kan sende data raskere, og hvordan konsumentene kan behandle dem mer effektivt.

Ytelse handler ikke bare om «raskt». Det er ofte en avveining mellom gjennomstrømming (hvor mye data som behandles per sekund) og forsinkelse (hvor raskt én enkelt melding behandles).

Maksimere produsentens gjennomstrømming

Produsenter sender meldinger til Kafka-emner. For å oppnå høy gjennomstrømming ønsker vi at de sender data i effektive bolker, ikke én melding om gangen.

Viktige produsentkonfigurasjoner påvirker hvor mange meldinger som grupperes sammen, og hvor ofte de sendes.

Samle meldinger i bolker for bedre effektivitet

I stedet for å sende hver melding umiddelbart kan produsenter samle meldinger i bolker. Dette reduserer belastningen på nettverket.

  • batch.size: Maksimal størrelse i byte for én enkelt bolk. Større bolker betyr færre forespørsler og øker gjennomstrømmingen.
  • linger.ms: Maksimal tid en produsent venter på flere meldinger for å fylle en bolk. En verdi > 0 bidrar til bolkedannelse.

Komprimere produsentdata

Kafka-produsenter kan komprimere meldingsbolker før de sendes. Dette reduserer datamengden som sendes over nettverket.

  • compression.type: Vanlige alternativer omfatter gzip, snappy, lz4 og zstd.

Komprimering sparer nettverksbåndbredde og diskplass på brokerne, og forbedrer gjennomstrømmingen ytterligere. Komprimering og dekomprimering medfører en liten CPU-kostnad.

Pålitelighet kontra forsinkelse med acks

Innstillingen acks bestemmer hvor mange bekreftelser fra brokere en produsent trenger før den regner en melding som sendt.

  • acks=0: Produsenten venter ikke på noen bekreftelse. Raskest, men minst pålitelig (datatap er mulig).
  • acks=1: Produsenten venter på bekreftelse fra lederbrokeren. En god balanse mellom hastighet og pålitelighet.
  • acks=all (eller -1): Produsenten venter på bekreftelse fra alle synkroniserte replikaer. Tregest, men mest pålitelig (ingen datatap hvis lederen svikter).

Eksempel på konfigurert produsent

Her er en enkel Kafka-produsent som er konfigurert med noen av justeringsparameterne vi har diskutert. Prøv å endre verdiene og kjøre den!

import org.apache.kafka.clients.producer.*;
import java.util.Properties;

public class TunedProducer {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        // Tuning parameters
        props.put("batch.size", 16384 * 4); // Increase batch size (default 16KB)
        props.put("linger.ms", 50);        // Wait up to 50ms for more messages
        props.put("compression.type", "snappy"); // Enable compression
        props.put("acks", "1");            // Acks setting

        Producer<String, String> producer = new KafkaProducer<>(props);
        try {
            for (int i = 0; i < 100; i++) {
                ProducerRecord<String, String> record =
                    new ProducerRecord<>("my_topic", Integer.toString(i), "message_" + i);
                producer.send(record);
            }
            System.out.println("100 messages sent to my_topic.");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            producer.close();
        }
    }
}

Optimalisere konsumentens gjennomstrømming

Konsumenter leser meldinger fra Kafka-emner. Effektiv konsumering innebærer å behandle meldinger raskt samtidig som man holder tritt med produsentens hastighet.

I likhet med produsenter kan konsumenter hente meldinger i grupper, noe som reduserer antallet forespørsler til brokerne.

Effektiv henting av meldinger

Flere innstillinger for konsumenter styrer hvor mange meldinger som hentes om gangen, og hvordan avstemmingen fungerer:

  • max.poll.records: Det maksimale antallet poster som returneres i ett enkelt poll()-kall. En høyere verdi betyr at flere poster behandles per avstemming, noe som øker gjennomstrømmingen.
  • fetch.min.bytes: Den minste datamengden i byte som konsumenten venter på å hente fra brokeren. Hvis man venter på mer data, kan gjennomstrømmingen øke fordi antallet forespørsler reduseres.
  • fetch.max.wait.ms: Den maksimale tiden brokeren venter på at fetch.min.bytes skal være tilgjengelig før data sendes.

Automatisk kontra manuell commit

Kafka-konsumenter sporer fremdriften sin ved hjelp av offseter. Når en offset committes, markeres meldinger frem til dette punktet som behandlet.

  • enable.auto.commit: Hvis true (standard), committes offseter automatisk i bakgrunnen. Dette er praktisk, men kan føre til at meldinger behandles flere ganger eller at data går tapt ved en krasj.
  • auto.commit.interval.ms: Hvor ofte automatiske committer utføres. Hvis intervallet reduseres, kan risikoen for duplikater bli mindre, men det medfører mer belastning.

For høy ytelse og pålitelighet velger mange applikasjoner å committe offseter manuelt.

Justering for gjennomstrømming

Se for deg et scenario der du må maksimere gjennomstrømmingen til en Kafka-produsent.

Oppsummering: justering av produsent og konsument

Vi har gått gjennom viktige innstillinger for optimalisering av ytelsen til Kafka-produsenter og -konsumenter:

  • Produsenter: Juster batch.size, linger.ms og compression.type for bedre gjennomstrømming. Finn en balanse mellom acks, pålitelighet og ventetid.
  • Konsumenter: Juster max.poll.records, fetch.min.bytes og fetch.max.wait.ms for effektiv henting av meldinger. Forstå avveiningene mellom automatisk og manuell commit.

Husk at justering handler om å finne den rette balansen for behovene i akkurat din applikasjon!

Gratis å komme i gang

Lær deg Grunnleggende Apache Kafka og strømming 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 «Produsent- og forbrukerytelse» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Grunnleggende Apache Kafka og strømming, inkludert «Produsent- og forbrukerytelse», 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 Grunnleggende Apache Kafka og strømming inneholder totalt 4 leksjoner.

Hva lærer jeg i «Produsent- og forbrukerytelse»?

Juster konfigurasjonen av produsenter og forbrukere for å oppnå optimal gjennomstrømming og ventetid i applikasjonene dine. Du øver på Grunnleggende Apache Kafka og strømming 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 Grunnleggende Apache Kafka og strømming?

Ingen tidligere erfaring er nødvendig. Grunnleggende Apache Kafka og strømming 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 1 av 4.

Hvor lang tid tar leksjonen «Produsent- og forbrukerytelse»?

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 Grunnleggende Apache Kafka og strømming-leksjonen?

Ja. Alle Grunnleggende Apache Kafka og strømming-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. Produsent- og forbrukerytelse
  2. Meglerkonfigurasjon og -justering
  3. Optimalisering av disk-I/O og nettverk
  4. Batching, komprimering og justering av linger
← Tilbake til Grunnleggende Apache Kafka og strømming