Arbeit mit Apache Kafka in Java: vollständiger Leitfaden für Entwickler

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeit mit Apache Kafka in Java: von den Grundlagen bis zur fortgeschrittenen Nutzung



Apache Kafka ist eine verteilte Plattform für die Stream-Verarbeitung von Daten, die zum De-facto-Standard für den Aufbau event-driven Architekturen geworden ist. In diesem Leitfaden werden wir durchgehen, wie man effektiv mit Kafka in Java arbeitet: von der Installation der benötigten Bibliotheken bis zum Schreiben eines Producers und Consumers mit Fehlerbehandlung.



Warum Java und Kafka das ideale Paar sind?

Java ist aus mehreren Gründen eine der Hauptsprachen für die Arbeit mit Kafka:

  • Der offizielle Kafka-Client ist in Java geschrieben und bietet maximale Leistung
  • Reichhaltiges Ökosystem an Bibliotheken (Spring Kafka, Kafka Streams, Akka Streams)
  • Starke Typisierung und die Möglichkeit zur Feinabstimmung über Konfigurationsobjekte


Installation und Einbindung von Abhängigkeiten

Für die Arbeit mit Kafka in Java müssen Sie eine Abhängigkeit in pom.xml (Maven) oder build.gradle (Gradle) hinzufügen.



Maven

<dependency>    <groupId>org.apache.kafka</groupId>    <artifactId>kafka-clients</artifactId>    <version>3.6.0</version></dependency>


Gradle

implementation 'org.apache.kafka:kafka-clients:3.6.0'


Erstellen eines Kafka Producers

Der Producer ist für das Senden von Nachrichten an Kafka-Topics verantwortlich. Hier ist ein grundlegendes Konfigurationsbeispiel:



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

public class SimpleProducer { public static void main(String[] args) { // 1. Konfiguration der Producer-Eigenschaften Properties props = new Properties(); props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); // 2. Erstellen des Producers KafkaProducer<String, String> producer = new KafkaProducer<>(props); // 3. Senden einer Nachricht ProducerRecord<String, String> record = new ProducerRecord<>( "my-topic", "key-1", "Hello, Kafka from Java!" ); // 4. Asynchrones Senden mit Callback producer.send(record, (metadata, exception) -> { if (exception == null) { System.out.println("Nachricht gesendet: " + "topic=" + metadata.topic() + ", partition=" + metadata.partition() + ", offset=" + metadata.offset()); } else { System.err.println("Fehler beim Senden: " + exception.getMessage()); } }); // 5. Schließen des Producers producer.close(); }}


Erstellen eines Kafka Consumers

Der Consumer liest Nachrichten aus Topics. Es ist wichtig, die Consumer-Gruppe für die Lastverteilung richtig zu konfigurieren.



import org.apache.kafka.clients.consumer.*;import org.apache.kafka.common.serialization.StringDeserializer;import java.time.Duration;import java.util.Collections;import java.util.Properties;

public class SimpleConsumer { public static void main(String[] args) { // 1. Konfiguration der Consumer-Eigenschaften Properties props = new Properties(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); props.put(ConsumerConfig.GROUP_ID_CONFIG, "my-consumer-group"); props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); props.put(Consu

Empfehlungen