0Pricing
Apache Kafka & Stream Processing Fundamentals · Leçon

Opérations sans état ou avec état

Comprenez comment Kafka Streams traite les données avec ou sans conservation d’un état interne entre les enregistrements.

Opérations sans état ou avec état est une leçon Apache Kafka & Stream Processing Fundamentals gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Apache Kafka & Stream Processing Fundamentals, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Apache Kafka & Stream Processing Fundamentals comprend 4 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

Stateless vs. Stateful Streams

In Kafka Streams, how you process data falls into two main categories: stateless and stateful operations.

Understanding this distinction is crucial for building efficient and correct real-time data pipelines. It impacts how your application remembers (or forgets) past events.

What are Stateless Operations?

Stateless operations process each incoming record independently. They don't remember any past records or maintain an internal state across events.

Think of it like a simple function: you give it an input, and it produces an output, without needing any memory of previous inputs.

Stateless Example: Map & Filter

Common stateless operations include map, filter, flatMap, and peek. They transform or filter records one by one.

Here's a simple Kafka Streams app using mapValues to convert all incoming message values to uppercase:

import org.apache.kafka.common.serialization.Serdes;
import org.apache.kafka.streams.KafkaStreams;
import org.apache.kafka.streams.StreamsBuilder;
import org.apache.kafka.streams.StreamsConfig;
import org.apache.kafka.streams.Topology;
import org.apache.kafka.streams.kstream.KStream;

import java.util.Properties;

public class StatelessMapApp {
  public static void main(String[] args) {
    Properties props = new Properties();
    props.put(StreamsConfig.APPLICATION_ID_CONFIG,
              "stateless-map-app");
    props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG,
              "localhost:9092");
    props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_BY_KEY_CLASS_CONFIG,
              Serdes.String().getClass());
    props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_BY_KEY_CLASS_CONFIG,
              Serdes.String().getClass());

    StreamsBuilder builder = new StreamsBuilder();
    KStream<String, String> source = builder.stream("input-topic");

    // Stateless operation: mapValues
    KStream<String, String> upperCaseStream =
        source.mapValues(value -> value.toUpperCase());

    upperCaseStream.to("output-topic");

    Topology topology = builder.build();
    KafkaStreams streams = new KafkaStreams(topology, props);
    streams.start();
    // In a real app, add a shutdown hook.
  }
}

When to Use Stateless Operations

Stateless operations are ideal for:

  • Simple Transformations: Changing data format, type conversion.
  • Filtering: Removing unwanted records.
  • Data Cleansing: Basic sanitization of individual records.

They are generally simpler to implement and have less overhead because no state needs to be managed.

What are Stateful Operations?

Stateful operations are those that need to remember past records or combine information across multiple records to produce a result.

They maintain an internal state, which is stored locally within the Kafka Streams application instance. This state allows them to perform aggregations, joins, and windowing.

Stateful Example: Counting Events

A classic example of a stateful operation is count(). To count events per key, the application must remember previous counts for each key.

This operation transforms a KStream into a KTable, which represents a changelog of aggregated results.

import org.apache.kafka.common.serialization.Serdes;
import org.apache.kafka.streams.KafkaStreams;
import org.apache.kafka.streams.StreamsBuilder;
import org.apache.kafka.streams.StreamsConfig;
import org.apache.kafka.streams.Topology;
import org.apache.kafka.streams.kstream.KStream;
import org.apache.kafka.streams.kstream.KTable;
import org.apache.kafka.streams.kstream.Materialized;

import java.util.Properties;

public class StatefulCountApp {
  public static void main(String[] args) {
    Properties props = new Properties();
    props.put(StreamsConfig.APPLICATION_ID_CONFIG,
              "stateful-count-app");
    props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG,
              "localhost:9092");
    props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_BY_KEY_CLASS_CONFIG,
              Serdes.String().getClass());
    props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_BY_KEY_CLASS_CONFIG,
              Serdes.String().getClass());

    StreamsBuilder builder = new StreamsBuilder();
    KStream<String, String> source = builder.stream("input-topic");

    // Stateful operation: count by key
    KTable<String, Long> countsTable = source
        .groupByKey()
        .count(Materialized.as("counts-store")); // A named state store

    countsTable.toStream().to("output-topic");

    Topology topology = builder.build();
    KafkaStreams streams = new KafkaStreams(topology, props);
    streams.start();
    // In a real app, add a shutdown hook.
  }
}

More Stateful Operations

Besides count(), other common stateful operations include:

  • Aggregations: reduce(), aggregate() (e.g., calculating sums, averages).
  • Joins: Combining data from two streams or a stream and a table based on a common key.
  • Windowing: Grouping records that fall within a defined time frame (e.g., 5-minute window).

These operations all rely on maintaining state to function correctly.

Kafka Streams State Stores

Kafka Streams manages state using internal state stores. These are typically backed by a local key-value store like RocksDB.

For fault tolerance, Kafka Streams also uses internal Kafka topics (called changelog topics) to continuously back up the state store. If an application instance fails, its state can be restored from the changelog topic by a new instance.

Quick Check: Identify Operations

Which of these Kafka Streams operations is considered stateless?

Recap: Stateless vs. Stateful

We've explored the key differences between stateless and stateful operations in Kafka Streams:

  • Stateless: Processes records individually, no memory of past events. Ideal for simple transformations and filtering.
  • Stateful: Requires internal memory (state stores) to combine or remember information across records. Essential for aggregations, joins, and windowing.

Choosing the right type of operation is fundamental to designing robust and efficient stream processing applications.

Questions Fréquemment Posées

La leçon « Opérations sans état ou avec état » est-elle gratuite ?

Oui — le texte complet de « Opérations sans état ou avec état » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Apache Kafka & Stream Processing Fundamentals, passe à CoddyKit PRO. Le cours Apache Kafka & Stream Processing Fundamentals comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Opérations sans état ou avec état » ?

Comprenez comment Kafka Streams traite les données avec ou sans conservation d’un état interne entre les enregistrements. Tu pratiques Apache Kafka & Stream Processing Fundamentals avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Apache Kafka & Stream Processing Fundamentals ?

Aucune expérience préalable n'est requise. Apache Kafka & Stream Processing Fundamentals sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Opérations sans état ou avec état » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Apache Kafka & Stream Processing Fundamentals ?

Oui. Chaque leçon Apache Kafka & Stream Processing Fundamentals inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Créer une application Kafka Streams simple
  2. Concepts de KStream et KTable
  3. Opérations sans état ou avec état
  4. Serdes et sérialisation des données dans Kafka Streams
← Retour à Apache Kafka & Stream Processing Fundamentals