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 Auch in der Bibliothek
Arbeiten mit XML in Go (Golang): Die Standardbibliothek encoding/xml
vcpkg für C++: Komplette Anleitung mit Beispielen
Arbeiten mit Markdown in C# (.NET): Bibliotheken und Beispiele
Internationalisierung (i18n) in JavaScript (Node.js): Die Bibliothek i18next